<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[189155] trunk/LayoutTests</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/189155">189155</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2015-08-29 22:07:17 -0700 (Sat, 29 Aug 2015)</dd>
</dl>
<h3>Log Message</h3>
<pre>Import W3C DOM test suite from github.com/w3c/web-platform-tests
https://bugs.webkit.org/show_bug.cgi?id=148546
Reviewed by Alexey Proskuryakov.
Import W3C DOM test suite from github.com/w3c/web-platform-tests
to improve coverage and track progress.
* http/tests/w3c/dom/*: Added.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsTestExpectations">trunk/LayoutTests/TestExpectations</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestshttptestsresourcesWebIDLParserjs">trunk/LayoutTests/http/tests/resources/WebIDLParser.js</a></li>
<li><a href="#trunkLayoutTestshttptestsresourcesidlharnessjs">trunk/LayoutTests/http/tests/resources/idlharness.js</a></li>
<li><a href="#trunkLayoutTestshttptestsresourcestestharnesscss">trunk/LayoutTests/http/tests/resources/testharness.css</a></li>
<li><a href="#trunkLayoutTestshttptestsresourcestestharnessjs">trunk/LayoutTests/http/tests/resources/testharness.js</a></li>
<li><a href="#trunkLayoutTestshttptestsresourcestestharnessreportjs">trunk/LayoutTests/http/tests/resources/testharnessreport.js</a></li>
<li>trunk/LayoutTests/http/tests/w3c/dom/</li>
<li>trunk/LayoutTests/http/tests/w3c/dom/collections/</li>
<li><a href="#trunkLayoutTestshttptestsw3cdomcollectionsHTMLCollectionemptynameexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/collections/HTMLCollection-empty-name-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomcollectionsHTMLCollectionemptynamehtml">trunk/LayoutTests/http/tests/w3c/dom/collections/HTMLCollection-empty-name.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomcollectionsw3cimportlog">trunk/LayoutTests/http/tests/w3c/dom/collections/w3c-import.log</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomcommonjs">trunk/LayoutTests/http/tests/w3c/dom/common.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomconstantsjs">trunk/LayoutTests/http/tests/w3c/dom/constants.js</a></li>
<li>trunk/LayoutTests/http/tests/w3c/dom/events/</li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventconstantsexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/Event-constants-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventconstantshtml">trunk/LayoutTests/http/tests/w3c/dom/events/Event-constants.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventconstructorsexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/Event-constructors-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventconstructorshtml">trunk/LayoutTests/http/tests/w3c/dom/events/Event-constructors.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventdefaultPreventedexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/Event-defaultPrevented-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventdefaultPreventedhtml">trunk/LayoutTests/http/tests/w3c/dom/events/Event-defaultPrevented.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventdispatchbubblesfalseexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-bubbles-false-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventdispatchbubblesfalsehtml">trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-bubbles-false.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventdispatchhandlerschangedexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-handlers-changed-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventdispatchhandlerschangedhtml">trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-handlers-changed.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventdispatchomittedcaptureexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-omitted-capture-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventdispatchomittedcapturehtml">trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-omitted-capture.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventdispatchredispatchexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-redispatch-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventdispatchredispatchhtml">trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-redispatch.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventdispatchreenterexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-reenter-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventdispatchreenterhtml">trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-reenter.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventdispatchtargetmovedexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-moved-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventdispatchtargetmovedhtml">trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-moved.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventdispatchtargetremovedexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-removed-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventdispatchtargetremovedhtml">trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-removed.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventinitEventexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/Event-initEvent-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventinitEventhtml">trunk/LayoutTests/http/tests/w3c/dom/events/Event-initEvent.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventpropagationexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/Event-propagation-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventpropagationhtml">trunk/LayoutTests/http/tests/w3c/dom/events/Event-propagation.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventtypeemptyexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/Event-type-empty-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventtypeemptyhtml">trunk/LayoutTests/http/tests/w3c/dom/events/Event-type-empty.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventtypeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/Event-type-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventtypehtml">trunk/LayoutTests/http/tests/w3c/dom/events/Event-type.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventTargetaddEventListenerexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-addEventListener-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventTargetaddEventListenerhtml">trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-addEventListener.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventTargetdispatchEventexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventTargetdispatchEventreturnvalueexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent-returnvalue-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventTargetdispatchEventreturnvaluehtml">trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent-returnvalue.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventTargetdispatchEventhtml">trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventTargetremoveEventListenerexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-removeEventListener-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsEventTargetremoveEventListenerhtml">trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-removeEventListener.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsProgressEventexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/events/ProgressEvent-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsProgressEventhtml">trunk/LayoutTests/http/tests/w3c/dom/events/ProgressEvent.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomeventsw3cimportlog">trunk/LayoutTests/http/tests/w3c/dom/events/w3c-import.log</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomhistoricalexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/historical-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomhistoricalhtml">trunk/LayoutTests/http/tests/w3c/dom/historical.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdominterfaceobjectsexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/interface-objects-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdominterfaceobjectshtml">trunk/LayoutTests/http/tests/w3c/dom/interface-objects.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdominterfacesexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/interfaces-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdominterfaceshtml">trunk/LayoutTests/http/tests/w3c/dom/interfaces.html</a></li>
<li>trunk/LayoutTests/http/tests/w3c/dom/lists/</li>
<li><a href="#trunkLayoutTestshttptestsw3cdomlistsDOMTokenListstringifierexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/lists/DOMTokenList-stringifier-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomlistsDOMTokenListstringifierhtml">trunk/LayoutTests/http/tests/w3c/dom/lists/DOMTokenList-stringifier.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomlistsw3cimportlog">trunk/LayoutTests/http/tests/w3c/dom/lists/w3c-import.log</a></li>
<li>trunk/LayoutTests/http/tests/w3c/dom/nodes/</li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCharacterDataappendDataexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-appendData-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCharacterDataappendDatahtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-appendData.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCharacterDatadataexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-data-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCharacterDatadatahtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-data.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCharacterDatadeleteDataexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-deleteData-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCharacterDatadeleteDatahtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-deleteData.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCharacterDatainsertDataexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-insertData-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCharacterDatainsertDatahtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-insertData.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCharacterDataremoveexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-remove-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCharacterDataremovehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-remove.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCharacterDatareplaceDataexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-replaceData-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCharacterDatareplaceDatahtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-replaceData.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCharacterDatasubstringDataexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-substringData-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCharacterDatasubstringDatahtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-substringData.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesChildNodeafterexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-after-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesChildNodeafterhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-after.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesChildNodebeforeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-before-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesChildNodebeforehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-before.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesChildNoderemovejs">trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-remove.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesChildNodereplaceWithexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-replaceWith-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesChildNodereplaceWithhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-replaceWith.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCommentTextconstructorjs">trunk/LayoutTests/http/tests/w3c/dom/nodes/Comment-Text-constructor.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCommentconstructorexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Comment-constructor-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesCommentconstructorhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Comment-constructor.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDOMImplementationcreateDocumentexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocument-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDOMImplementationcreateDocumenthtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocument.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDOMImplementationcreateDocumentTypeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocumentType-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDOMImplementationcreateDocumentTypehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocumentType.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDOMImplementationcreateHTMLDocumentexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createHTMLDocument-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDOMImplementationcreateHTMLDocumenthtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createHTMLDocument.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDOMImplementationcreateHTMLDocumentjs">trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createHTMLDocument.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDOMImplementationhasFeatureexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-hasFeature-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDOMImplementationhasFeaturehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-hasFeature.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentElementgetElementsByTagNamejs">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-Element-getElementsByTagName.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentElementgetElementsByTagNameNSjs">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-Element-getElementsByTagNameNS.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentURLsubexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-URL.sub-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentURLsubhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-URL.sub.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentadoptNodeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-adoptNode-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentadoptNodehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-adoptNode.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcharacterSetnormalizationexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-characterSet-normalization-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcharacterSetnormalizationhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-characterSet-normalization.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentconstructorexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-constructor-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentconstructorhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-constructor.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateAttributeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createAttribute-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateAttributehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createAttribute.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateCommentcreateTextNodejs">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createComment-createTextNode.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateCommentexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createComment-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateCommenthtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createComment.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateElementexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElement-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateElementnamespaceexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElement-namespace-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateElementhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElement.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateElementNSexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElementNS-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateElementNShtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElementNS.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateElementNSjs">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElementNS.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateEventexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createEvent-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateEventhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createEvent.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateEventjs">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createEvent.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateProcessingInstructionexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateProcessingInstructionxhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateProcessingInstructionxhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateProcessingInstructionhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateProcessingInstructionjs">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateTextNodeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createTextNode-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateTextNodehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createTextNode.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateTreeWalkerexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createTreeWalker-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentcreateTreeWalkerhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createTreeWalker.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentdoctypeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-doctype-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentdoctypehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-doctype.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentgetElementByIdexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementById-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentgetElementByIdhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementById.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentgetElementsByTagNameexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentgetElementsByTagNamexhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentgetElementsByTagNamexhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentgetElementsByTagNamehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentgetElementsByTagNameNSexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagNameNS-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentgetElementsByTagNameNShtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagNameNS.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentimplementationexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-implementation-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentimplementationhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-implementation.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentimportNodeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-importNode-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentimportNodehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-importNode.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentTypeliteralexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentTypeliteralxhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentTypeliteralxhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentTypeliteralhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentTyperemoveexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-remove-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesDocumentTyperemovehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-remove.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementnullexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementnullxhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementnullxhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementnullhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountdynamicaddexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountdynamicaddxhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountdynamicaddxhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountdynamicaddhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountdynamicremoveexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountdynamicremovexhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountdynamicremovexhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountdynamicremovehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountnochildexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountnochildxhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountnochildxhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountnochildhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountxhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountxhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildElementCounthtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildrenexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-children-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementchildrenhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-children.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementclasslistexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-classlist-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementclasslisthtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-classlist.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementclosestexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-closest-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementclosesthtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-closest.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildentityxhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-entity-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildentityxhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-entity-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildnamespaceexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildnamespacexhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildnamespacexhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildnamespacehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildxhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildxhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementgetElementsByClassNameexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByClassName-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementgetElementsByClassNamehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByClassName.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementgetElementsByTagNameexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagName-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementgetElementsByTagNamehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagName.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementgetElementsByTagNameNSexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagNameNS-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementgetElementsByTagNameNShtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagNameNS.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementlastElementChildexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementlastElementChildxhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementlastElementChildxhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementlastElementChildhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementmatchesexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-matches-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementmatcheshtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-matches.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementmatchesjs">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-matches.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementnextElementSiblingexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementnextElementSiblingxhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementnextElementSiblingxhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementnextElementSiblinghtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementpreviousElementSiblingexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementpreviousElementSiblingxhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementpreviousElementSiblingxhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementpreviousElementSiblinghtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementremoveexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-remove-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementremovehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-remove.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementremoveAttributeNSexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-removeAttributeNS-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementremoveAttributeNShtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-removeAttributeNS.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementsiblingElementnullexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementsiblingElementnullxhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementsiblingElementnullxhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementsiblingElementnullhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementtagNameexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-tagName-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesElementtagNamehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-tagName.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesMutationObserverattributesexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-attributes-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesMutationObserverattributeshtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-attributes.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesMutationObservercharacterDataexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-characterData-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesMutationObservercharacterDatahtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-characterData.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesMutationObserverchildListexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-childList-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesMutationObserverchildListhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-childList.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesMutationObserverdisconnectexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-disconnect-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesMutationObserverdisconnecthtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-disconnect.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesMutationObserverdocumentexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-document-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesMutationObserverdocumenthtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-document.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesMutationObserverinnerouterexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-inner-outer-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesMutationObserverinnerouterhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-inner-outer.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesMutationObservertakeRecordsexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-takeRecords-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesMutationObservertakeRecordshtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-takeRecords.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodeappendChildexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-appendChild-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodeappendChildhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-appendChild.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodebaseURIexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-baseURI-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodebaseURIhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-baseURI.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodechildNodesexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-childNodes-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodechildNodeshtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-childNodes.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodecloneNodeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-cloneNode-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodecloneNodehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-cloneNode.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodecompareDocumentPositionexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-compareDocumentPosition-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodecompareDocumentPositionhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-compareDocumentPosition.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodeconstantsexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-constants-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodeconstantshtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-constants.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodecontainsexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-contains-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodecontainsxhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-contains-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodecontainsxhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-contains-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodecontainshtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-contains.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodeinsertBeforeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-insertBefore-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodeinsertBeforehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-insertBefore.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodeisEqualNodeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-isEqualNode-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodeisEqualNodexhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-isEqualNode-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodeisEqualNodexhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-isEqualNode-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodelookupNamespaceURIexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupNamespaceURI-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodelookupNamespaceURIhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupNamespaceURI.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodelookupPrefixexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupPrefix-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodelookupPrefixxhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupPrefix-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodelookupPrefixxhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupPrefix-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodenodeNameexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodenodeNamexhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodenodeNamexhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodenodeNamehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodenodeValueexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeValue-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodenodeValuehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeValue.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodenormalizeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-normalize-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodenormalizehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-normalize.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodeparentElementexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-parentElement-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodeparentElementhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-parentElement.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodeparentNodeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-parentNode-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodeparentNodehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-parentNode.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodepropertiesexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-properties-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodepropertieshtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-properties.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNoderemoveChildexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-removeChild-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNoderemoveChildhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-removeChild.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodereplaceChildexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-replaceChild-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodereplaceChildhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-replaceChild.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodetextContentexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-textContent-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesNodetextContenthtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-textContent.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesParentNodeappendexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-append-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesParentNodeappendhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-append.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesParentNodeprependexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-prepend-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesParentNodeprependhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-prepend.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesParentNodequerySelectorAllexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesParentNodequerySelectorAllxhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesParentNodequerySelectorAllxhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesParentNodequerySelectorAllhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesParentNodequerySelectorAlljs">trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesProcessingInstructionliteral1expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-1-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesProcessingInstructionliteral1xhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-1-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesProcessingInstructionliteral1xhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-1-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesProcessingInstructionliteral2expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-2-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesProcessingInstructionliteral2xhtmlexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-2-xhtml-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesProcessingInstructionliteral2xhtmlxhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-2-xhtml.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesTextconstructorexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Text-constructor-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesTextconstructorhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Text-constructor.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesTextsplitTextexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/Text-splitText-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesTextsplitTexthtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/Text-splitText.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesappendonDocumentexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/append-on-Document-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesappendonDocumenthtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/append-on-Document.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesattributesexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/attributes-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesattributeshtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/attributes.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesattributesjs">trunk/LayoutTests/http/tests/w3c/dom/nodes/attributes.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodescaseexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/case-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodescasehtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/case.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodescasejs">trunk/LayoutTests/http/tests/w3c/dom/nodes/case.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodescreatorsjs">trunk/LayoutTests/http/tests/w3c/dom/nodes/creators.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesencodingpy">trunk/LayoutTests/http/tests/w3c/dom/nodes/encoding.py</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName01expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-01-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName01htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-01.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName02expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-02-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName02htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-02.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName03expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-03-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName03htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-03.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName04expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-04-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName04htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-04.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName05expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-05-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName05htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-05.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName06expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-06-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName06htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-06.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName07expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-07-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName07htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-07.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName08expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-08-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName08htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-08.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName09expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-09-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName09htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-09.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName10expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-10-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName10xhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-10.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName11expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-11-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName11xhtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-11.xhtml</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName12expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-12-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName12htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-12.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName13expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-13-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName13htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-13.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName14expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-14-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName14htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-14.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName15expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-15-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName15htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-15.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName16expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-16-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName16htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-16.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName17expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-17-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName17htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-17.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName18expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-18-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName18htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-18.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName19expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-19-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName19htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-19.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName20expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-20-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName20htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-20.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName21expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-21-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName21htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-21.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName22expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-22-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName22htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-22.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName23expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-23-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName23htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-23.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName24expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-24-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName24htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-24.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName25expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-25-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName25htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-25.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName26expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-26-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName26htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-26.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName27expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-27-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName27htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-27.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName28expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-28-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName28htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-28.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName29expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-29-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName29htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-29.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName30expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-30-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName30htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-30.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName31expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-31-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName31htm">trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-31.htm</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesmutationobserversjs">trunk/LayoutTests/http/tests/w3c/dom/nodes/mutationobservers.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesprependonDocumentexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/nodes/prepend-on-Document-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesprependonDocumenthtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/prepend-on-Document.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesproductionsjs">trunk/LayoutTests/http/tests/w3c/dom/nodes/productions.js</a></li>
<li>trunk/LayoutTests/http/tests/w3c/dom/nodes/resources/</li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesresourcesParentNodequerySelectorAllcontenthtml">trunk/LayoutTests/http/tests/w3c/dom/nodes/resources/ParentNode-querySelector-All-content.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesresourcesParentNodequerySelectorAllcontentxht">trunk/LayoutTests/http/tests/w3c/dom/nodes/resources/ParentNode-querySelector-All-content.xht</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesselectorsjs">trunk/LayoutTests/http/tests/w3c/dom/nodes/selectors.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomnodesw3cimportlog">trunk/LayoutTests/http/tests/w3c/dom/nodes/w3c-import.log</a></li>
<li>trunk/LayoutTests/http/tests/w3c/dom/ranges/</li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangeattributesexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-attributes-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangeattributeshtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-attributes.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangecloneContentsexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneContents-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangecloneContentshtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneContents.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangecloneRangeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneRange-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangecloneRangehtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneRange.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangecollapseexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-collapse-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangecollapsehtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-collapse.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangecommonAncestorContainer2expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer-2-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangecommonAncestorContainer2html">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer-2.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangecommonAncestorContainerexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangecommonAncestorContainerhtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangecompareBoundaryPointsexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-compareBoundaryPoints-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangecompareBoundaryPointshtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-compareBoundaryPoints.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangecomparePoint2expectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint-2-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangecomparePoint2html">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint-2.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangecomparePointexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangecomparePointhtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangedeleteContentsexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-deleteContents-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangedeleteContentshtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-deleteContents.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangedetachexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-detach-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangedetachhtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-detach.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangeextractContentsexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-extractContents-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangeextractContentshtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-extractContents.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangeinsertNodeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-insertNode-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangeinsertNodehtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-insertNode.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangeintersectsNodebindingexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode-binding-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangeintersectsNodebindinghtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode-binding.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangeintersectsNodeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangeintersectsNodehtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangeisPointInRangeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-isPointInRange-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangeisPointInRangehtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-isPointInRange.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangemutationsexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-mutations-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangemutationshtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-mutations.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangeselectNodeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-selectNode-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangeselectNodehtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-selectNode.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangesetexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-set-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangesethtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-set.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangesurroundContentsexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-surroundContents-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesRangesurroundContentshtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-surroundContents.html</a></li>
<li>trunk/LayoutTests/http/tests/w3c/dom/ranges/resources/</li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesresourcesRangetestiframehtml">trunk/LayoutTests/http/tests/w3c/dom/ranges/resources/Range-test-iframe.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomrangesw3cimportlog">trunk/LayoutTests/http/tests/w3c/dom/ranges/w3c-import.log</a></li>
<li>trunk/LayoutTests/http/tests/w3c/dom/traversal/</li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalNodeFilterconstantsexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeFilter-constants-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalNodeFilterconstantshtml">trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeFilter-constants.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalNodeIteratorexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalNodeIteratorremovalexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator-removal-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalNodeIteratorremovalhtml">trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator-removal.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalNodeIteratorhtml">trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkeracceptNodefilterexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-acceptNode-filter-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkeracceptNodefilterhtml">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-acceptNode-filter.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerbasicexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-basic-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerbasichtml">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-basic.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkercurrentNodeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-currentNode-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkercurrentNodehtml">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-currentNode.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerpreviousNodeLastChildRejectexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousNodeLastChildReject-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerpreviousNodeLastChildRejecthtml">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousNodeLastChildReject.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerpreviousSiblingLastChildSkipexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousSiblingLastChildSkip-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerpreviousSiblingLastChildSkiphtml">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousSiblingLastChildSkip.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkertraversalrejectexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-reject-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkertraversalrejecthtml">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-reject.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkertraversalskipexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkertraversalskipmostexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip-most-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkertraversalskipmosthtml">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip-most.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkertraversalskiphtml">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerwalkingoutsideatreeexpectedtxt">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-walking-outside-a-tree-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerwalkingoutsideatreehtml">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-walking-outside-a-tree.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerhtml">trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker.html</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversaltraversalsupportjs">trunk/LayoutTests/http/tests/w3c/dom/traversal/traversal-support.js</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomtraversalw3cimportlog">trunk/LayoutTests/http/tests/w3c/dom/traversal/w3c-import.log</a></li>
<li><a href="#trunkLayoutTestshttptestsw3cdomw3cimportlog">trunk/LayoutTests/http/tests/w3c/dom/w3c-import.log</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (189154 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-08-30 02:07:42 UTC (rev 189154)
+++ trunk/LayoutTests/ChangeLog        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2015-08-29 Chris Dumez <cdumez@apple.com>
+
+ Import W3C DOM test suite from github.com/w3c/web-platform-tests
+ https://bugs.webkit.org/show_bug.cgi?id=148546
+
+ Reviewed by Alexey Proskuryakov.
+
+ Import W3C DOM test suite from github.com/w3c/web-platform-tests
+ to improve coverage and track progress.
+
+ * http/tests/w3c/dom/*: Added.
+
</ins><span class="cx"> 2015-08-29 Chris Fleizach <cfleizach@apple.com>
</span><span class="cx">
</span><span class="cx"> AX: When navigating the elements of a scrollable element with VoiceOver, the scrollTop() position of the element does not permanently change
</span></span></pre></div>
<a id="trunkLayoutTestsTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/TestExpectations (189154 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/TestExpectations        2015-08-30 02:07:42 UTC (rev 189154)
+++ trunk/LayoutTests/TestExpectations        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -213,8 +213,15 @@
</span><span class="cx"> webkit.org/b/137149 fast/selectors/nth-child-of-basics.html [ Slow ]
</span><span class="cx">
</span><span class="cx"> # Promises/A+ 2.3.3 has many tests and it sometimes exceeds the time limit.
</span><del>-webkit.org/b/136878 js/promises-tests/promises-tests-2-3-3.html [ Slow ]
</del><ins>+webkit.org/b/136878 js/promises-tests/promises-tests-2-3-3.html [ Slow ]
</ins><span class="cx">
</span><ins>+# Skip W3C tests that are too slow in debug builds.
+webkit.org/b/148546 [ Debug ] http/tests/w3c/dom/ranges/Range-compareBoundaryPoints.html [ Skip ]
+webkit.org/b/148546 [ Debug ] http/tests/w3c/dom/ranges/Range-comparePoint.html [ Skip ]
+webkit.org/b/148546 [ Debug ] http/tests/w3c/dom/ranges/Range-isPointInRange.html [ Skip ]
+webkit.org/b/148546 [ Debug ] http/tests/w3c/dom/ranges/Range-mutations.html [ Skip ]
+webkit.org/b/148546 [ Debug ] http/tests/w3c/dom/ranges/Range-set.html [ Skip ]
+
</ins><span class="cx"> # @supports W3C Failures
</span><span class="cx"> webkit.org/b/137566 css3/conditional/w3c/at-supports-010.html [ ImageOnlyFailure ]
</span><span class="cx"> webkit.org/b/137568 css3/conditional/w3c/at-supports-014.html [ ImageOnlyFailure ]
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsresourcesWebIDLParserjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/resources/WebIDLParser.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/resources/WebIDLParser.js         (rev 0)
+++ trunk/LayoutTests/http/tests/resources/WebIDLParser.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,924 @@
</span><ins>+
+
+(function () {
+ var tokenise = function (str) {
+ var tokens = []
+ , re = {
+ "float": /^-?(([0-9]+\.[0-9]*|[0-9]*\.[0-9]+)([Ee][-+]?[0-9]+)?|[0-9]+[Ee][-+]?[0-9]+)/
+ , "integer": /^-?(0([Xx][0-9A-Fa-f]+|[0-7]*)|[1-9][0-9]*)/
+ , "identifier": /^[A-Z_a-z][0-9A-Z_a-z]*/
+ , "string": /^"[^"]*"/
+ , "whitespace": /^(?:[\t\n\r ]+|[\t\n\r ]*((\/\/.*|\/\*(.|\n|\r)*?\*\/)[\t\n\r ]*))+/
+ , "other": /^[^\t\n\r 0-9A-Z_a-z]/
+ }
+ , types = []
+ ;
+ for (var k in re) types.push(k);
+ while (str.length > 0) {
+ var matched = false;
+ for (var i = 0, n = types.length; i < n; i++) {
+ var type = types[i];
+ str = str.replace(re[type], function (tok) {
+ tokens.push({ type: type, value: tok });
+ matched = true;
+ return "";
+ });
+ if (matched) break;
+ }
+ if (matched) continue;
+ throw new Error("Token stream not progressing");
+ }
+ return tokens;
+ };
+
+ var parse = function (tokens, opt) {
+ var line = 1;
+ tokens = tokens.slice();
+
+ var FLOAT = "float"
+ , INT = "integer"
+ , ID = "identifier"
+ , STR = "string"
+ , OTHER = "other"
+ ;
+
+ var WebIDLParseError = function (str, line, input, tokens) {
+ this.message = str;
+ this.line = line;
+ this.input = input;
+ this.tokens = tokens;
+ };
+ WebIDLParseError.prototype.toString = function () {
+ return this.message + ", line " + this.line + " (tokens: '" + this.input + "')\n" +
+ JSON.stringify(this.tokens, null, 4);
+ };
+
+ var error = function (str) {
+ var tok = "", numTokens = 0, maxTokens = 5;
+ while (numTokens < maxTokens && tokens.length > numTokens) {
+ tok += tokens[numTokens].value;
+ numTokens++;
+ }
+ throw new WebIDLParseError(str, line, tok, tokens.slice(0, 5));
+ };
+
+ var last_token = null;
+
+ var consume = function (type, value) {
+ if (!tokens.length || tokens[0].type !== type) return;
+ if (typeof value === "undefined" || tokens[0].value === value) {
+ last_token = tokens.shift();
+ if (type === ID) last_token.value = last_token.value.replace(/^_/, "");
+ return last_token;
+ }
+ };
+
+ var ws = function () {
+ if (!tokens.length) return;
+ if (tokens[0].type === "whitespace") {
+ var t = tokens.shift();
+ t.value.replace(/\n/g, function (m) { line++; return m; });
+ return t;
+ }
+ };
+
+ var all_ws = function (store, pea) { // pea == post extended attribute, tpea = same for types
+ var t = { type: "whitespace", value: "" };
+ while (true) {
+ var w = ws();
+ if (!w) break;
+ t.value += w.value;
+ }
+ if (t.value.length > 0) {
+ if (store) {
+ var w = t.value
+ , re = {
+ "ws": /^([\t\n\r ]+)/
+ , "line-comment": /^\/\/(.*)\n?/m
+ , "multiline-comment": /^\/\*((?:.|\n|\r)*?)\*\//
+ }
+ , wsTypes = []
+ ;
+ for (var k in re) wsTypes.push(k);
+ while (w.length) {
+ var matched = false;
+ for (var i = 0, n = wsTypes.length; i < n; i++) {
+ var type = wsTypes[i];
+ w = w.replace(re[type], function (tok, m1) {
+ store.push({ type: type + (pea ? ("-" + pea) : ""), value: m1 });
+ matched = true;
+ return "";
+ });
+ if (matched) break;
+ }
+ if (matched) continue;
+ throw new Error("Surprising white space construct."); // this shouldn't happen
+ }
+ }
+ return t;
+ }
+ };
+
+ var integer_type = function () {
+ var ret = "";
+ all_ws();
+ if (consume(ID, "unsigned")) ret = "unsigned ";
+ all_ws();
+ if (consume(ID, "short")) return ret + "short";
+ if (consume(ID, "long")) {
+ ret += "long";
+ all_ws();
+ if (consume(ID, "long")) return ret + " long";
+ return ret;
+ }
+ if (ret) error("Failed to parse integer type");
+ };
+
+ var float_type = function () {
+ var ret = "";
+ all_ws();
+ if (consume(ID, "unrestricted")) ret = "unrestricted ";
+ all_ws();
+ if (consume(ID, "float")) return ret + "float";
+ if (consume(ID, "double")) return ret + "double";
+ if (ret) error("Failed to parse float type");
+ };
+
+ var primitive_type = function () {
+ var num_type = integer_type() || float_type();
+ if (num_type) return num_type;
+ all_ws();
+ if (consume(ID, "boolean")) return "boolean";
+ if (consume(ID, "byte")) return "byte";
+ if (consume(ID, "octet")) return "octet";
+ };
+
+ var const_value = function () {
+ if (consume(ID, "true")) return { type: "boolean", value: true };
+ if (consume(ID, "false")) return { type: "boolean", value: false };
+ if (consume(ID, "null")) return { type: "null" };
+ if (consume(ID, "Infinity")) return { type: "Infinity", negative: false };
+ if (consume(ID, "NaN")) return { type: "NaN" };
+ var ret = consume(FLOAT) || consume(INT);
+ if (ret) return { type: "number", value: 1 * ret.value };
+ var tok = consume(OTHER, "-");
+ if (tok) {
+ if (consume(ID, "Infinity")) return { type: "Infinity", negative: true };
+ else tokens.unshift(tok);
+ }
+ };
+
+ var type_suffix = function (obj) {
+ while (true) {
+ all_ws();
+ if (consume(OTHER, "?")) {
+ if (obj.nullable) error("Can't nullable more than once");
+ obj.nullable = true;
+ }
+ else if (consume(OTHER, "[")) {
+ all_ws();
+ consume(OTHER, "]") || error("Unterminated array type");
+ if (!obj.array) {
+ obj.array = 1;
+ obj.nullableArray = [obj.nullable];
+ }
+ else {
+ obj.array++;
+ obj.nullableArray.push(obj.nullable);
+ }
+ obj.nullable = false;
+ }
+ else return;
+ }
+ };
+
+ var single_type = function () {
+ var prim = primitive_type()
+ , ret = { sequence: false, generic: null, nullable: false, array: false, union: false }
+ , name
+ , value
+ ;
+ if (prim) {
+ ret.idlType = prim;
+ }
+ else if (name = consume(ID)) {
+ value = name.value;
+ all_ws();
+ // Generic types
+ if (consume(OTHER, "<")) {
+ // backwards compat
+ if (value === "sequence") {
+ ret.sequence = true;
+ }
+ ret.generic = value;
+ ret.idlType = type() || error("Error parsing generic type " + value);
+ all_ws();
+ if (!consume(OTHER, ">")) error("Unterminated generic type " + value);
+ all_ws();
+ if (consume(OTHER, "?")) ret.nullable = true;
+ return ret;
+ }
+ else {
+ ret.idlType = value;
+ }
+ }
+ else {
+ return;
+ }
+ type_suffix(ret);
+ if (ret.nullable && !ret.array && ret.idlType === "any") error("Type any cannot be made nullable");
+ return ret;
+ };
+
+ var union_type = function () {
+ all_ws();
+ if (!consume(OTHER, "(")) return;
+ var ret = { sequence: false, generic: null, nullable: false, array: false, union: true, idlType: [] };
+ var fst = type() || error("Union type with no content");
+ ret.idlType.push(fst);
+ while (true) {
+ all_ws();
+ if (!consume(ID, "or")) break;
+ var typ = type() || error("No type after 'or' in union type");
+ ret.idlType.push(typ);
+ }
+ if (!consume(OTHER, ")")) error("Unterminated union type");
+ type_suffix(ret);
+ return ret;
+ };
+
+ var type = function () {
+ return single_type() || union_type();
+ };
+
+ var argument = function (store) {
+ var ret = { optional: false, variadic: false };
+ ret.extAttrs = extended_attrs(store);
+ all_ws(store, "pea");
+ var opt_token = consume(ID, "optional");
+ if (opt_token) {
+ ret.optional = true;
+ all_ws();
+ }
+ ret.idlType = type();
+ if (!ret.idlType) {
+ if (opt_token) tokens.unshift(opt_token);
+ return;
+ }
+ var type_token = last_token;
+ if (!ret.optional) {
+ all_ws();
+ if (tokens.length >= 3 &&
+ tokens[0].type === "other" && tokens[0].value === "." &&
+ tokens[1].type === "other" && tokens[1].value === "." &&
+ tokens[2].type === "other" && tokens[2].value === "."
+ ) {
+ tokens.shift();
+ tokens.shift();
+ tokens.shift();
+ ret.variadic = true;
+ }
+ }
+ all_ws();
+ var name = consume(ID);
+ if (!name) {
+ if (opt_token) tokens.unshift(opt_token);
+ tokens.unshift(type_token);
+ return;
+ }
+ ret.name = name.value;
+ if (ret.optional) {
+ all_ws();
+ ret["default"] = default_();
+ }
+ return ret;
+ };
+
+ var argument_list = function (store) {
+ var ret = []
+ , arg = argument(store ? ret : null)
+ ;
+ if (!arg) return;
+ ret.push(arg);
+ while (true) {
+ all_ws(store ? ret : null);
+ if (!consume(OTHER, ",")) return ret;
+ var nxt = argument(store ? ret : null) || error("Trailing comma in arguments list");
+ ret.push(nxt);
+ }
+ };
+
+ var type_pair = function () {
+ all_ws();
+ var k = type();
+ if (!k) return;
+ all_ws()
+ if (!consume(OTHER, ",")) return;
+ all_ws();
+ var v = type();
+ if (!v) return;
+ return [k, v];
+ };
+
+ var simple_extended_attr = function (store) {
+ all_ws();
+ var name = consume(ID);
+ if (!name) return;
+ var ret = {
+ name: name.value
+ , "arguments": null
+ };
+ all_ws();
+ var eq = consume(OTHER, "=");
+ if (eq) {
+ all_ws();
+ ret.rhs = consume(ID);
+ if (!ret.rhs) return error("No right hand side to extended attribute assignment");
+ }
+ all_ws();
+ if (consume(OTHER, "(")) {
+ var args, pair;
+ // [Constructor(DOMString str)]
+ if (args = argument_list(store)) {
+ ret["arguments"] = args;
+ }
+ // [MapClass(DOMString, DOMString)]
+ else if (pair = type_pair()) {
+ ret.typePair = pair;
+ }
+ // [Constructor()]
+ else {
+ ret["arguments"] = [];
+ }
+ all_ws();
+ consume(OTHER, ")") || error("Unexpected token in extended attribute argument list or type pair");
+ }
+ return ret;
+ };
+
+ // Note: we parse something simpler than the official syntax. It's all that ever
+ // seems to be used
+ var extended_attrs = function (store) {
+ var eas = [];
+ all_ws(store);
+ if (!consume(OTHER, "[")) return eas;
+ eas[0] = simple_extended_attr(store) || error("Extended attribute with not content");
+ all_ws();
+ while (consume(OTHER, ",")) {
+ eas.push(simple_extended_attr(store) || error("Trailing comma in extended attribute"));
+ all_ws();
+ }
+ consume(OTHER, "]") || error("No end of extended attribute");
+ return eas;
+ };
+
+ var default_ = function () {
+ all_ws();
+ if (consume(OTHER, "=")) {
+ all_ws();
+ var def = const_value();
+ if (def) {
+ return def;
+ }
+ else {
+ var str = consume(STR) || error("No value for default");
+ str.value = str.value.replace(/^"/, "").replace(/"$/, "");
+ return str;
+ }
+ }
+ };
+
+ var const_ = function (store) {
+ all_ws(store, "pea");
+ if (!consume(ID, "const")) return;
+ var ret = { type: "const", nullable: false };
+ all_ws();
+ var typ = primitive_type();
+ if (!typ) {
+ typ = consume(ID) || error("No type for const");
+ typ = typ.value;
+ }
+ ret.idlType = typ;
+ all_ws();
+ if (consume(OTHER, "?")) {
+ ret.nullable = true;
+ all_ws();
+ }
+ var name = consume(ID) || error("No name for const");
+ ret.name = name.value;
+ all_ws();
+ consume(OTHER, "=") || error("No value assignment for const");
+ all_ws();
+ var cnt = const_value();
+ if (cnt) ret.value = cnt;
+ else error("No value for const");
+ all_ws();
+ consume(OTHER, ";") || error("Unterminated const");
+ return ret;
+ };
+
+ var inheritance = function () {
+ all_ws();
+ if (consume(OTHER, ":")) {
+ all_ws();
+ var inh = consume(ID) || error ("No type in inheritance");
+ return inh.value;
+ }
+ };
+
+ var operation_rest = function (ret, store) {
+ all_ws();
+ if (!ret) ret = {};
+ var name = consume(ID);
+ ret.name = name ? name.value : null;
+ all_ws();
+ consume(OTHER, "(") || error("Invalid operation");
+ ret["arguments"] = argument_list(store) || [];
+ all_ws();
+ consume(OTHER, ")") || error("Unterminated operation");
+ all_ws();
+ consume(OTHER, ";") || error("Unterminated operation");
+ return ret;
+ };
+
+ var callback = function (store) {
+ all_ws(store, "pea");
+ var ret;
+ if (!consume(ID, "callback")) return;
+ all_ws();
+ var tok = consume(ID, "interface");
+ if (tok) {
+ tokens.unshift(tok);
+ ret = interface_();
+ ret.type = "callback interface";
+ return ret;
+ }
+ var name = consume(ID) || error("No name for callback");
+ ret = { type: "callback", name: name.value };
+ all_ws();
+ consume(OTHER, "=") || error("No assignment in callback");
+ all_ws();
+ ret.idlType = return_type();
+ all_ws();
+ consume(OTHER, "(") || error("No arguments in callback");
+ ret["arguments"] = argument_list(store) || [];
+ all_ws();
+ consume(OTHER, ")") || error("Unterminated callback");
+ all_ws();
+ consume(OTHER, ";") || error("Unterminated callback");
+ return ret;
+ };
+
+ var attribute = function (store) {
+ all_ws(store, "pea");
+ var grabbed = []
+ , ret = {
+ type: "attribute"
+ , "static": false
+ , stringifier: false
+ , inherit: false
+ , readonly: false
+ };
+ if (consume(ID, "static")) {
+ ret["static"] = true;
+ grabbed.push(last_token);
+ }
+ else if (consume(ID, "stringifier")) {
+ ret.stringifier = true;
+ grabbed.push(last_token);
+ }
+ var w = all_ws();
+ if (w) grabbed.push(w);
+ if (consume(ID, "inherit")) {
+ if (ret["static"] || ret.stringifier) error("Cannot have a static or stringifier inherit");
+ ret.inherit = true;
+ grabbed.push(last_token);
+ var w = all_ws();
+ if (w) grabbed.push(w);
+ }
+ if (consume(ID, "readonly")) {
+ ret.readonly = true;
+ grabbed.push(last_token);
+ var w = all_ws();
+ if (w) grabbed.push(w);
+ }
+ if (!consume(ID, "attribute")) {
+ tokens = grabbed.concat(tokens);
+ return;
+ }
+ all_ws();
+ ret.idlType = type() || error("No type in attribute");
+ if (ret.idlType.sequence) error("Attributes cannot accept sequence types");
+ all_ws();
+ var name = consume(ID) || error("No name in attribute");
+ ret.name = name.value;
+ all_ws();
+ consume(OTHER, ";") || error("Unterminated attribute");
+ return ret;
+ };
+
+ var return_type = function () {
+ var typ = type();
+ if (!typ) {
+ if (consume(ID, "void")) {
+ return "void";
+ }
+ else error("No return type");
+ }
+ return typ;
+ };
+
+ var operation = function (store) {
+ all_ws(store, "pea");
+ var ret = {
+ type: "operation"
+ , getter: false
+ , setter: false
+ , creator: false
+ , deleter: false
+ , legacycaller: false
+ , "static": false
+ , stringifier: false
+ };
+ while (true) {
+ all_ws();
+ if (consume(ID, "getter")) ret.getter = true;
+ else if (consume(ID, "setter")) ret.setter = true;
+ else if (consume(ID, "creator")) ret.creator = true;
+ else if (consume(ID, "deleter")) ret.deleter = true;
+ else if (consume(ID, "legacycaller")) ret.legacycaller = true;
+ else break;
+ }
+ if (ret.getter || ret.setter || ret.creator || ret.deleter || ret.legacycaller) {
+ all_ws();
+ ret.idlType = return_type();
+ operation_rest(ret, store);
+ return ret;
+ }
+ if (consume(ID, "static")) {
+ ret["static"] = true;
+ ret.idlType = return_type();
+ operation_rest(ret, store);
+ return ret;
+ }
+ else if (consume(ID, "stringifier")) {
+ ret.stringifier = true;
+ all_ws();
+ if (consume(OTHER, ";")) return ret;
+ ret.idlType = return_type();
+ operation_rest(ret, store);
+ return ret;
+ }
+ ret.idlType = return_type();
+ all_ws();
+ if (consume(ID, "iterator")) {
+ all_ws();
+ ret.type = "iterator";
+ if (consume(ID, "object")) {
+ ret.iteratorObject = "object";
+ }
+ else if (consume(OTHER, "=")) {
+ all_ws();
+ var name = consume(ID) || error("No right hand side in iterator");
+ ret.iteratorObject = name.value;
+ }
+ all_ws();
+ consume(OTHER, ";") || error("Unterminated iterator");
+ return ret;
+ }
+ else {
+ operation_rest(ret, store);
+ return ret;
+ }
+ };
+
+ var identifiers = function (arr) {
+ while (true) {
+ all_ws();
+ if (consume(OTHER, ",")) {
+ all_ws();
+ var name = consume(ID) || error("Trailing comma in identifiers list");
+ arr.push(name.value);
+ }
+ else break;
+ }
+ };
+
+ var serialiser = function (store) {
+ all_ws(store, "pea");
+ if (!consume(ID, "serializer")) return;
+ var ret = { type: "serializer" };
+ all_ws();
+ if (consume(OTHER, "=")) {
+ all_ws();
+ if (consume(OTHER, "{")) {
+ ret.patternMap = true;
+ all_ws();
+ var id = consume(ID);
+ if (id && id.value === "getter") {
+ ret.names = ["getter"];
+ }
+ else if (id && id.value === "inherit") {
+ ret.names = ["inherit"];
+ identifiers(ret.names);
+ }
+ else if (id) {
+ ret.names = [id.value];
+ identifiers(ret.names);
+ }
+ else {
+ ret.names = [];
+ }
+ all_ws();
+ consume(OTHER, "}") || error("Unterminated serializer pattern map");
+ }
+ else if (consume(OTHER, "[")) {
+ ret.patternList = true;
+ all_ws();
+ var id = consume(ID);
+ if (id && id.value === "getter") {
+ ret.names = ["getter"];
+ }
+ else if (id) {
+ ret.names = [id.value];
+ identifiers(ret.names);
+ }
+ else {
+ ret.names = [];
+ }
+ all_ws();
+ consume(OTHER, "]") || error("Unterminated serializer pattern list");
+ }
+ else {
+ var name = consume(ID) || error("Invalid serializer");
+ ret.name = name.value;
+ }
+ all_ws();
+ consume(OTHER, ";") || error("Unterminated serializer");
+ return ret;
+ }
+ else if (consume(OTHER, ";")) {
+ // noop, just parsing
+ }
+ else {
+ ret.idlType = return_type();
+ all_ws();
+ ret.operation = operation_rest(null, store);
+ }
+ return ret;
+ };
+
+ var interface_ = function (isPartial, store) {
+ all_ws(isPartial ? null : store, "pea");
+ if (!consume(ID, "interface")) return;
+ all_ws();
+ var name = consume(ID) || error("No name for interface");
+ var mems = []
+ , ret = {
+ type: "interface"
+ , name: name.value
+ , partial: false
+ , members: mems
+ };
+ if (!isPartial) ret.inheritance = inheritance() || null;
+ all_ws();
+ consume(OTHER, "{") || error("Bodyless interface");
+ while (true) {
+ all_ws(store ? mems : null);
+ if (consume(OTHER, "}")) {
+ all_ws();
+ consume(OTHER, ";") || error("Missing semicolon after interface");
+ return ret;
+ }
+ var ea = extended_attrs(store ? mems : null);
+ all_ws();
+ var cnt = const_(store ? mems : null);
+ if (cnt) {
+ cnt.extAttrs = ea;
+ ret.members.push(cnt);
+ continue;
+ }
+ var mem = serialiser(store ? mems : null) ||
+ attribute(store ? mems : null) ||
+ operation(store ? mems : null) ||
+ error("Unknown member");
+ mem.extAttrs = ea;
+ ret.members.push(mem);
+ }
+ };
+
+ var partial = function (store) {
+ all_ws(store, "pea");
+ if (!consume(ID, "partial")) return;
+ var thing = dictionary(true, store) ||
+ interface_(true, store) ||
+ error("Partial doesn't apply to anything");
+ thing.partial = true;
+ return thing;
+ };
+
+ var dictionary = function (isPartial, store) {
+ all_ws(isPartial ? null : store, "pea");
+ if (!consume(ID, "dictionary")) return;
+ all_ws();
+ var name = consume(ID) || error("No name for dictionary");
+ var mems = []
+ , ret = {
+ type: "dictionary"
+ , name: name.value
+ , partial: false
+ , members: mems
+ };
+ if (!isPartial) ret.inheritance = inheritance() || null;
+ all_ws();
+ consume(OTHER, "{") || error("Bodyless dictionary");
+ while (true) {
+ all_ws(store ? mems : null);
+ if (consume(OTHER, "}")) {
+ all_ws();
+ consume(OTHER, ";") || error("Missing semicolon after dictionary");
+ return ret;
+ }
+ var ea = extended_attrs(store ? mems : null);
+ all_ws(store ? mems : null, "pea");
+ var typ = type() || error("No type for dictionary member");
+ all_ws();
+ var name = consume(ID) || error("No name for dictionary member");
+ ret.members.push({
+ type: "field"
+ , name: name.value
+ , idlType: typ
+ , extAttrs: ea
+ , "default": default_()
+ });
+ all_ws();
+ consume(OTHER, ";") || error("Unterminated dictionary member");
+ }
+ };
+
+ var exception = function (store) {
+ all_ws(store, "pea");
+ if (!consume(ID, "exception")) return;
+ all_ws();
+ var name = consume(ID) || error("No name for exception");
+ var mems = []
+ , ret = {
+ type: "exception"
+ , name: name.value
+ , members: mems
+ };
+ ret.inheritance = inheritance() || null;
+ all_ws();
+ consume(OTHER, "{") || error("Bodyless exception");
+ while (true) {
+ all_ws(store ? mems : null);
+ if (consume(OTHER, "}")) {
+ all_ws();
+ consume(OTHER, ";") || error("Missing semicolon after exception");
+ return ret;
+ }
+ var ea = extended_attrs(store ? mems : null);
+ all_ws(store ? mems : null, "pea");
+ var cnt = const_();
+ if (cnt) {
+ cnt.extAttrs = ea;
+ ret.members.push(cnt);
+ }
+ else {
+ var typ = type();
+ all_ws();
+ var name = consume(ID);
+ all_ws();
+ if (!typ || !name || !consume(OTHER, ";")) error("Unknown member in exception body");
+ ret.members.push({
+ type: "field"
+ , name: name.value
+ , idlType: typ
+ , extAttrs: ea
+ });
+ }
+ }
+ };
+
+ var enum_ = function (store) {
+ all_ws(store, "pea");
+ if (!consume(ID, "enum")) return;
+ all_ws();
+ var name = consume(ID) || error("No name for enum");
+ var vals = []
+ , ret = {
+ type: "enum"
+ , name: name.value
+ , values: vals
+ };
+ all_ws();
+ consume(OTHER, "{") || error("No curly for enum");
+ var saw_comma = false;
+ while (true) {
+ all_ws(store ? vals : null);
+ if (consume(OTHER, "}")) {
+ all_ws();
+ if (saw_comma) error("Trailing comma in enum");
+ consume(OTHER, ";") || error("No semicolon after enum");
+ return ret;
+ }
+ var val = consume(STR) || error("Unexpected value in enum");
+ ret.values.push(val.value.replace(/"/g, ""));
+ all_ws(store ? vals : null);
+ if (consume(OTHER, ",")) {
+ if (store) vals.push({ type: "," });
+ all_ws(store ? vals : null);
+ saw_comma = true;
+ }
+ else {
+ saw_comma = false;
+ }
+ }
+ };
+
+ var typedef = function (store) {
+ all_ws(store, "pea");
+ if (!consume(ID, "typedef")) return;
+ var ret = {
+ type: "typedef"
+ };
+ all_ws();
+ ret.typeExtAttrs = extended_attrs();
+ all_ws(store, "tpea");
+ ret.idlType = type() || error("No type in typedef");
+ all_ws();
+ var name = consume(ID) || error("No name in typedef");
+ ret.name = name.value;
+ all_ws();
+ consume(OTHER, ";") || error("Unterminated typedef");
+ return ret;
+ };
+
+ var implements_ = function (store) {
+ all_ws(store, "pea");
+ var target = consume(ID);
+ if (!target) return;
+ var w = all_ws();
+ if (consume(ID, "implements")) {
+ var ret = {
+ type: "implements"
+ , target: target.value
+ };
+ all_ws();
+ var imp = consume(ID) || error("Incomplete implements statement");
+ ret["implements"] = imp.value;
+ all_ws();
+ consume(OTHER, ";") || error("No terminating ; for implements statement");
+ return ret;
+ }
+ else {
+ // rollback
+ tokens.unshift(w);
+ tokens.unshift(target);
+ }
+ };
+
+ var definition = function (store) {
+ return callback(store) ||
+ interface_(false, store) ||
+ partial(store) ||
+ dictionary(false, store) ||
+ exception(store) ||
+ enum_(store) ||
+ typedef(store) ||
+ implements_(store)
+ ;
+ };
+
+ var definitions = function (store) {
+ if (!tokens.length) return [];
+ var defs = [];
+ while (true) {
+ var ea = extended_attrs(store ? defs : null)
+ , def = definition(store ? defs : null);
+ if (!def) {
+ if (ea.length) error("Stray extended attributes");
+ break;
+ }
+ def.extAttrs = ea;
+ defs.push(def);
+ }
+ return defs;
+ };
+ var res = definitions(opt.ws);
+ if (tokens.length) error("Unrecognised tokens");
+ return res;
+ };
+
+ var inNode = typeof module !== "undefined" && module.exports
+ , obj = {
+ parse: function (str, opt) {
+ if (!opt) opt = {};
+ var tokens = tokenise(str);
+ return parse(tokens, opt);
+ }
+ };
+
+ if (inNode) module.exports = obj;
+ else self.WebIDL2 = obj;
+}());
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsresourcesidlharnessjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/resources/idlharness.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/resources/idlharness.js         (rev 0)
+++ trunk/LayoutTests/http/tests/resources/idlharness.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,1706 @@
</span><ins>+/*
+Distributed under both the W3C Test Suite License [1] and the W3C
+3-clause BSD License [2]. To contribute to a W3C Test Suite, see the
+policies and contribution forms [3].
+
+[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
+[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license
+[3] http://www.w3.org/2004/10/27-testcases
+*/
+
+/* For user documentation see docs/idlharness.md */
+
+/**
+ * Notes for people who want to edit this file (not just use it as a library):
+ *
+ * Most of the interesting stuff happens in the derived classes of IdlObject,
+ * especially IdlInterface. The entry point for all IdlObjects is .test(),
+ * which is called by IdlArray.test(). An IdlObject is conceptually just
+ * "thing we want to run tests on", and an IdlArray is an array of IdlObjects
+ * with some additional data thrown in.
+ *
+ * The object model is based on what WebIDLParser.js produces, which is in turn
+ * based on its pegjs grammar. If you want to figure out what properties an
+ * object will have from WebIDLParser.js, the best way is to look at the
+ * grammar:
+ *
+ * https://github.com/darobin/webidl.js/blob/master/lib/grammar.peg
+ *
+ * So for instance:
+ *
+ * // interface definition
+ * interface
+ * = extAttrs:extendedAttributeList? S? "interface" S name:identifier w herit:ifInheritance? w "{" w mem:ifMember* w "}" w ";" w
+ * { return { type: "interface", name: name, inheritance: herit, members: mem, extAttrs: extAttrs }; }
+ *
+ * This means that an "interface" object will have a .type property equal to
+ * the string "interface", a .name property equal to the identifier that the
+ * parser found, an .inheritance property equal to either null or the result of
+ * the "ifInheritance" production found elsewhere in the grammar, and so on.
+ * After each grammatical production is a JavaScript function in curly braces
+ * that gets called with suitable arguments and returns some JavaScript value.
+ *
+ * (Note that the version of WebIDLParser.js we use might sometimes be
+ * out-of-date or forked.)
+ *
+ * The members and methods of the classes defined by this file are all at least
+ * briefly documented, hopefully.
+ */
+(function(){
+"use strict";
+/// Helpers ///
+function constValue (cnt) {
+ if (cnt.type === "null") return null;
+ if (cnt.type === "NaN") return NaN;
+ if (cnt.type === "Infinity") return cnt.negative ? -Infinity : Infinity;
+ return cnt.value;
+}
+
+function minOverloadLength(overloads) {
+ if (!overloads.length) {
+ return 0;
+ }
+
+ return overloads.map(function(attr) {
+ return attr.arguments ? attr.arguments.filter(function(arg) {
+ return !arg.optional && !arg.variadic;
+ }).length : 0;
+ })
+ .reduce(function(m, n) { return Math.min(m, n); });
+}
+
+/// IdlArray ///
+// Entry point
+self.IdlArray = function()
+//@{
+{
+ /**
+ * A map from strings to the corresponding named IdlObject, such as
+ * IdlInterface or IdlException. These are the things that test() will run
+ * tests on.
+ */
+ this.members = {};
+
+ /**
+ * A map from strings to arrays of strings. The keys are interface or
+ * exception names, and are expected to also exist as keys in this.members
+ * (otherwise they'll be ignored). This is populated by add_objects() --
+ * see documentation at the start of the file. The actual tests will be
+ * run by calling this.members[name].test_object(obj) for each obj in
+ * this.objects[name]. obj is a string that will be eval'd to produce a
+ * JavaScript value, which is supposed to be an object implementing the
+ * given IdlObject (interface, exception, etc.).
+ */
+ this.objects = {};
+
+ /**
+ * When adding multiple collections of IDLs one at a time, an earlier one
+ * might contain a partial interface or implements statement that depends
+ * on a later one. Save these up and handle them right before we run
+ * tests.
+ *
+ * .partials is simply an array of objects from WebIDLParser.js'
+ * "partialinterface" production. .implements maps strings to arrays of
+ * strings, such that
+ *
+ * A implements B;
+ * A implements C;
+ * D implements E;
+ *
+ * results in { A: ["B", "C"], D: ["E"] }.
+ */
+ this.partials = [];
+ this["implements"] = {};
+};
+
+//@}
+IdlArray.prototype.add_idls = function(raw_idls)
+//@{
+{
+ /** Entry point. See documentation at beginning of file. */
+ this.internal_add_idls(WebIDL2.parse(raw_idls));
+};
+
+//@}
+IdlArray.prototype.add_untested_idls = function(raw_idls)
+//@{
+{
+ /** Entry point. See documentation at beginning of file. */
+ var parsed_idls = WebIDL2.parse(raw_idls);
+ for (var i = 0; i < parsed_idls.length; i++)
+ {
+ parsed_idls[i].untested = true;
+ if ("members" in parsed_idls[i])
+ {
+ for (var j = 0; j < parsed_idls[i].members.length; j++)
+ {
+ parsed_idls[i].members[j].untested = true;
+ }
+ }
+ }
+ this.internal_add_idls(parsed_idls);
+};
+
+//@}
+IdlArray.prototype.internal_add_idls = function(parsed_idls)
+//@{
+{
+ /**
+ * Internal helper called by add_idls() and add_untested_idls().
+ * parsed_idls is an array of objects that come from WebIDLParser.js's
+ * "definitions" production. The add_untested_idls() entry point
+ * additionally sets an .untested property on each object (and its
+ * .members) so that they'll be skipped by test() -- they'll only be
+ * used for base interfaces of tested interfaces, return types, etc.
+ */
+ parsed_idls.forEach(function(parsed_idl)
+ {
+ if (parsed_idl.type == "interface" && parsed_idl.partial)
+ {
+ this.partials.push(parsed_idl);
+ return;
+ }
+
+ if (parsed_idl.type == "implements")
+ {
+ if (!(parsed_idl.target in this["implements"]))
+ {
+ this["implements"][parsed_idl.target] = [];
+ }
+ this["implements"][parsed_idl.target].push(parsed_idl["implements"]);
+ return;
+ }
+
+ parsed_idl.array = this;
+ if (parsed_idl.name in this.members)
+ {
+ throw "Duplicate identifier " + parsed_idl.name;
+ }
+ switch(parsed_idl.type)
+ {
+ case "interface":
+ this.members[parsed_idl.name] =
+ new IdlInterface(parsed_idl, /* is_callback = */ false);
+ break;
+
+ case "dictionary":
+ // Nothing to test, but we need the dictionary info around for type
+ // checks
+ this.members[parsed_idl.name] = new IdlDictionary(parsed_idl);
+ break;
+
+ case "typedef":
+ this.members[parsed_idl.name] = new IdlTypedef(parsed_idl);
+ break;
+
+ case "callback":
+ // TODO
+ console.log("callback not yet supported");
+ break;
+
+ case "enum":
+ this.members[parsed_idl.name] = new IdlEnum(parsed_idl);
+ break;
+
+ case "callback interface":
+ this.members[parsed_idl.name] =
+ new IdlInterface(parsed_idl, /* is_callback = */ true);
+ break;
+
+ default:
+ throw parsed_idl.name + ": " + parsed_idl.type + " not yet supported";
+ }
+ }.bind(this));
+};
+
+//@}
+IdlArray.prototype.add_objects = function(dict)
+//@{
+{
+ /** Entry point. See documentation at beginning of file. */
+ for (var k in dict)
+ {
+ if (k in this.objects)
+ {
+ this.objects[k] = this.objects[k].concat(dict[k]);
+ }
+ else
+ {
+ this.objects[k] = dict[k];
+ }
+ }
+};
+
+//@}
+IdlArray.prototype.prevent_multiple_testing = function(name)
+//@{
+{
+ /** Entry point. See documentation at beginning of file. */
+ this.members[name].prevent_multiple_testing = true;
+};
+
+//@}
+IdlArray.prototype.recursively_get_implements = function(interface_name)
+//@{
+{
+ /**
+ * Helper function for test(). Returns an array of things that implement
+ * interface_name, so if the IDL contains
+ *
+ * A implements B;
+ * B implements C;
+ * B implements D;
+ *
+ * then recursively_get_implements("A") should return ["B", "C", "D"].
+ */
+ var ret = this["implements"][interface_name];
+ if (ret === undefined)
+ {
+ return [];
+ }
+ for (var i = 0; i < this["implements"][interface_name].length; i++)
+ {
+ ret = ret.concat(this.recursively_get_implements(ret[i]));
+ if (ret.indexOf(ret[i]) != ret.lastIndexOf(ret[i]))
+ {
+ throw "Circular implements statements involving " + ret[i];
+ }
+ }
+ return ret;
+};
+
+//@}
+IdlArray.prototype.test = function()
+//@{
+{
+ /** Entry point. See documentation at beginning of file. */
+
+ // First merge in all the partial interfaces and implements statements we
+ // encountered.
+ this.partials.forEach(function(parsed_idl)
+ {
+ if (!(parsed_idl.name in this.members)
+ || !(this.members[parsed_idl.name] instanceof IdlInterface))
+ {
+ throw "Partial interface " + parsed_idl.name + " with no original interface";
+ }
+ if (parsed_idl.extAttrs)
+ {
+ parsed_idl.extAttrs.forEach(function(extAttr)
+ {
+ this.members[parsed_idl.name].extAttrs.push(extAttr);
+ }.bind(this));
+ }
+ parsed_idl.members.forEach(function(member)
+ {
+ this.members[parsed_idl.name].members.push(new IdlInterfaceMember(member));
+ }.bind(this));
+ }.bind(this));
+ this.partials = [];
+
+ for (var lhs in this["implements"])
+ {
+ this.recursively_get_implements(lhs).forEach(function(rhs)
+ {
+ var errStr = lhs + " implements " + rhs + ", but ";
+ if (!(lhs in this.members)) throw errStr + lhs + " is undefined.";
+ if (!(this.members[lhs] instanceof IdlInterface)) throw errStr + lhs + " is not an interface.";
+ if (!(rhs in this.members)) throw errStr + rhs + " is undefined.";
+ if (!(this.members[rhs] instanceof IdlInterface)) throw errStr + rhs + " is not an interface.";
+ this.members[rhs].members.forEach(function(member)
+ {
+ this.members[lhs].members.push(new IdlInterfaceMember(member));
+ }.bind(this));
+ }.bind(this));
+ }
+ this["implements"] = {};
+
+ // Now run test() on every member, and test_object() for every object.
+ for (var name in this.members)
+ {
+ this.members[name].test();
+ if (name in this.objects)
+ {
+ this.objects[name].forEach(function(str)
+ {
+ this.members[name].test_object(str);
+ }.bind(this));
+ }
+ }
+};
+
+//@}
+IdlArray.prototype.assert_type_is = function(value, type)
+//@{
+{
+ /**
+ * Helper function that tests that value is an instance of type according
+ * to the rules of WebIDL. value is any JavaScript value, and type is an
+ * object produced by WebIDLParser.js' "type" production. That production
+ * is fairly elaborate due to the complexity of WebIDL's types, so it's
+ * best to look at the grammar to figure out what properties it might have.
+ */
+ if (type.idlType == "any")
+ {
+ // No assertions to make
+ return;
+ }
+
+ if (type.nullable && value === null)
+ {
+ // This is fine
+ return;
+ }
+
+ if (type.array)
+ {
+ // TODO: not supported yet
+ return;
+ }
+
+ if (type.sequence)
+ {
+ assert_true(Array.isArray(value), "is not array");
+ if (!value.length)
+ {
+ // Nothing we can do.
+ return;
+ }
+ this.assert_type_is(value[0], type.idlType.idlType);
+ return;
+ }
+
+ type = type.idlType;
+
+ switch(type)
+ {
+ case "void":
+ assert_equals(value, undefined);
+ return;
+
+ case "boolean":
+ assert_equals(typeof value, "boolean");
+ return;
+
+ case "byte":
+ assert_equals(typeof value, "number");
+ assert_equals(value, Math.floor(value), "not an integer");
+ assert_true(-128 <= value && value <= 127, "byte " + value + " not in range [-128, 127]");
+ return;
+
+ case "octet":
+ assert_equals(typeof value, "number");
+ assert_equals(value, Math.floor(value), "not an integer");
+ assert_true(0 <= value && value <= 255, "octet " + value + " not in range [0, 255]");
+ return;
+
+ case "short":
+ assert_equals(typeof value, "number");
+ assert_equals(value, Math.floor(value), "not an integer");
+ assert_true(-32768 <= value && value <= 32767, "short " + value + " not in range [-32768, 32767]");
+ return;
+
+ case "unsigned short":
+ assert_equals(typeof value, "number");
+ assert_equals(value, Math.floor(value), "not an integer");
+ assert_true(0 <= value && value <= 65535, "unsigned short " + value + " not in range [0, 65535]");
+ return;
+
+ case "long":
+ assert_equals(typeof value, "number");
+ assert_equals(value, Math.floor(value), "not an integer");
+ assert_true(-2147483648 <= value && value <= 2147483647, "long " + value + " not in range [-2147483648, 2147483647]");
+ return;
+
+ case "unsigned long":
+ assert_equals(typeof value, "number");
+ assert_equals(value, Math.floor(value), "not an integer");
+ assert_true(0 <= value && value <= 4294967295, "unsigned long " + value + " not in range [0, 4294967295]");
+ return;
+
+ case "long long":
+ assert_equals(typeof value, "number");
+ return;
+
+ case "unsigned long long":
+ case "DOMTimeStamp":
+ assert_equals(typeof value, "number");
+ assert_true(0 <= value, "unsigned long long is negative");
+ return;
+
+ case "float":
+ case "double":
+ case "DOMHighResTimeStamp":
+ case "unrestricted float":
+ case "unrestricted double":
+ // TODO: distinguish these cases
+ assert_equals(typeof value, "number");
+ return;
+
+ case "DOMString":
+ case "ByteString":
+ case "USVString":
+ // TODO: https://github.com/w3c/testharness.js/issues/92
+ assert_equals(typeof value, "string");
+ return;
+
+ case "object":
+ assert_true(typeof value == "object" || typeof value == "function", "wrong type: not object or function");
+ return;
+ }
+
+ if (!(type in this.members))
+ {
+ throw "Unrecognized type " + type;
+ }
+
+ if (this.members[type] instanceof IdlInterface)
+ {
+ // We don't want to run the full
+ // IdlInterface.prototype.test_instance_of, because that could result
+ // in an infinite loop. TODO: This means we don't have tests for
+ // NoInterfaceObject interfaces, and we also can't test objects that
+ // come from another self.
+ assert_true(typeof value == "object" || typeof value == "function", "wrong type: not object or function");
+ if (value instanceof Object
+ && !this.members[type].has_extended_attribute("NoInterfaceObject")
+ && type in self)
+ {
+ assert_true(value instanceof self[type], "not instanceof " + type);
+ }
+ }
+ else if (this.members[type] instanceof IdlEnum)
+ {
+ assert_equals(typeof value, "string");
+ }
+ else if (this.members[type] instanceof IdlDictionary)
+ {
+ // TODO: Test when we actually have something to test this on
+ }
+ else if (this.members[type] instanceof IdlTypedef)
+ {
+ // TODO: Test when we actually have something to test this on
+ }
+ else
+ {
+ throw "Type " + type + " isn't an interface or dictionary";
+ }
+};
+//@}
+
+/// IdlObject ///
+function IdlObject() {}
+IdlObject.prototype.test = function()
+//@{
+{
+ /**
+ * By default, this does nothing, so no actual tests are run for IdlObjects
+ * that don't define any (e.g., IdlDictionary at the time of this writing).
+ */
+};
+
+//@}
+IdlObject.prototype.has_extended_attribute = function(name)
+//@{
+{
+ /**
+ * This is only meaningful for things that support extended attributes,
+ * such as interfaces, exceptions, and members.
+ */
+ return this.extAttrs.some(function(o)
+ {
+ return o.name == name;
+ });
+};
+
+//@}
+
+/// IdlDictionary ///
+// Used for IdlArray.prototype.assert_type_is
+function IdlDictionary(obj)
+//@{
+{
+ /**
+ * obj is an object produced by the WebIDLParser.js "dictionary"
+ * production.
+ */
+
+ /** Self-explanatory. */
+ this.name = obj.name;
+
+ /** An array of objects produced by the "dictionaryMember" production. */
+ this.members = obj.members;
+
+ /**
+ * The name (as a string) of the dictionary type we inherit from, or null
+ * if there is none.
+ */
+ this.base = obj.inheritance;
+}
+
+//@}
+IdlDictionary.prototype = Object.create(IdlObject.prototype);
+
+/// IdlInterface ///
+function IdlInterface(obj, is_callback) {
+ /**
+ * obj is an object produced by the WebIDLParser.js "exception" or
+ * "interface" production, as appropriate.
+ */
+
+ /** Self-explanatory. */
+ this.name = obj.name;
+
+ /** A back-reference to our IdlArray. */
+ this.array = obj.array;
+
+ /**
+ * An indicator of whether we should run tests on the (exception) interface
+ * object and (exception) interface prototype object. Tests on members are
+ * controlled by .untested on each member, not this.
+ */
+ this.untested = obj.untested;
+
+ /** An array of objects produced by the "ExtAttr" production. */
+ this.extAttrs = obj.extAttrs;
+
+ /** An array of IdlInterfaceMembers. */
+ this.members = obj.members.map(function(m){return new IdlInterfaceMember(m); });
+ if (this.has_extended_attribute("Unforgeable")) {
+ this.members
+ .filter(function(m) { return !m["static"] && (m.type == "attribute" || m.type == "operation"); })
+ .forEach(function(m) { return m.isUnforgeable = true; });
+ }
+
+ /**
+ * The name (as a string) of the type we inherit from, or null if there is
+ * none.
+ */
+ this.base = obj.inheritance;
+
+ this._is_callback = is_callback;
+}
+IdlInterface.prototype = Object.create(IdlObject.prototype);
+IdlInterface.prototype.is_callback = function()
+//@{
+{
+ return this._is_callback;
+};
+//@}
+
+IdlInterface.prototype.has_constants = function()
+//@{
+{
+ return this.members.some(function(member) {
+ return member.type === "const";
+ });
+};
+//@}
+
+IdlInterface.prototype.is_global = function()
+//@{
+{
+ return this.extAttrs.some(function(attribute) {
+ return attribute.name === "Global" ||
+ attribute.name === "PrimaryGlobal";
+ });
+};
+//@}
+
+IdlInterface.prototype.test = function()
+//@{
+{
+ if (this.has_extended_attribute("NoInterfaceObject"))
+ {
+ // No tests to do without an instance. TODO: We should still be able
+ // to run tests on the prototype object, if we obtain one through some
+ // other means.
+ return;
+ }
+
+ if (!this.untested)
+ {
+ // First test things to do with the exception/interface object and
+ // exception/interface prototype object.
+ this.test_self();
+ }
+ // Then test things to do with its members (constants, fields, attributes,
+ // operations, . . .). These are run even if .untested is true, because
+ // members might themselves be marked as .untested. This might happen to
+ // interfaces if the interface itself is untested but a partial interface
+ // that extends it is tested -- then the interface itself and its initial
+ // members will be marked as untested, but the members added by the partial
+ // interface are still tested.
+ this.test_members();
+};
+//@}
+
+IdlInterface.prototype.test_self = function()
+//@{
+{
+ test(function()
+ {
+ // This function tests WebIDL as of 2015-01-13.
+ // TODO: Consider [Exposed].
+
+ // "For every interface that is exposed in a given ECMAScript global
+ // environment and:
+ // * is a callback interface that has constants declared on it, or
+ // * is a non-callback interface that is not declared with the
+ // [NoInterfaceObject] extended attribute,
+ // a corresponding property MUST exist on the ECMAScript global object.
+ // The name of the property is the identifier of the interface, and its
+ // value is an object called the interface object.
+ // The property has the attributes { [[Writable]]: true,
+ // [[Enumerable]]: false, [[Configurable]]: true }."
+ if (this.is_callback() && !this.has_constants()) {
+ return;
+ }
+
+ // TODO: Should we test here that the property is actually writable
+ // etc., or trust getOwnPropertyDescriptor?
+ assert_own_property(self, this.name,
+ "self does not have own property " + format_value(this.name));
+ var desc = Object.getOwnPropertyDescriptor(self, this.name);
+ assert_false("get" in desc, "self's property " + format_value(this.name) + " has getter");
+ assert_false("set" in desc, "self's property " + format_value(this.name) + " has setter");
+ assert_true(desc.writable, "self's property " + format_value(this.name) + " is not writable");
+ assert_false(desc.enumerable, "self's property " + format_value(this.name) + " is enumerable");
+ assert_true(desc.configurable, "self's property " + format_value(this.name) + " is not configurable");
+
+ if (this.is_callback()) {
+ // "The internal [[Prototype]] property of an interface object for
+ // a callback interface MUST be the Object.prototype object."
+ assert_equals(Object.getPrototypeOf(self[this.name]), Object.prototype,
+ "prototype of self's property " + format_value(this.name) + " is not Object.prototype");
+
+ return;
+ }
+
+ // "The interface object for a given non-callback interface is a
+ // function object."
+ // "If an object is defined to be a function object, then it has
+ // characteristics as follows:"
+
+ // Its [[Prototype]] internal property is otherwise specified (see
+ // below).
+
+ // "* Its [[Get]] internal property is set as described in ECMA-262
+ // section 9.1.8."
+ // Not much to test for this.
+
+ // "* Its [[Construct]] internal property is set as described in
+ // ECMA-262 section 19.2.2.3."
+ // Tested below if no constructor is defined. TODO: test constructors
+ // if defined.
+
+ // "* Its @@hasInstance property is set as described in ECMA-262
+ // section 19.2.3.8, unless otherwise specified."
+ // TODO
+
+ // ES6 (rev 30) 19.1.3.6:
+ // "Else, if O has a [[Call]] internal method, then let builtinTag be
+ // "Function"."
+ assert_class_string(self[this.name], "Function", "class string of " + this.name);
+
+ // "The [[Prototype]] internal property of an interface object for a
+ // non-callback interface is determined as follows:"
+ var prototype = Object.getPrototypeOf(self[this.name]);
+ if (this.base) {
+ // "* If the interface inherits from some other interface, the
+ // value of [[Prototype]] is the interface object for that other
+ // interface."
+ var has_interface_object =
+ !this.array
+ .members[this.base]
+ .has_extended_attribute("NoInterfaceObject");
+ if (has_interface_object) {
+ assert_own_property(self, this.base,
+ 'should inherit from ' + this.base +
+ ', but self has no such property');
+ assert_equals(prototype, self[this.base],
+ 'prototype of ' + this.name + ' is not ' +
+ this.base);
+ }
+ } else {
+ // "If the interface doesn't inherit from any other interface, the
+ // value of [[Prototype]] is %FunctionPrototype% ([ECMA-262],
+ // section 6.1.7.4)."
+ assert_equals(prototype, Function.prototype,
+ "prototype of self's property " + format_value(this.name) + " is not Function.prototype");
+ }
+
+ if (!this.has_extended_attribute("Constructor")) {
+ // "The internal [[Call]] method of the interface object behaves as
+ // follows . . .
+ //
+ // "If I was not declared with a [Constructor] extended attribute,
+ // then throw a TypeError."
+ assert_throws(new TypeError(), function() {
+ self[this.name]();
+ }.bind(this), "interface object didn't throw TypeError when called as a function");
+ assert_throws(new TypeError(), function() {
+ new self[this.name]();
+ }.bind(this), "interface object didn't throw TypeError when called as a constructor");
+ }
+ }.bind(this), this.name + " interface: existence and properties of interface object");
+
+ if (!this.is_callback()) {
+ test(function() {
+ // This function tests WebIDL as of 2014-10-25.
+ // https://heycam.github.io/webidl/#es-interface-call
+
+ assert_own_property(self, this.name,
+ "self does not have own property " + format_value(this.name));
+
+ // "Interface objects for non-callback interfaces MUST have a
+ // property named “length” with attributes { [[Writable]]: false,
+ // [[Enumerable]]: false, [[Configurable]]: true } whose value is
+ // a Number."
+ assert_own_property(self[this.name], "length");
+ var desc = Object.getOwnPropertyDescriptor(self[this.name], "length");
+ assert_false("get" in desc, this.name + ".length has getter");
+ assert_false("set" in desc, this.name + ".length has setter");
+ assert_false(desc.writable, this.name + ".length is writable");
+ assert_false(desc.enumerable, this.name + ".length is enumerable");
+ assert_true(desc.configurable, this.name + ".length is not configurable");
+
+ var constructors = this.extAttrs
+ .filter(function(attr) { return attr.name == "Constructor"; });
+ var expected_length = minOverloadLength(constructors);
+ assert_equals(self[this.name].length, expected_length, "wrong value for " + this.name + ".length");
+ }.bind(this), this.name + " interface object length");
+ }
+
+ // TODO: Test named constructors if I find any interfaces that have them.
+
+ test(function()
+ {
+ // This function tests WebIDL as of 2015-01-21.
+ // https://heycam.github.io/webidl/#interface-object
+
+ if (this.is_callback() && !this.has_constants()) {
+ return;
+ }
+
+ assert_own_property(self, this.name,
+ "self does not have own property " + format_value(this.name));
+
+ if (this.is_callback()) {
+ assert_false("prototype" in self[this.name],
+ this.name + ' should not have a "prototype" property');
+ return;
+ }
+
+ // "An interface object for a non-callback interface must have a
+ // property named “prototype” with attributes { [[Writable]]: false,
+ // [[Enumerable]]: false, [[Configurable]]: false } whose value is an
+ // object called the interface prototype object. This object has
+ // properties that correspond to the regular attributes and regular
+ // operations defined on the interface, and is described in more detail
+ // in section 4.5.4 below."
+ assert_own_property(self[this.name], "prototype",
+ 'interface "' + this.name + '" does not have own property "prototype"');
+ var desc = Object.getOwnPropertyDescriptor(self[this.name], "prototype");
+ assert_false("get" in desc, this.name + ".prototype has getter");
+ assert_false("set" in desc, this.name + ".prototype has setter");
+ assert_false(desc.writable, this.name + ".prototype is writable");
+ assert_false(desc.enumerable, this.name + ".prototype is enumerable");
+ assert_false(desc.configurable, this.name + ".prototype is configurable");
+
+ // Next, test that the [[Prototype]] of the interface prototype object
+ // is correct. (This is made somewhat difficult by the existence of
+ // [NoInterfaceObject].)
+ // TODO: Aryeh thinks there's at least other place in this file where
+ // we try to figure out if an interface prototype object is
+ // correct. Consolidate that code.
+
+ // "The interface prototype object for a given interface A must have an
+ // internal [[Prototype]] property whose value is returned from the
+ // following steps:
+ // "If A is declared with the [Global] or [PrimaryGlobal] extended
+ // attribute, and A supports named properties, then return the named
+ // properties object for A, as defined in section 4.5.5 below.
+ // "Otherwise, if A is declared to inherit from another interface, then
+ // return the interface prototype object for the inherited interface.
+ // "Otherwise, if A is declared with the [ArrayClass] extended
+ // attribute, then return %ArrayPrototype% ([ECMA-262], section
+ // 6.1.7.4).
+ // "Otherwise, return %ObjectPrototype% ([ECMA-262], section 6.1.7.4).
+ // ([ECMA-262], section 15.2.4).
+ if (this.name === "Window") {
+ assert_class_string(Object.getPrototypeOf(self[this.name].prototype),
+ 'WindowProperties',
+ 'Class name for prototype of Window' +
+ '.prototype is not "WindowProperties"');
+ } else {
+ var inherit_interface, inherit_interface_has_interface_object;
+ if (this.base) {
+ inherit_interface = this.base;
+ inherit_interface_has_interface_object =
+ !this.array
+ .members[inherit_interface]
+ .has_extended_attribute("NoInterfaceObject");
+ } else if (this.has_extended_attribute('ArrayClass')) {
+ inherit_interface = 'Array';
+ inherit_interface_has_interface_object = true;
+ } else {
+ inherit_interface = 'Object';
+ inherit_interface_has_interface_object = true;
+ }
+ if (inherit_interface_has_interface_object) {
+ assert_own_property(self, inherit_interface,
+ 'should inherit from ' + inherit_interface + ', but self has no such property');
+ assert_own_property(self[inherit_interface], 'prototype',
+ 'should inherit from ' + inherit_interface + ', but that object has no "prototype" property');
+ assert_equals(Object.getPrototypeOf(self[this.name].prototype),
+ self[inherit_interface].prototype,
+ 'prototype of ' + this.name + '.prototype is not ' + inherit_interface + '.prototype');
+ } else {
+ // We can't test that we get the correct object, because this is the
+ // only way to get our hands on it. We only test that its class
+ // string, at least, is correct.
+ assert_class_string(Object.getPrototypeOf(self[this.name].prototype),
+ inherit_interface + 'Prototype',
+ 'Class name for prototype of ' + this.name +
+ '.prototype is not "' + inherit_interface + 'Prototype"');
+ }
+ }
+
+ // "The class string of an interface prototype object is the
+ // concatenation of the interface’s identifier and the string
+ // “Prototype”."
+ assert_class_string(self[this.name].prototype, this.name + "Prototype",
+ "class string of " + this.name + ".prototype");
+ // String() should end up calling {}.toString if nothing defines a
+ // stringifier.
+ if (!this.has_stringifier()) {
+ assert_equals(String(self[this.name].prototype), "[object " + this.name + "Prototype]",
+ "String(" + this.name + ".prototype)");
+ }
+ }.bind(this), this.name + " interface: existence and properties of interface prototype object");
+
+ test(function()
+ {
+ if (this.is_callback() && !this.has_constants()) {
+ return;
+ }
+
+ assert_own_property(self, this.name,
+ "self does not have own property " + format_value(this.name));
+
+ if (this.is_callback()) {
+ assert_false("prototype" in self[this.name],
+ this.name + ' should not have a "prototype" property');
+ return;
+ }
+
+ assert_own_property(self[this.name], "prototype",
+ 'interface "' + this.name + '" does not have own property "prototype"');
+
+ // "If the [NoInterfaceObject] extended attribute was not specified on
+ // the interface, then the interface prototype object must also have a
+ // property named “constructor” with attributes { [[Writable]]: true,
+ // [[Enumerable]]: false, [[Configurable]]: true } whose value is a
+ // reference to the interface object for the interface."
+ assert_own_property(self[this.name].prototype, "constructor",
+ this.name + '.prototype does not have own property "constructor"');
+ var desc = Object.getOwnPropertyDescriptor(self[this.name].prototype, "constructor");
+ assert_false("get" in desc, this.name + ".prototype.constructor has getter");
+ assert_false("set" in desc, this.name + ".prototype.constructor has setter");
+ assert_true(desc.writable, this.name + ".prototype.constructor is not writable");
+ assert_false(desc.enumerable, this.name + ".prototype.constructor is enumerable");
+ assert_true(desc.configurable, this.name + ".prototype.constructor in not configurable");
+ assert_equals(self[this.name].prototype.constructor, self[this.name],
+ this.name + '.prototype.constructor is not the same object as ' + this.name);
+ }.bind(this), this.name + ' interface: existence and properties of interface prototype object\'s "constructor" property');
+};
+
+//@}
+IdlInterface.prototype.test_member_const = function(member)
+//@{
+{
+ test(function()
+ {
+ if (this.is_callback() && !this.has_constants()) {
+ return;
+ }
+
+ assert_own_property(self, this.name,
+ "self does not have own property " + format_value(this.name));
+
+ // "For each constant defined on an interface A, there must be
+ // a corresponding property on the interface object, if it
+ // exists."
+ assert_own_property(self[this.name], member.name);
+ // "The value of the property is that which is obtained by
+ // converting the constant’s IDL value to an ECMAScript
+ // value."
+ assert_equals(self[this.name][member.name], constValue(member.value),
+ "property has wrong value");
+ // "The property has attributes { [[Writable]]: false,
+ // [[Enumerable]]: true, [[Configurable]]: false }."
+ var desc = Object.getOwnPropertyDescriptor(self[this.name], member.name);
+ assert_false("get" in desc, "property has getter");
+ assert_false("set" in desc, "property has setter");
+ assert_false(desc.writable, "property is writable");
+ assert_true(desc.enumerable, "property is not enumerable");
+ assert_false(desc.configurable, "property is configurable");
+ }.bind(this), this.name + " interface: constant " + member.name + " on interface object");
+ // "In addition, a property with the same characteristics must
+ // exist on the interface prototype object."
+ test(function()
+ {
+ if (this.is_callback() && !this.has_constants()) {
+ return;
+ }
+
+ assert_own_property(self, this.name,
+ "self does not have own property " + format_value(this.name));
+
+ if (this.is_callback()) {
+ assert_false("prototype" in self[this.name],
+ this.name + ' should not have a "prototype" property');
+ return;
+ }
+
+ assert_own_property(self[this.name], "prototype",
+ 'interface "' + this.name + '" does not have own property "prototype"');
+
+ assert_own_property(self[this.name].prototype, member.name);
+ assert_equals(self[this.name].prototype[member.name], constValue(member.value),
+ "property has wrong value");
+ var desc = Object.getOwnPropertyDescriptor(self[this.name], member.name);
+ assert_false("get" in desc, "property has getter");
+ assert_false("set" in desc, "property has setter");
+ assert_false(desc.writable, "property is writable");
+ assert_true(desc.enumerable, "property is not enumerable");
+ assert_false(desc.configurable, "property is configurable");
+ }.bind(this), this.name + " interface: constant " + member.name + " on interface prototype object");
+};
+
+
+//@}
+IdlInterface.prototype.test_member_attribute = function(member)
+//@{
+{
+ test(function()
+ {
+ if (this.is_callback() && !this.has_constants()) {
+ return;
+ }
+
+ assert_own_property(self, this.name,
+ "self does not have own property " + format_value(this.name));
+ assert_own_property(self[this.name], "prototype",
+ 'interface "' + this.name + '" does not have own property "prototype"');
+
+ if (member["static"]) {
+ assert_own_property(self[this.name], member.name,
+ "The interface object must have a property " +
+ format_value(member.name));
+ } else if (this.is_global()) {
+ assert_own_property(self, member.name,
+ "The global object must have a property " +
+ format_value(member.name));
+ assert_false(member.name in self[this.name].prototype,
+ "The prototype object must not have a property " +
+ format_value(member.name));
+
+ // Try/catch around the get here, since it can legitimately throw.
+ // If it does, we obviously can't check for equality with direct
+ // invocation of the getter.
+ var gotValue;
+ var propVal;
+ try {
+ propVal = self[member.name];
+ gotValue = true;
+ } catch (e) {
+ gotValue = false;
+ }
+ if (gotValue) {
+ var getter = Object.getOwnPropertyDescriptor(self, member.name).get;
+ assert_equals(typeof(getter), "function",
+ format_value(member.name) + " must have a getter");
+ assert_equals(propVal, getter.call(undefined),
+ "Gets on a global should not require an explicit this");
+ }
+ this.do_interface_attribute_asserts(self, member);
+ } else {
+ assert_true(member.name in self[this.name].prototype,
+ "The prototype object must have a property " +
+ format_value(member.name));
+
+ if (!member.has_extended_attribute("LenientThis")) {
+ assert_throws(new TypeError(), function() {
+ self[this.name].prototype[member.name];
+ }.bind(this), "getting property on prototype object must throw TypeError");
+ } else {
+ assert_equals(self[this.name].prototype[member.name], undefined,
+ "getting property on prototype object must return undefined");
+ }
+ this.do_interface_attribute_asserts(self[this.name].prototype, member);
+ }
+ }.bind(this), this.name + " interface: attribute " + member.name);
+};
+
+//@}
+IdlInterface.prototype.test_member_operation = function(member)
+//@{
+{
+ test(function()
+ {
+ if (this.is_callback() && !this.has_constants()) {
+ return;
+ }
+
+ assert_own_property(self, this.name,
+ "self does not have own property " + format_value(this.name));
+
+ if (this.is_callback()) {
+ assert_false("prototype" in self[this.name],
+ this.name + ' should not have a "prototype" property');
+ return;
+ }
+
+ assert_own_property(self[this.name], "prototype",
+ 'interface "' + this.name + '" does not have own property "prototype"');
+
+ // "For each unique identifier of an operation defined on the
+ // interface, there must be a corresponding property on the
+ // interface prototype object (if it is a regular operation) or
+ // the interface object (if it is a static operation), unless
+ // the effective overload set for that identifier and operation
+ // and with an argument count of 0 (for the ECMAScript language
+ // binding) has no entries."
+ //
+ var memberHolderObject;
+ if (member["static"]) {
+ assert_own_property(self[this.name], member.name,
+ "interface object missing static operation");
+ memberHolderObject = self[this.name];
+ } else if (this.is_global()) {
+ assert_own_property(self, member.name,
+ "global object missing non-static operation");
+ memberHolderObject = self;
+ } else {
+ assert_own_property(self[this.name].prototype, member.name,
+ "interface prototype object missing non-static operation");
+ memberHolderObject = self[this.name].prototype;
+ }
+
+ this.do_member_operation_asserts(memberHolderObject, member);
+ }.bind(this), this.name + " interface: operation " + member.name +
+ "(" + member.arguments.map(function(m) { return m.idlType.idlType; }) +
+ ")");
+};
+
+//@}
+IdlInterface.prototype.do_member_operation_asserts = function(memberHolderObject, member)
+//@{
+{
+ var operationUnforgeable = member.isUnforgeable;
+ var desc = Object.getOwnPropertyDescriptor(memberHolderObject, member.name);
+ // "The property has attributes { [[Writable]]: B,
+ // [[Enumerable]]: true, [[Configurable]]: B }, where B is false if the
+ // operation is unforgeable on the interface, and true otherwise".
+ assert_false("get" in desc, "property has getter");
+ assert_false("set" in desc, "property has setter");
+ assert_equals(desc.writable, !operationUnforgeable,
+ "property should be writable if and only if not unforgeable");
+ assert_true(desc.enumerable, "property is not enumerable");
+ assert_equals(desc.configurable, !operationUnforgeable,
+ "property should be configurable if and only if not unforgeable");
+ // "The value of the property is a Function object whose
+ // behavior is as follows . . ."
+ assert_equals(typeof memberHolderObject[member.name], "function",
+ "property must be a function");
+ // "The value of the Function object’s “length” property is
+ // a Number determined as follows:
+ // ". . .
+ // "Return the length of the shortest argument list of the
+ // entries in S."
+ assert_equals(memberHolderObject[member.name].length,
+ minOverloadLength(this.members.filter(function(m) {
+ return m.type == "operation" && m.name == member.name;
+ })),
+ "property has wrong .length");
+
+ // Make some suitable arguments
+ var args = member.arguments.map(function(arg) {
+ return create_suitable_object(arg.idlType);
+ });
+
+ // "Let O be a value determined as follows:
+ // ". . .
+ // "Otherwise, throw a TypeError."
+ // This should be hit if the operation is not static, there is
+ // no [ImplicitThis] attribute, and the this value is null.
+ //
+ // TODO: We currently ignore the [ImplicitThis] case. Except we manually
+ // check for globals, since otherwise we'll invoke window.close(). And we
+ // have to skip this test for anything that on the proto chain of "self",
+ // since that does in fact have implicit-this behavior.
+ if (!member["static"]) {
+ if (!this.is_global() &&
+ memberHolderObject[member.name] != self[member.name])
+ {
+ assert_throws(new TypeError(), function() {
+ memberHolderObject[member.name].apply(null, args);
+ }, "calling operation with this = null didn't throw TypeError");
+ }
+
+ // ". . . If O is not null and is also not a platform object
+ // that implements interface I, throw a TypeError."
+ //
+ // TODO: Test a platform object that implements some other
+ // interface. (Have to be sure to get inheritance right.)
+ assert_throws(new TypeError(), function() {
+ memberHolderObject[member.name].apply({}, args);
+ }, "calling operation with this = {} didn't throw TypeError");
+ }
+}
+
+//@}
+IdlInterface.prototype.test_member_stringifier = function(member)
+//@{
+{
+ test(function()
+ {
+ if (this.is_callback() && !this.has_constants()) {
+ return;
+ }
+
+ assert_own_property(self, this.name,
+ "self does not have own property " + format_value(this.name));
+
+ if (this.is_callback()) {
+ assert_false("prototype" in self[this.name],
+ this.name + ' should not have a "prototype" property');
+ return;
+ }
+
+ assert_own_property(self[this.name], "prototype",
+ 'interface "' + this.name + '" does not have own property "prototype"');
+
+ // ". . . the property exists on the interface prototype object."
+ var interfacePrototypeObject = self[this.name].prototype;
+ assert_own_property(self[this.name].prototype, "toString",
+ "interface prototype object missing non-static operation");
+
+ var stringifierUnforgeable = member.isUnforgeable;
+ var desc = Object.getOwnPropertyDescriptor(interfacePrototypeObject, "toString");
+ // "The property has attributes { [[Writable]]: B,
+ // [[Enumerable]]: true, [[Configurable]]: B }, where B is false if the
+ // stringifier is unforgeable on the interface, and true otherwise."
+ assert_false("get" in desc, "property has getter");
+ assert_false("set" in desc, "property has setter");
+ assert_equals(desc.writable, !stringifierUnforgeable,
+ "property should be writable if and only if not unforgeable");
+ assert_true(desc.enumerable, "property is not enumerable");
+ assert_equals(desc.configurable, !stringifierUnforgeable,
+ "property should be configurable if and only if not unforgeable");
+ // "The value of the property is a Function object, which behaves as
+ // follows . . ."
+ assert_equals(typeof interfacePrototypeObject.toString, "function",
+ "property must be a function");
+ // "The value of the Function object’s “length” property is the Number
+ // value 0."
+ assert_equals(interfacePrototypeObject.toString.length, 0,
+ "property has wrong .length");
+
+ // "Let O be the result of calling ToObject on the this value."
+ assert_throws(new TypeError(), function() {
+ self[this.name].prototype.toString.apply(null, []);
+ }, "calling stringifier with this = null didn't throw TypeError");
+
+ // "If O is not an object that implements the interface on which the
+ // stringifier was declared, then throw a TypeError."
+ //
+ // TODO: Test a platform object that implements some other
+ // interface. (Have to be sure to get inheritance right.)
+ assert_throws(new TypeError(), function() {
+ self[this.name].prototype.toString.apply({}, []);
+ }, "calling stringifier with this = {} didn't throw TypeError");
+ }.bind(this), this.name + " interface: stringifier");
+};
+
+//@}
+IdlInterface.prototype.test_members = function()
+//@{
+{
+ for (var i = 0; i < this.members.length; i++)
+ {
+ var member = this.members[i];
+ if (member.untested) {
+ continue;
+ }
+
+ switch (member.type) {
+ case "const":
+ this.test_member_const(member);
+ break;
+
+ case "attribute":
+ // For unforgeable attributes, we do the checks in
+ // test_interface_of instead.
+ if (!member.isUnforgeable)
+ {
+ this.test_member_attribute(member);
+ }
+ break;
+
+ case "operation":
+ // TODO: Need to correctly handle multiple operations with the same
+ // identifier.
+ // For unforgeable operations, we do the checks in
+ // test_interface_of instead.
+ if (member.name) {
+ if (!member.isUnforgeable)
+ {
+ this.test_member_operation(member);
+ }
+ } else if (member.stringifier) {
+ this.test_member_stringifier(member);
+ }
+ break;
+
+ default:
+ // TODO: check more member types.
+ break;
+ }
+ }
+};
+
+//@}
+IdlInterface.prototype.test_object = function(desc)
+//@{
+{
+ var obj, exception = null;
+ try
+ {
+ obj = eval(desc);
+ }
+ catch(e)
+ {
+ exception = e;
+ }
+
+ // TODO: WebIDLParser doesn't currently support named legacycallers, so I'm
+ // not sure what those would look like in the AST
+ var expected_typeof = this.members.some(function(member)
+ {
+ return member.legacycaller
+ || ("idlType" in member && member.idlType.legacycaller)
+ || ("idlType" in member && typeof member.idlType == "object"
+ && "idlType" in member.idlType && member.idlType.idlType == "legacycaller");
+ }) ? "function" : "object";
+
+ this.test_primary_interface_of(desc, obj, exception, expected_typeof);
+ var current_interface = this;
+ while (current_interface)
+ {
+ if (!(current_interface.name in this.array.members))
+ {
+ throw "Interface " + current_interface.name + " not found (inherited by " + this.name + ")";
+ }
+ if (current_interface.prevent_multiple_testing && current_interface.already_tested)
+ {
+ return;
+ }
+ current_interface.test_interface_of(desc, obj, exception, expected_typeof);
+ current_interface = this.array.members[current_interface.base];
+ }
+};
+
+//@}
+IdlInterface.prototype.test_primary_interface_of = function(desc, obj, exception, expected_typeof)
+//@{
+{
+ // We can't easily test that its prototype is correct if there's no
+ // interface object, or the object is from a different global environment
+ // (not instanceof Object). TODO: test in this case that its prototype at
+ // least looks correct, even if we can't test that it's actually correct.
+ if (!this.has_extended_attribute("NoInterfaceObject")
+ && (typeof obj != expected_typeof || obj instanceof Object))
+ {
+ test(function()
+ {
+ assert_equals(exception, null, "Unexpected exception when evaluating object");
+ assert_equals(typeof obj, expected_typeof, "wrong typeof object");
+ assert_own_property(self, this.name,
+ "self does not have own property " + format_value(this.name));
+ assert_own_property(self[this.name], "prototype",
+ 'interface "' + this.name + '" does not have own property "prototype"');
+
+ // "The value of the internal [[Prototype]] property of the
+ // platform object is the interface prototype object of the primary
+ // interface from the platform object’s associated global
+ // environment."
+ assert_equals(Object.getPrototypeOf(obj),
+ self[this.name].prototype,
+ desc + "'s prototype is not " + this.name + ".prototype");
+ }.bind(this), this.name + " must be primary interface of " + desc);
+ }
+
+ // "The class string of a platform object that implements one or more
+ // interfaces must be the identifier of the primary interface of the
+ // platform object."
+ test(function()
+ {
+ assert_equals(exception, null, "Unexpected exception when evaluating object");
+ assert_equals(typeof obj, expected_typeof, "wrong typeof object");
+ assert_class_string(obj, this.name, "class string of " + desc);
+ if (!this.has_stringifier())
+ {
+ assert_equals(String(obj), "[object " + this.name + "]", "String(" + desc + ")");
+ }
+ }.bind(this), "Stringification of " + desc);
+};
+
+//@}
+IdlInterface.prototype.test_interface_of = function(desc, obj, exception, expected_typeof)
+//@{
+{
+ // TODO: Indexed and named properties, more checks on interface members
+ this.already_tested = true;
+
+ for (var i = 0; i < this.members.length; i++)
+ {
+ var member = this.members[i];
+ if (member.type == "attribute" && member.isUnforgeable)
+ {
+ test(function()
+ {
+ assert_equals(exception, null, "Unexpected exception when evaluating object");
+ assert_equals(typeof obj, expected_typeof, "wrong typeof object");
+ this.do_interface_attribute_asserts(obj, member);
+ }.bind(this), this.name + " interface: " + desc + ' must have own property "' + member.name + '"');
+ }
+ else if (member.type == "operation" &&
+ member.name &&
+ member.isUnforgeable)
+ {
+ test(function()
+ {
+ assert_equals(exception, null, "Unexpected exception when evaluating object");
+ assert_equals(typeof obj, expected_typeof, "wrong typeof object");
+ assert_own_property(obj, member.name,
+ "Doesn't have the unforgeable operation property");
+ this.do_member_operation_asserts(obj, member);
+ }.bind(this), this.name + " interface: " + desc + ' must have own property "' + member.name + '"');
+ }
+ else if ((member.type == "const"
+ || member.type == "attribute"
+ || member.type == "operation")
+ && member.name)
+ {
+ test(function()
+ {
+ assert_equals(exception, null, "Unexpected exception when evaluating object");
+ assert_equals(typeof obj, expected_typeof, "wrong typeof object");
+ if (!member["static"]) {
+ if (!this.is_global()) {
+ assert_inherits(obj, member.name);
+ } else {
+ assert_own_property(obj, member.name);
+ }
+
+ if (member.type == "const")
+ {
+ assert_equals(obj[member.name], constValue(member.value));
+ }
+ if (member.type == "attribute")
+ {
+ // Attributes are accessor properties, so they might
+ // legitimately throw an exception rather than returning
+ // anything.
+ var property, thrown = false;
+ try
+ {
+ property = obj[member.name];
+ }
+ catch (e)
+ {
+ thrown = true;
+ }
+ if (!thrown)
+ {
+ this.array.assert_type_is(property, member.idlType);
+ }
+ }
+ if (member.type == "operation")
+ {
+ assert_equals(typeof obj[member.name], "function");
+ }
+ }
+ }.bind(this), this.name + " interface: " + desc + ' must inherit property "' + member.name + '" with the proper type (' + i + ')');
+ }
+ // TODO: This is wrong if there are multiple operations with the same
+ // identifier.
+ // TODO: Test passing arguments of the wrong type.
+ if (member.type == "operation" && member.name && member.arguments.length)
+ {
+ test(function()
+ {
+ assert_equals(exception, null, "Unexpected exception when evaluating object");
+ assert_equals(typeof obj, expected_typeof, "wrong typeof object");
+ if (!member["static"]) {
+ if (!this.is_global() && !member.isUnforgeable) {
+ assert_inherits(obj, member.name);
+ } else {
+ assert_own_property(obj, member.name);
+ }
+ }
+ else
+ {
+ assert_false(member.name in obj);
+ }
+
+ var minLength = minOverloadLength(this.members.filter(function(m) {
+ return m.type == "operation" && m.name == member.name;
+ }));
+ var args = [];
+ for (var i = 0; i < minLength; i++) {
+ assert_throws(new TypeError(), function()
+ {
+ obj[member.name].apply(obj, args);
+ }.bind(this), "Called with " + i + " arguments");
+
+ args.push(create_suitable_object(member.arguments[i].idlType));
+ }
+ }.bind(this), this.name + " interface: calling " + member.name +
+ "(" + member.arguments.map(function(m) { return m.idlType.idlType; }) +
+ ") on " + desc + " with too few arguments must throw TypeError");
+ }
+ }
+};
+
+//@}
+IdlInterface.prototype.has_stringifier = function()
+//@{
+{
+ if (this.members.some(function(member) { return member.stringifier; })) {
+ return true;
+ }
+ if (this.base &&
+ this.array.members[this.base].has_stringifier()) {
+ return true;
+ }
+ return false;
+};
+
+//@}
+IdlInterface.prototype.do_interface_attribute_asserts = function(obj, member)
+//@{
+{
+ // This function tests WebIDL as of 2015-01-27.
+ // TODO: Consider [Exposed].
+
+ // This is called by test_member_attribute() with the prototype as obj if
+ // it is not a global, and the global otherwise, and by test_interface_of()
+ // with the object as obj.
+
+ // "For each exposed attribute of the interface, whether it was declared on
+ // the interface itself or one of its consequential interfaces, there MUST
+ // exist a corresponding property. The characteristics of this property are
+ // as follows:"
+
+ // "The name of the property is the identifier of the attribute."
+ assert_own_property(obj, member.name);
+
+ // "The property has attributes { [[Get]]: G, [[Set]]: S, [[Enumerable]]:
+ // true, [[Configurable]]: configurable }, where:
+ // "configurable is false if the attribute was declared with the
+ // [Unforgeable] extended attribute and true otherwise;
+ // "G is the attribute getter, defined below; and
+ // "S is the attribute setter, also defined below."
+ var desc = Object.getOwnPropertyDescriptor(obj, member.name);
+ assert_false("value" in desc, 'property descriptor has value but is supposed to be accessor');
+ assert_false("writable" in desc, 'property descriptor has "writable" field but is supposed to be accessor');
+ assert_true(desc.enumerable, "property is not enumerable");
+ if (member.isUnforgeable)
+ {
+ assert_false(desc.configurable, "[Unforgeable] property must not be configurable");
+ }
+ else
+ {
+ assert_true(desc.configurable, "property must be configurable");
+ }
+
+
+ // "The attribute getter is a Function object whose behavior when invoked
+ // is as follows:"
+ assert_equals(typeof desc.get, "function", "getter must be Function");
+
+ // "If the attribute is a regular attribute, then:"
+ if (!member["static"]) {
+ // "If O is not a platform object that implements I, then:
+ // "If the attribute was specified with the [LenientThis] extended
+ // attribute, then return undefined.
+ // "Otherwise, throw a TypeError."
+ if (!member.has_extended_attribute("LenientThis")) {
+ assert_throws(new TypeError(), function() {
+ desc.get.call({});
+ }.bind(this), "calling getter on wrong object type must throw TypeError");
+ } else {
+ assert_equals(desc.get.call({}), undefined,
+ "calling getter on wrong object type must return undefined");
+ }
+ }
+
+ // "The value of the Function object’s “length” property is the Number
+ // value 0."
+ assert_equals(desc.get.length, 0, "getter length must be 0");
+
+
+ // TODO: Test calling setter on the interface prototype (should throw
+ // TypeError in most cases).
+ if (member.readonly
+ && !member.has_extended_attribute("PutForwards")
+ && !member.has_extended_attribute("Replaceable"))
+ {
+ // "The attribute setter is undefined if the attribute is declared
+ // readonly and has neither a [PutForwards] nor a [Replaceable]
+ // extended attribute declared on it."
+ assert_equals(desc.set, undefined, "setter must be undefined for readonly attributes");
+ }
+ else
+ {
+ // "Otherwise, it is a Function object whose behavior when
+ // invoked is as follows:"
+ assert_equals(typeof desc.set, "function", "setter must be function for PutForwards, Replaceable, or non-readonly attributes");
+
+ // "If the attribute is a regular attribute, then:"
+ if (!member["static"]) {
+ // "If /validThis/ is false and the attribute was not specified
+ // with the [LenientThis] extended attribute, then throw a
+ // TypeError."
+ // "If the attribute is declared with a [Replaceable] extended
+ // attribute, then: ..."
+ // "If validThis is false, then return."
+ if (!member.has_extended_attribute("LenientThis")) {
+ assert_throws(new TypeError(), function() {
+ desc.set.call({});
+ }.bind(this), "calling setter on wrong object type must throw TypeError");
+ } else {
+ assert_equals(desc.set.call({}), undefined,
+ "calling setter on wrong object type must return undefined");
+ }
+ }
+
+ // "The value of the Function object’s “length” property is the Number
+ // value 1."
+ assert_equals(desc.set.length, 1, "setter length must be 1");
+ }
+}
+//@}
+
+/// IdlInterfaceMember ///
+function IdlInterfaceMember(obj)
+//@{
+{
+ /**
+ * obj is an object produced by the WebIDLParser.js "ifMember" production.
+ * We just forward all properties to this object without modification,
+ * except for special extAttrs handling.
+ */
+ for (var k in obj)
+ {
+ this[k] = obj[k];
+ }
+ if (!("extAttrs" in this))
+ {
+ this.extAttrs = [];
+ }
+
+ this.isUnforgeable = this.has_extended_attribute("Unforgeable");
+}
+
+//@}
+IdlInterfaceMember.prototype = Object.create(IdlObject.prototype);
+
+/// Internal helper functions ///
+function create_suitable_object(type)
+//@{
+{
+ /**
+ * type is an object produced by the WebIDLParser.js "type" production. We
+ * return a JavaScript value that matches the type, if we can figure out
+ * how.
+ */
+ if (type.nullable)
+ {
+ return null;
+ }
+ switch (type.idlType)
+ {
+ case "any":
+ case "boolean":
+ return true;
+
+ case "byte": case "octet": case "short": case "unsigned short":
+ case "long": case "unsigned long": case "long long":
+ case "unsigned long long": case "float": case "double":
+ case "unrestricted float": case "unrestricted double":
+ return 7;
+
+ case "DOMString":
+ case "ByteString":
+ case "USVString":
+ return "foo";
+
+ case "object":
+ return {a: "b"};
+
+ case "Node":
+ return document.createTextNode("abc");
+ }
+ return null;
+}
+//@}
+
+/// IdlEnum ///
+// Used for IdlArray.prototype.assert_type_is
+function IdlEnum(obj)
+//@{
+{
+ /**
+ * obj is an object produced by the WebIDLParser.js "dictionary"
+ * production.
+ */
+
+ /** Self-explanatory. */
+ this.name = obj.name;
+
+ /** An array of values produced by the "enum" production. */
+ this.values = obj.values;
+
+}
+//@}
+
+IdlEnum.prototype = Object.create(IdlObject.prototype);
+
+/// IdlTypedef ///
+// Used for IdlArray.prototype.assert_type_is
+function IdlTypedef(obj)
+//@{
+{
+ /**
+ * obj is an object produced by the WebIDLParser.js "typedef"
+ * production.
+ */
+
+ /** Self-explanatory. */
+ this.name = obj.name;
+
+ /** An array of values produced by the "typedef" production. */
+ this.values = obj.values;
+
+}
+//@}
+
+IdlTypedef.prototype = Object.create(IdlObject.prototype);
+
+}());
+// vim: set expandtab shiftwidth=4 tabstop=4 foldmarker=@{,@} foldmethod=marker:
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsresourcestestharnesscss"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/resources/testharness.css (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/resources/testharness.css         (rev 0)
+++ trunk/LayoutTests/http/tests/resources/testharness.css        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,102 @@
</span><ins>+html {
+ font-family:DejaVu Sans, Bitstream Vera Sans, Arial, Sans;
+}
+
+#log .warning,
+#log .warning a {
+ color: black;
+ background: yellow;
+}
+
+#log .error,
+#log .error a {
+ color: white;
+ background: red;
+}
+
+section#summary {
+ margin-bottom:1em;
+}
+
+table#results {
+ border-collapse:collapse;
+ table-layout:fixed;
+ width:100%;
+}
+
+table#results th:first-child,
+table#results td:first-child {
+ width:4em;
+}
+
+table#results th:last-child,
+table#results td:last-child {
+ width:50%;
+}
+
+table#results.assertions th:last-child,
+table#results.assertions td:last-child {
+ width:35%;
+}
+
+table#results th {
+ padding:0;
+ padding-bottom:0.5em;
+ border-bottom:medium solid black;
+}
+
+table#results td {
+ padding:1em;
+ padding-bottom:0.5em;
+ border-bottom:thin solid black;
+}
+
+tr.pass > td:first-child {
+ color:green;
+}
+
+tr.fail > td:first-child {
+ color:red;
+}
+
+tr.timeout > td:first-child {
+ color:red;
+}
+
+tr.notrun > td:first-child {
+ color:blue;
+}
+
+.pass > td:first-child, .fail > td:first-child, .timeout > td:first-child, .notrun > td:first-child {
+ font-variant:small-caps;
+}
+
+table#results span {
+ display:block;
+}
+
+table#results span.expected {
+ font-family:DejaVu Sans Mono, Bitstream Vera Sans Mono, Monospace;
+ white-space:pre;
+}
+
+table#results span.actual {
+ font-family:DejaVu Sans Mono, Bitstream Vera Sans Mono, Monospace;
+ white-space:pre;
+}
+
+span.ok {
+ color:green;
+}
+
+tr.error {
+ color:red;
+}
+
+span.timeout {
+ color:red;
+}
+
+span.ok, span.timeout, span.error {
+ font-variant:small-caps;
+}
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsresourcestestharnessjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/resources/testharness.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/resources/testharness.js         (rev 0)
+++ trunk/LayoutTests/http/tests/resources/testharness.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,2657 @@
</span><ins>+/*global self*/
+/*jshint latedef: nofunc*/
+/*
+Distributed under both the W3C Test Suite License [1] and the W3C
+3-clause BSD License [2]. To contribute to a W3C Test Suite, see the
+policies and contribution forms [3].
+
+[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
+[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license
+[3] http://www.w3.org/2004/10/27-testcases
+*/
+
+/* Documentation is in docs/api.md */
+
+(function ()
+{
+ var debug = false;
+ // default timeout is 10 seconds, test can override if needed
+ var settings = {
+ output:true,
+ harness_timeout:{
+ "normal":10000,
+ "long":60000
+ },
+ test_timeout:null,
+ message_events: ["start", "test_state", "result", "completion"]
+ };
+
+ var xhtml_ns = "http://www.w3.org/1999/xhtml";
+
+ /*
+ * TestEnvironment is an abstraction for the environment in which the test
+ * harness is used. Each implementation of a test environment has to provide
+ * the following interface:
+ *
+ * interface TestEnvironment {
+ * // Invoked after the global 'tests' object has been created and it's
+ * // safe to call add_*_callback() to register event handlers.
+ * void on_tests_ready();
+ *
+ * // Invoked after setup() has been called to notify the test environment
+ * // of changes to the test harness properties.
+ * void on_new_harness_properties(object properties);
+ *
+ * // Should return a new unique default test name.
+ * DOMString next_default_test_name();
+ *
+ * // Should return the test harness timeout duration in milliseconds.
+ * float test_timeout();
+ *
+ * // Should return the global scope object.
+ * object global_scope();
+ * };
+ */
+
+ /*
+ * A test environment with a DOM. The global object is 'window'. By default
+ * test results are displayed in a table. Any parent windows receive
+ * callbacks or messages via postMessage() when test events occur. See
+ * apisample11.html and apisample12.html.
+ */
+ function WindowTestEnvironment() {
+ this.name_counter = 0;
+ this.window_cache = null;
+ this.output_handler = null;
+ this.all_loaded = false;
+ var this_obj = this;
+ this.message_events = [];
+
+ this.message_functions = {
+ start: [add_start_callback, remove_start_callback,
+ function (properties) {
+ this_obj._dispatch("start_callback", [properties],
+ {type: "start", properties: properties});
+ }],
+
+ test_state: [add_test_state_callback, remove_test_state_callback,
+ function(test) {
+ this_obj._dispatch("test_state_callback", [test],
+ {type: "test_state",
+ test: test.structured_clone()});
+ }],
+ result: [add_result_callback, remove_result_callback,
+ function (test) {
+ this_obj.output_handler.show_status();
+ this_obj._dispatch("result_callback", [test],
+ {type: "result",
+ test: test.structured_clone()});
+ }],
+ completion: [add_completion_callback, remove_completion_callback,
+ function (tests, harness_status) {
+ var cloned_tests = map(tests, function(test) {
+ return test.structured_clone();
+ });
+ this_obj._dispatch("completion_callback", [tests, harness_status],
+ {type: "complete",
+ tests: cloned_tests,
+ status: harness_status.structured_clone()});
+ }]
+ }
+
+ on_event(window, 'load', function() {
+ this_obj.all_loaded = true;
+ });
+ }
+
+ WindowTestEnvironment.prototype._dispatch = function(selector, callback_args, message_arg) {
+ this._forEach_windows(
+ function(w, same_origin) {
+ if (same_origin) {
+ try {
+ var has_selector = selector in w;
+ } catch(e) {
+ // If document.domain was set at some point same_origin can be
+ // wrong and the above will fail.
+ has_selector = false;
+ }
+ if (has_selector) {
+ try {
+ w[selector].apply(undefined, callback_args);
+ } catch (e) {
+ if (debug) {
+ throw e;
+ }
+ }
+ }
+ }
+ if (supports_post_message(w) && w !== self) {
+ w.postMessage(message_arg, "*");
+ }
+ });
+ };
+
+ WindowTestEnvironment.prototype._forEach_windows = function(callback) {
+ // Iterate of the the windows [self ... top, opener]. The callback is passed
+ // two objects, the first one is the windows object itself, the second one
+ // is a boolean indicating whether or not its on the same origin as the
+ // current window.
+ var cache = this.window_cache;
+ if (!cache) {
+ cache = [[self, true]];
+ var w = self;
+ var i = 0;
+ var so;
+ var origins = location.ancestorOrigins;
+ while (w != w.parent) {
+ w = w.parent;
+ // In WebKit, calls to parent windows' properties that aren't on the same
+ // origin cause an error message to be displayed in the error console but
+ // don't throw an exception. This is a deviation from the current HTML5
+ // spec. See: https://bugs.webkit.org/show_bug.cgi?id=43504
+ // The problem with WebKit's behavior is that it pollutes the error console
+ // with error messages that can't be caught.
+ //
+ // This issue can be mitigated by relying on the (for now) proprietary
+ // `location.ancestorOrigins` property which returns an ordered list of
+ // the origins of enclosing windows. See:
+ // http://trac.webkit.org/changeset/113945.
+ if (origins) {
+ so = (location.origin == origins[i]);
+ } else {
+ so = is_same_origin(w);
+ }
+ cache.push([w, so]);
+ i++;
+ }
+ w = window.opener;
+ if (w) {
+ // window.opener isn't included in the `location.ancestorOrigins` prop.
+ // We'll just have to deal with a simple check and an error msg on WebKit
+ // browsers in this case.
+ cache.push([w, is_same_origin(w)]);
+ }
+ this.window_cache = cache;
+ }
+
+ forEach(cache,
+ function(a) {
+ callback.apply(null, a);
+ });
+ };
+
+ WindowTestEnvironment.prototype.on_tests_ready = function() {
+ var output = new Output();
+ this.output_handler = output;
+
+ var this_obj = this;
+
+ add_start_callback(function (properties) {
+ this_obj.output_handler.init(properties);
+ });
+
+ add_test_state_callback(function(test) {
+ this_obj.output_handler.show_status();
+ });
+
+ add_result_callback(function (test) {
+ this_obj.output_handler.show_status();
+ });
+
+ add_completion_callback(function (tests, harness_status) {
+ this_obj.output_handler.show_results(tests, harness_status);
+ });
+ this.setup_messages(settings.message_events);
+ };
+
+ WindowTestEnvironment.prototype.setup_messages = function(new_events) {
+ var this_obj = this;
+ forEach(settings.message_events, function(x) {
+ var current_dispatch = this_obj.message_events.indexOf(x) !== -1;
+ var new_dispatch = new_events.indexOf(x) !== -1;
+ if (!current_dispatch && new_dispatch) {
+ this_obj.message_functions[x][0](this_obj.message_functions[x][2]);
+ } else if (current_dispatch && !new_dispatch) {
+ this_obj.message_functions[x][1](this_obj.message_functions[x][2]);
+ }
+ });
+ this.message_events = new_events;
+ }
+
+ WindowTestEnvironment.prototype.next_default_test_name = function() {
+ //Don't use document.title to work around an Opera bug in XHTML documents
+ var title = document.getElementsByTagName("title")[0];
+ var prefix = (title && title.firstChild && title.firstChild.data) || "Untitled";
+ var suffix = this.name_counter > 0 ? " " + this.name_counter : "";
+ this.name_counter++;
+ return prefix + suffix;
+ };
+
+ WindowTestEnvironment.prototype.on_new_harness_properties = function(properties) {
+ this.output_handler.setup(properties);
+ if (properties.hasOwnProperty("message_events")) {
+ this.setup_messages(properties.message_events);
+ }
+ };
+
+ WindowTestEnvironment.prototype.add_on_loaded_callback = function(callback) {
+ on_event(window, 'load', callback);
+ };
+
+ WindowTestEnvironment.prototype.test_timeout = function() {
+ var metas = document.getElementsByTagName("meta");
+ for (var i = 0; i < metas.length; i++) {
+ if (metas[i].name == "timeout") {
+ if (metas[i].content == "long") {
+ return settings.harness_timeout.long;
+ }
+ break;
+ }
+ }
+ return settings.harness_timeout.normal;
+ };
+
+ WindowTestEnvironment.prototype.global_scope = function() {
+ return window;
+ };
+
+ /*
+ * Base TestEnvironment implementation for a generic web worker.
+ *
+ * Workers accumulate test results. One or more clients can connect and
+ * retrieve results from a worker at any time.
+ *
+ * WorkerTestEnvironment supports communicating with a client via a
+ * MessagePort. The mechanism for determining the appropriate MessagePort
+ * for communicating with a client depends on the type of worker and is
+ * implemented by the various specializations of WorkerTestEnvironment
+ * below.
+ *
+ * A client document using testharness can use fetch_tests_from_worker() to
+ * retrieve results from a worker. See apisample16.html.
+ */
+ function WorkerTestEnvironment() {
+ this.name_counter = 0;
+ this.all_loaded = true;
+ this.message_list = [];
+ this.message_ports = [];
+ }
+
+ WorkerTestEnvironment.prototype._dispatch = function(message) {
+ this.message_list.push(message);
+ for (var i = 0; i < this.message_ports.length; ++i)
+ {
+ this.message_ports[i].postMessage(message);
+ }
+ };
+
+ // The only requirement is that port has a postMessage() method. It doesn't
+ // have to be an instance of a MessagePort, and often isn't.
+ WorkerTestEnvironment.prototype._add_message_port = function(port) {
+ this.message_ports.push(port);
+ for (var i = 0; i < this.message_list.length; ++i)
+ {
+ port.postMessage(this.message_list[i]);
+ }
+ };
+
+ WorkerTestEnvironment.prototype.next_default_test_name = function() {
+ var suffix = this.name_counter > 0 ? " " + this.name_counter : "";
+ this.name_counter++;
+ return "Untitled" + suffix;
+ };
+
+ WorkerTestEnvironment.prototype.on_new_harness_properties = function() {};
+
+ WorkerTestEnvironment.prototype.on_tests_ready = function() {
+ var this_obj = this;
+ add_start_callback(
+ function(properties) {
+ this_obj._dispatch({
+ type: "start",
+ properties: properties,
+ });
+ });
+ add_test_state_callback(
+ function(test) {
+ this_obj._dispatch({
+ type: "test_state",
+ test: test.structured_clone()
+ });
+ });
+ add_result_callback(
+ function(test) {
+ this_obj._dispatch({
+ type: "result",
+ test: test.structured_clone()
+ });
+ });
+ add_completion_callback(
+ function(tests, harness_status) {
+ this_obj._dispatch({
+ type: "complete",
+ tests: map(tests,
+ function(test) {
+ return test.structured_clone();
+ }),
+ status: harness_status.structured_clone()
+ });
+ });
+ };
+
+ WorkerTestEnvironment.prototype.add_on_loaded_callback = function() {};
+
+ WorkerTestEnvironment.prototype.test_timeout = function() {
+ // Tests running in a worker don't have a default timeout. I.e. all
+ // worker tests behave as if settings.explicit_timeout is true.
+ return null;
+ };
+
+ WorkerTestEnvironment.prototype.global_scope = function() {
+ return self;
+ };
+
+ /*
+ * Dedicated web workers.
+ * https://html.spec.whatwg.org/multipage/workers.html#dedicatedworkerglobalscope
+ *
+ * This class is used as the test_environment when testharness is running
+ * inside a dedicated worker.
+ */
+ function DedicatedWorkerTestEnvironment() {
+ WorkerTestEnvironment.call(this);
+ // self is an instance of DedicatedWorkerGlobalScope which exposes
+ // a postMessage() method for communicating via the message channel
+ // established when the worker is created.
+ this._add_message_port(self);
+ }
+ DedicatedWorkerTestEnvironment.prototype = Object.create(WorkerTestEnvironment.prototype);
+
+ DedicatedWorkerTestEnvironment.prototype.on_tests_ready = function() {
+ WorkerTestEnvironment.prototype.on_tests_ready.call(this);
+ // In the absence of an onload notification, we a require dedicated
+ // workers to explicitly signal when the tests are done.
+ tests.wait_for_finish = true;
+ };
+
+ /*
+ * Shared web workers.
+ * https://html.spec.whatwg.org/multipage/workers.html#sharedworkerglobalscope
+ *
+ * This class is used as the test_environment when testharness is running
+ * inside a shared web worker.
+ */
+ function SharedWorkerTestEnvironment() {
+ WorkerTestEnvironment.call(this);
+ var this_obj = this;
+ // Shared workers receive message ports via the 'onconnect' event for
+ // each connection.
+ self.addEventListener("connect",
+ function(message_event) {
+ this_obj._add_message_port(message_event.source);
+ });
+ }
+ SharedWorkerTestEnvironment.prototype = Object.create(WorkerTestEnvironment.prototype);
+
+ SharedWorkerTestEnvironment.prototype.on_tests_ready = function() {
+ WorkerTestEnvironment.prototype.on_tests_ready.call(this);
+ // In the absence of an onload notification, we a require shared
+ // workers to explicitly signal when the tests are done.
+ tests.wait_for_finish = true;
+ };
+
+ /*
+ * Service workers.
+ * http://www.w3.org/TR/service-workers/
+ *
+ * This class is used as the test_environment when testharness is running
+ * inside a service worker.
+ */
+ function ServiceWorkerTestEnvironment() {
+ WorkerTestEnvironment.call(this);
+ this.all_loaded = false;
+ this.on_loaded_callback = null;
+ var this_obj = this;
+ self.addEventListener("message",
+ function(event) {
+ if (event.data.type && event.data.type === "connect") {
+ if (event.ports && event.ports[0]) {
+ // If a MessageChannel was passed, then use it to
+ // send results back to the main window. This
+ // allows the tests to work even if the browser
+ // does not fully support MessageEvent.source in
+ // ServiceWorkers yet.
+ this_obj._add_message_port(event.ports[0]);
+ event.ports[0].start();
+ } else {
+ // If there is no MessageChannel, then attempt to
+ // use the MessageEvent.source to send results
+ // back to the main window.
+ this_obj._add_message_port(event.source);
+ }
+ }
+ });
+
+ // The oninstall event is received after the service worker script and
+ // all imported scripts have been fetched and executed. It's the
+ // equivalent of an onload event for a document. All tests should have
+ // been added by the time this event is received, thus it's not
+ // necessary to wait until the onactivate event.
+ on_event(self, "install",
+ function(event) {
+ this_obj.all_loaded = true;
+ if (this_obj.on_loaded_callback) {
+ this_obj.on_loaded_callback();
+ }
+ });
+ }
+ ServiceWorkerTestEnvironment.prototype = Object.create(WorkerTestEnvironment.prototype);
+
+ ServiceWorkerTestEnvironment.prototype.add_on_loaded_callback = function(callback) {
+ if (this.all_loaded) {
+ callback();
+ } else {
+ this.on_loaded_callback = callback;
+ }
+ };
+
+ function create_test_environment() {
+ if ('document' in self) {
+ return new WindowTestEnvironment();
+ }
+ if ('DedicatedWorkerGlobalScope' in self &&
+ self instanceof DedicatedWorkerGlobalScope) {
+ return new DedicatedWorkerTestEnvironment();
+ }
+ if ('SharedWorkerGlobalScope' in self &&
+ self instanceof SharedWorkerGlobalScope) {
+ return new SharedWorkerTestEnvironment();
+ }
+ if ('ServiceWorkerGlobalScope' in self &&
+ self instanceof ServiceWorkerGlobalScope) {
+ return new ServiceWorkerTestEnvironment();
+ }
+ throw new Error("Unsupported test environment");
+ }
+
+ var test_environment = create_test_environment();
+
+ function is_shared_worker(worker) {
+ return 'SharedWorker' in self && worker instanceof SharedWorker;
+ }
+
+ function is_service_worker(worker) {
+ return 'ServiceWorker' in self && worker instanceof ServiceWorker;
+ }
+
+ /*
+ * API functions
+ */
+
+ function test(func, name, properties)
+ {
+ var test_name = name ? name : test_environment.next_default_test_name();
+ properties = properties ? properties : {};
+ var test_obj = new Test(test_name, properties);
+ test_obj.step(func, test_obj, test_obj);
+ if (test_obj.phase === test_obj.phases.STARTED) {
+ test_obj.done();
+ }
+ }
+
+ function async_test(func, name, properties)
+ {
+ if (typeof func !== "function") {
+ properties = name;
+ name = func;
+ func = null;
+ }
+ var test_name = name ? name : test_environment.next_default_test_name();
+ properties = properties ? properties : {};
+ var test_obj = new Test(test_name, properties);
+ if (func) {
+ test_obj.step(func, test_obj, test_obj);
+ }
+ return test_obj;
+ }
+
+ function promise_test(func, name, properties) {
+ var test = async_test(name, properties);
+ // If there is no promise tests queue make one.
+ test.step(function() {
+ if (!tests.promise_tests) {
+ tests.promise_tests = Promise.resolve();
+ }
+ });
+ tests.promise_tests = tests.promise_tests.then(function() {
+ return Promise.resolve(test.step(func, test, test))
+ .then(
+ function() {
+ test.done();
+ })
+ .catch(test.step_func(
+ function(value) {
+ if (value instanceof AssertionError) {
+ throw value;
+ }
+ assert(false, "promise_test", null,
+ "Unhandled rejection with value: ${value}", {value:value});
+ }));
+ });
+ }
+
+ function promise_rejects(test, expected, promise) {
+ return promise.then(test.unreached_func("Should have rejected.")).catch(function(e) {
+ assert_throws(expected, function() { throw e });
+ });
+ }
+
+ /**
+ * This constructor helper allows DOM events to be handled using Promises,
+ * which can make it a lot easier to test a very specific series of events,
+ * including ensuring that unexpected events are not fired at any point.
+ */
+ function EventWatcher(test, watchedNode, eventTypes)
+ {
+ if (typeof eventTypes == 'string') {
+ eventTypes = [eventTypes];
+ }
+
+ var waitingFor = null;
+
+ var eventHandler = test.step_func(function(evt) {
+ assert_true(!!waitingFor,
+ 'Not expecting event, but got ' + evt.type + ' event');
+ assert_equals(evt.type, waitingFor.types[0],
+ 'Expected ' + waitingFor.types[0] + ' event, but got ' +
+ evt.type + ' event instead');
+ if (waitingFor.types.length > 1) {
+ // Pop first event from array
+ waitingFor.types.shift();
+ return;
+ }
+ // We need to null out waitingFor before calling the resolve function
+ // since the Promise's resolve handlers may call wait_for() which will
+ // need to set waitingFor.
+ var resolveFunc = waitingFor.resolve;
+ waitingFor = null;
+ resolveFunc(evt);
+ });
+
+ for (var i = 0; i < eventTypes.length; i++) {
+ watchedNode.addEventListener(eventTypes[i], eventHandler);
+ }
+
+ /**
+ * Returns a Promise that will resolve after the specified event or
+ * series of events has occured.
+ */
+ this.wait_for = function(types) {
+ if (waitingFor) {
+ return Promise.reject('Already waiting for an event or events');
+ }
+ if (typeof types == 'string') {
+ types = [types];
+ }
+ return new Promise(function(resolve, reject) {
+ waitingFor = {
+ types: types,
+ resolve: resolve,
+ reject: reject
+ };
+ });
+ };
+
+ function stop_watching() {
+ for (var i = 0; i < eventTypes.length; i++) {
+ watchedNode.removeEventListener(eventTypes[i], eventHandler);
+ }
+ };
+
+ test.add_cleanup(stop_watching);
+
+ return this;
+ }
+ expose(EventWatcher, 'EventWatcher');
+
+ function setup(func_or_properties, maybe_properties)
+ {
+ var func = null;
+ var properties = {};
+ if (arguments.length === 2) {
+ func = func_or_properties;
+ properties = maybe_properties;
+ } else if (func_or_properties instanceof Function) {
+ func = func_or_properties;
+ } else {
+ properties = func_or_properties;
+ }
+ tests.setup(func, properties);
+ test_environment.on_new_harness_properties(properties);
+ }
+
+ function done() {
+ if (tests.tests.length === 0) {
+ tests.set_file_is_test();
+ }
+ if (tests.file_is_test) {
+ tests.tests[0].done();
+ }
+ tests.end_wait();
+ }
+
+ function generate_tests(func, args, properties) {
+ forEach(args, function(x, i)
+ {
+ var name = x[0];
+ test(function()
+ {
+ func.apply(this, x.slice(1));
+ },
+ name,
+ Array.isArray(properties) ? properties[i] : properties);
+ });
+ }
+
+ function on_event(object, event, callback)
+ {
+ object.addEventListener(event, callback, false);
+ }
+
+ function step_timeout(f, t) {
+ var outer_this = this;
+ var args = Array.prototype.slice.call(arguments, 2);
+ return setTimeout(function() {
+ f.apply(outer_this, args);
+ }, t * tests.timeout_multiplier);
+ }
+
+ expose(test, 'test');
+ expose(async_test, 'async_test');
+ expose(promise_test, 'promise_test');
+ expose(promise_rejects, 'promise_rejects');
+ expose(generate_tests, 'generate_tests');
+ expose(setup, 'setup');
+ expose(done, 'done');
+ expose(on_event, 'on_event');
+ expose(step_timeout, 'step_timeout');
+
+ /*
+ * Return a string truncated to the given length, with ... added at the end
+ * if it was longer.
+ */
+ function truncate(s, len)
+ {
+ if (s.length > len) {
+ return s.substring(0, len - 3) + "...";
+ }
+ return s;
+ }
+
+ /*
+ * Return true if object is probably a Node object.
+ */
+ function is_node(object)
+ {
+ // I use duck-typing instead of instanceof, because
+ // instanceof doesn't work if the node is from another window (like an
+ // iframe's contentWindow):
+ // http://www.w3.org/Bugs/Public/show_bug.cgi?id=12295
+ if ("nodeType" in object &&
+ "nodeName" in object &&
+ "nodeValue" in object &&
+ "childNodes" in object) {
+ try {
+ object.nodeType;
+ } catch (e) {
+ // The object is probably Node.prototype or another prototype
+ // object that inherits from it, and not a Node instance.
+ return false;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /*
+ * Convert a value to a nice, human-readable string
+ */
+ function format_value(val, seen)
+ {
+ if (!seen) {
+ seen = [];
+ }
+ if (typeof val === "object" && val !== null) {
+ if (seen.indexOf(val) >= 0) {
+ return "[...]";
+ }
+ seen.push(val);
+ }
+ if (Array.isArray(val)) {
+ return "[" + val.map(function(x) {return format_value(x, seen);}).join(", ") + "]";
+ }
+
+ switch (typeof val) {
+ case "string":
+ val = val.replace("\\", "\\\\");
+ for (var i = 0; i < 32; i++) {
+ var replace = "\\";
+ switch (i) {
+ case 0: replace += "0"; break;
+ case 1: replace += "x01"; break;
+ case 2: replace += "x02"; break;
+ case 3: replace += "x03"; break;
+ case 4: replace += "x04"; break;
+ case 5: replace += "x05"; break;
+ case 6: replace += "x06"; break;
+ case 7: replace += "x07"; break;
+ case 8: replace += "b"; break;
+ case 9: replace += "t"; break;
+ case 10: replace += "n"; break;
+ case 11: replace += "v"; break;
+ case 12: replace += "f"; break;
+ case 13: replace += "r"; break;
+ case 14: replace += "x0e"; break;
+ case 15: replace += "x0f"; break;
+ case 16: replace += "x10"; break;
+ case 17: replace += "x11"; break;
+ case 18: replace += "x12"; break;
+ case 19: replace += "x13"; break;
+ case 20: replace += "x14"; break;
+ case 21: replace += "x15"; break;
+ case 22: replace += "x16"; break;
+ case 23: replace += "x17"; break;
+ case 24: replace += "x18"; break;
+ case 25: replace += "x19"; break;
+ case 26: replace += "x1a"; break;
+ case 27: replace += "x1b"; break;
+ case 28: replace += "x1c"; break;
+ case 29: replace += "x1d"; break;
+ case 30: replace += "x1e"; break;
+ case 31: replace += "x1f"; break;
+ }
+ val = val.replace(RegExp(String.fromCharCode(i), "g"), replace);
+ }
+ return '"' + val.replace(/"/g, '\\"') + '"';
+ case "boolean":
+ case "undefined":
+ return String(val);
+ case "number":
+ // In JavaScript, -0 === 0 and String(-0) == "0", so we have to
+ // special-case.
+ if (val === -0 && 1/val === -Infinity) {
+ return "-0";
+ }
+ return String(val);
+ case "object":
+ if (val === null) {
+ return "null";
+ }
+
+ // Special-case Node objects, since those come up a lot in my tests. I
+ // ignore namespaces.
+ if (is_node(val)) {
+ switch (val.nodeType) {
+ case Node.ELEMENT_NODE:
+ var ret = "<" + val.localName;
+ for (var i = 0; i < val.attributes.length; i++) {
+ ret += " " + val.attributes[i].name + '="' + val.attributes[i].value + '"';
+ }
+ ret += ">" + val.innerHTML + "</" + val.localName + ">";
+ return "Element node " + truncate(ret, 60);
+ case Node.TEXT_NODE:
+ return 'Text node "' + truncate(val.data, 60) + '"';
+ case Node.PROCESSING_INSTRUCTION_NODE:
+ return "ProcessingInstruction node with target " + format_value(truncate(val.target, 60)) + " and data " + format_value(truncate(val.data, 60));
+ case Node.COMMENT_NODE:
+ return "Comment node <!--" + truncate(val.data, 60) + "-->";
+ case Node.DOCUMENT_NODE:
+ return "Document node with " + val.childNodes.length + (val.childNodes.length == 1 ? " child" : " children");
+ case Node.DOCUMENT_TYPE_NODE:
+ return "DocumentType node";
+ case Node.DOCUMENT_FRAGMENT_NODE:
+ return "DocumentFragment node with " + val.childNodes.length + (val.childNodes.length == 1 ? " child" : " children");
+ default:
+ return "Node object of unknown type";
+ }
+ }
+
+ /* falls through */
+ default:
+ return typeof val + ' "' + truncate(String(val), 60) + '"';
+ }
+ }
+ expose(format_value, "format_value");
+
+ /*
+ * Assertions
+ */
+
+ function assert_true(actual, description)
+ {
+ assert(actual === true, "assert_true", description,
+ "expected true got ${actual}", {actual:actual});
+ }
+ expose(assert_true, "assert_true");
+
+ function assert_false(actual, description)
+ {
+ assert(actual === false, "assert_false", description,
+ "expected false got ${actual}", {actual:actual});
+ }
+ expose(assert_false, "assert_false");
+
+ function same_value(x, y) {
+ if (y !== y) {
+ //NaN case
+ return x !== x;
+ }
+ if (x === 0 && y === 0) {
+ //Distinguish +0 and -0
+ return 1/x === 1/y;
+ }
+ return x === y;
+ }
+
+ function assert_equals(actual, expected, description)
+ {
+ /*
+ * Test if two primitives are equal or two objects
+ * are the same object
+ */
+ if (typeof actual != typeof expected) {
+ assert(false, "assert_equals", description,
+ "expected (" + typeof expected + ") ${expected} but got (" + typeof actual + ") ${actual}",
+ {expected:expected, actual:actual});
+ return;
+ }
+ assert(same_value(actual, expected), "assert_equals", description,
+ "expected ${expected} but got ${actual}",
+ {expected:expected, actual:actual});
+ }
+ expose(assert_equals, "assert_equals");
+
+ function assert_not_equals(actual, expected, description)
+ {
+ /*
+ * Test if two primitives are unequal or two objects
+ * are different objects
+ */
+ assert(!same_value(actual, expected), "assert_not_equals", description,
+ "got disallowed value ${actual}",
+ {actual:actual});
+ }
+ expose(assert_not_equals, "assert_not_equals");
+
+ function assert_in_array(actual, expected, description)
+ {
+ assert(expected.indexOf(actual) != -1, "assert_in_array", description,
+ "value ${actual} not in array ${expected}",
+ {actual:actual, expected:expected});
+ }
+ expose(assert_in_array, "assert_in_array");
+
+ function assert_object_equals(actual, expected, description)
+ {
+ //This needs to be improved a great deal
+ function check_equal(actual, expected, stack)
+ {
+ stack.push(actual);
+
+ var p;
+ for (p in actual) {
+ assert(expected.hasOwnProperty(p), "assert_object_equals", description,
+ "unexpected property ${p}", {p:p});
+
+ if (typeof actual[p] === "object" && actual[p] !== null) {
+ if (stack.indexOf(actual[p]) === -1) {
+ check_equal(actual[p], expected[p], stack);
+ }
+ } else {
+ assert(same_value(actual[p], expected[p]), "assert_object_equals", description,
+ "property ${p} expected ${expected} got ${actual}",
+ {p:p, expected:expected, actual:actual});
+ }
+ }
+ for (p in expected) {
+ assert(actual.hasOwnProperty(p),
+ "assert_object_equals", description,
+ "expected property ${p} missing", {p:p});
+ }
+ stack.pop();
+ }
+ check_equal(actual, expected, []);
+ }
+ expose(assert_object_equals, "assert_object_equals");
+
+ function assert_array_equals(actual, expected, description)
+ {
+ assert(actual.length === expected.length,
+ "assert_array_equals", description,
+ "lengths differ, expected ${expected} got ${actual}",
+ {expected:expected.length, actual:actual.length});
+
+ for (var i = 0; i < actual.length; i++) {
+ assert(actual.hasOwnProperty(i) === expected.hasOwnProperty(i),
+ "assert_array_equals", description,
+ "property ${i}, property expected to be ${expected} but was ${actual}",
+ {i:i, expected:expected.hasOwnProperty(i) ? "present" : "missing",
+ actual:actual.hasOwnProperty(i) ? "present" : "missing"});
+ assert(same_value(expected[i], actual[i]),
+ "assert_array_equals", description,
+ "property ${i}, expected ${expected} but got ${actual}",
+ {i:i, expected:expected[i], actual:actual[i]});
+ }
+ }
+ expose(assert_array_equals, "assert_array_equals");
+
+ function assert_approx_equals(actual, expected, epsilon, description)
+ {
+ /*
+ * Test if two primitive numbers are equal withing +/- epsilon
+ */
+ assert(typeof actual === "number",
+ "assert_approx_equals", description,
+ "expected a number but got a ${type_actual}",
+ {type_actual:typeof actual});
+
+ assert(Math.abs(actual - expected) <= epsilon,
+ "assert_approx_equals", description,
+ "expected ${expected} +/- ${epsilon} but got ${actual}",
+ {expected:expected, actual:actual, epsilon:epsilon});
+ }
+ expose(assert_approx_equals, "assert_approx_equals");
+
+ function assert_less_than(actual, expected, description)
+ {
+ /*
+ * Test if a primitive number is less than another
+ */
+ assert(typeof actual === "number",
+ "assert_less_than", description,
+ "expected a number but got a ${type_actual}",
+ {type_actual:typeof actual});
+
+ assert(actual < expected,
+ "assert_less_than", description,
+ "expected a number less than ${expected} but got ${actual}",
+ {expected:expected, actual:actual});
+ }
+ expose(assert_less_than, "assert_less_than");
+
+ function assert_greater_than(actual, expected, description)
+ {
+ /*
+ * Test if a primitive number is greater than another
+ */
+ assert(typeof actual === "number",
+ "assert_greater_than", description,
+ "expected a number but got a ${type_actual}",
+ {type_actual:typeof actual});
+
+ assert(actual > expected,
+ "assert_greater_than", description,
+ "expected a number greater than ${expected} but got ${actual}",
+ {expected:expected, actual:actual});
+ }
+ expose(assert_greater_than, "assert_greater_than");
+
+ function assert_between_exclusive(actual, lower, upper, description)
+ {
+ /*
+ * Test if a primitive number is between two others
+ */
+ assert(typeof actual === "number",
+ "assert_between_exclusive", description,
+ "expected a number but got a ${type_actual}",
+ {type_actual:typeof actual});
+
+ assert(actual > lower && actual < upper,
+ "assert_between_exclusive", description,
+ "expected a number greater than ${lower} " +
+ "and less than ${upper} but got ${actual}",
+ {lower:lower, upper:upper, actual:actual});
+ }
+ expose(assert_between_exclusive, "assert_between_exclusive");
+
+ function assert_less_than_equal(actual, expected, description)
+ {
+ /*
+ * Test if a primitive number is less than or equal to another
+ */
+ assert(typeof actual === "number",
+ "assert_less_than_equal", description,
+ "expected a number but got a ${type_actual}",
+ {type_actual:typeof actual});
+
+ assert(actual <= expected,
+ "assert_less_than_equal", description,
+ "expected a number less than or equal to ${expected} but got ${actual}",
+ {expected:expected, actual:actual});
+ }
+ expose(assert_less_than_equal, "assert_less_than_equal");
+
+ function assert_greater_than_equal(actual, expected, description)
+ {
+ /*
+ * Test if a primitive number is greater than or equal to another
+ */
+ assert(typeof actual === "number",
+ "assert_greater_than_equal", description,
+ "expected a number but got a ${type_actual}",
+ {type_actual:typeof actual});
+
+ assert(actual >= expected,
+ "assert_greater_than_equal", description,
+ "expected a number greater than or equal to ${expected} but got ${actual}",
+ {expected:expected, actual:actual});
+ }
+ expose(assert_greater_than_equal, "assert_greater_than_equal");
+
+ function assert_between_inclusive(actual, lower, upper, description)
+ {
+ /*
+ * Test if a primitive number is between to two others or equal to either of them
+ */
+ assert(typeof actual === "number",
+ "assert_between_inclusive", description,
+ "expected a number but got a ${type_actual}",
+ {type_actual:typeof actual});
+
+ assert(actual >= lower && actual <= upper,
+ "assert_between_inclusive", description,
+ "expected a number greater than or equal to ${lower} " +
+ "and less than or equal to ${upper} but got ${actual}",
+ {lower:lower, upper:upper, actual:actual});
+ }
+ expose(assert_between_inclusive, "assert_between_inclusive");
+
+ function assert_regexp_match(actual, expected, description) {
+ /*
+ * Test if a string (actual) matches a regexp (expected)
+ */
+ assert(expected.test(actual),
+ "assert_regexp_match", description,
+ "expected ${expected} but got ${actual}",
+ {expected:expected, actual:actual});
+ }
+ expose(assert_regexp_match, "assert_regexp_match");
+
+ function assert_class_string(object, class_string, description) {
+ assert_equals({}.toString.call(object), "[object " + class_string + "]",
+ description);
+ }
+ expose(assert_class_string, "assert_class_string");
+
+
+ function _assert_own_property(name) {
+ return function(object, property_name, description)
+ {
+ assert(object.hasOwnProperty(property_name),
+ name, description,
+ "expected property ${p} missing", {p:property_name});
+ };
+ }
+ expose(_assert_own_property("assert_exists"), "assert_exists");
+ expose(_assert_own_property("assert_own_property"), "assert_own_property");
+
+ function assert_not_exists(object, property_name, description)
+ {
+ assert(!object.hasOwnProperty(property_name),
+ "assert_not_exists", description,
+ "unexpected property ${p} found", {p:property_name});
+ }
+ expose(assert_not_exists, "assert_not_exists");
+
+ function _assert_inherits(name) {
+ return function (object, property_name, description)
+ {
+ assert(typeof object === "object",
+ name, description,
+ "provided value is not an object");
+
+ assert("hasOwnProperty" in object,
+ name, description,
+ "provided value is an object but has no hasOwnProperty method");
+
+ assert(!object.hasOwnProperty(property_name),
+ name, description,
+ "property ${p} found on object expected in prototype chain",
+ {p:property_name});
+
+ assert(property_name in object,
+ name, description,
+ "property ${p} not found in prototype chain",
+ {p:property_name});
+ };
+ }
+ expose(_assert_inherits("assert_inherits"), "assert_inherits");
+ expose(_assert_inherits("assert_idl_attribute"), "assert_idl_attribute");
+
+ function assert_readonly(object, property_name, description)
+ {
+ var initial_value = object[property_name];
+ try {
+ //Note that this can have side effects in the case where
+ //the property has PutForwards
+ object[property_name] = initial_value + "a"; //XXX use some other value here?
+ assert(same_value(object[property_name], initial_value),
+ "assert_readonly", description,
+ "changing property ${p} succeeded",
+ {p:property_name});
+ } finally {
+ object[property_name] = initial_value;
+ }
+ }
+ expose(assert_readonly, "assert_readonly");
+
+ function assert_throws(code, func, description)
+ {
+ try {
+ func.call(this);
+ assert(false, "assert_throws", description,
+ "${func} did not throw", {func:func});
+ } catch (e) {
+ if (e instanceof AssertionError) {
+ throw e;
+ }
+ if (code === null) {
+ return;
+ }
+ if (typeof code === "object") {
+ assert(typeof e == "object" && "name" in e && e.name == code.name,
+ "assert_throws", description,
+ "${func} threw ${actual} (${actual_name}) expected ${expected} (${expected_name})",
+ {func:func, actual:e, actual_name:e.name,
+ expected:code,
+ expected_name:code.name});
+ return;
+ }
+
+ var code_name_map = {
+ INDEX_SIZE_ERR: 'IndexSizeError',
+ HIERARCHY_REQUEST_ERR: 'HierarchyRequestError',
+ WRONG_DOCUMENT_ERR: 'WrongDocumentError',
+ INVALID_CHARACTER_ERR: 'InvalidCharacterError',
+ NO_MODIFICATION_ALLOWED_ERR: 'NoModificationAllowedError',
+ NOT_FOUND_ERR: 'NotFoundError',
+ NOT_SUPPORTED_ERR: 'NotSupportedError',
+ INVALID_STATE_ERR: 'InvalidStateError',
+ SYNTAX_ERR: 'SyntaxError',
+ INVALID_MODIFICATION_ERR: 'InvalidModificationError',
+ NAMESPACE_ERR: 'NamespaceError',
+ INVALID_ACCESS_ERR: 'InvalidAccessError',
+ TYPE_MISMATCH_ERR: 'TypeMismatchError',
+ SECURITY_ERR: 'SecurityError',
+ NETWORK_ERR: 'NetworkError',
+ ABORT_ERR: 'AbortError',
+ URL_MISMATCH_ERR: 'URLMismatchError',
+ QUOTA_EXCEEDED_ERR: 'QuotaExceededError',
+ TIMEOUT_ERR: 'TimeoutError',
+ INVALID_NODE_TYPE_ERR: 'InvalidNodeTypeError',
+ DATA_CLONE_ERR: 'DataCloneError'
+ };
+
+ var name = code in code_name_map ? code_name_map[code] : code;
+
+ var name_code_map = {
+ IndexSizeError: 1,
+ HierarchyRequestError: 3,
+ WrongDocumentError: 4,
+ InvalidCharacterError: 5,
+ NoModificationAllowedError: 7,
+ NotFoundError: 8,
+ NotSupportedError: 9,
+ InvalidStateError: 11,
+ SyntaxError: 12,
+ InvalidModificationError: 13,
+ NamespaceError: 14,
+ InvalidAccessError: 15,
+ TypeMismatchError: 17,
+ SecurityError: 18,
+ NetworkError: 19,
+ AbortError: 20,
+ URLMismatchError: 21,
+ QuotaExceededError: 22,
+ TimeoutError: 23,
+ InvalidNodeTypeError: 24,
+ DataCloneError: 25,
+
+ EncodingError: 0,
+ NotReadableError: 0,
+ UnknownError: 0,
+ ConstraintError: 0,
+ DataError: 0,
+ TransactionInactiveError: 0,
+ ReadOnlyError: 0,
+ VersionError: 0,
+ OperationError: 0,
+ };
+
+ if (!(name in name_code_map)) {
+ throw new AssertionError('Test bug: unrecognized DOMException code "' + code + '" passed to assert_throws()');
+ }
+
+ var required_props = { code: name_code_map[name] };
+
+ if (required_props.code === 0 ||
+ (typeof e == "object" &&
+ "name" in e &&
+ e.name !== e.name.toUpperCase() &&
+ e.name !== "DOMException")) {
+ // New style exception: also test the name property.
+ required_props.name = name;
+ }
+
+ //We'd like to test that e instanceof the appropriate interface,
+ //but we can't, because we don't know what window it was created
+ //in. It might be an instanceof the appropriate interface on some
+ //unknown other window. TODO: Work around this somehow?
+
+ assert(typeof e == "object",
+ "assert_throws", description,
+ "${func} threw ${e} with type ${type}, not an object",
+ {func:func, e:e, type:typeof e});
+
+ for (var prop in required_props) {
+ assert(typeof e == "object" && prop in e && e[prop] == required_props[prop],
+ "assert_throws", description,
+ "${func} threw ${e} that is not a DOMException " + code + ": property ${prop} is equal to ${actual}, expected ${expected}",
+ {func:func, e:e, prop:prop, actual:e[prop], expected:required_props[prop]});
+ }
+ }
+ }
+ expose(assert_throws, "assert_throws");
+
+ function assert_unreached(description) {
+ assert(false, "assert_unreached", description,
+ "Reached unreachable code");
+ }
+ expose(assert_unreached, "assert_unreached");
+
+ function assert_any(assert_func, actual, expected_array)
+ {
+ var args = [].slice.call(arguments, 3);
+ var errors = [];
+ var passed = false;
+ forEach(expected_array,
+ function(expected)
+ {
+ try {
+ assert_func.apply(this, [actual, expected].concat(args));
+ passed = true;
+ } catch (e) {
+ errors.push(e.message);
+ }
+ });
+ if (!passed) {
+ throw new AssertionError(errors.join("\n\n"));
+ }
+ }
+ expose(assert_any, "assert_any");
+
+ function Test(name, properties)
+ {
+ if (tests.file_is_test && tests.tests.length) {
+ throw new Error("Tried to create a test with file_is_test");
+ }
+ this.name = name;
+
+ this.phase = this.phases.INITIAL;
+
+ this.status = this.NOTRUN;
+ this.timeout_id = null;
+ this.index = null;
+
+ this.properties = properties;
+ var timeout = properties.timeout ? properties.timeout : settings.test_timeout;
+ if (timeout !== null) {
+ this.timeout_length = timeout * tests.timeout_multiplier;
+ } else {
+ this.timeout_length = null;
+ }
+
+ this.message = null;
+ this.stack = null;
+
+ this.steps = [];
+
+ this.cleanup_callbacks = [];
+
+ tests.push(this);
+ }
+
+ Test.statuses = {
+ PASS:0,
+ FAIL:1,
+ TIMEOUT:2,
+ NOTRUN:3
+ };
+
+ Test.prototype = merge({}, Test.statuses);
+
+ Test.prototype.phases = {
+ INITIAL:0,
+ STARTED:1,
+ HAS_RESULT:2,
+ COMPLETE:3
+ };
+
+ Test.prototype.structured_clone = function()
+ {
+ if (!this._structured_clone) {
+ var msg = this.message;
+ msg = msg ? String(msg) : msg;
+ this._structured_clone = merge({
+ name:String(this.name),
+ properties:merge({}, this.properties),
+ }, Test.statuses);
+ }
+ this._structured_clone.status = this.status;
+ this._structured_clone.message = this.message;
+ this._structured_clone.stack = this.stack;
+ this._structured_clone.index = this.index;
+ return this._structured_clone;
+ };
+
+ Test.prototype.step = function(func, this_obj)
+ {
+ if (this.phase > this.phases.STARTED) {
+ return;
+ }
+ this.phase = this.phases.STARTED;
+ //If we don't get a result before the harness times out that will be a test timout
+ this.set_status(this.TIMEOUT, "Test timed out");
+
+ tests.started = true;
+ tests.notify_test_state(this);
+
+ if (this.timeout_id === null) {
+ this.set_timeout();
+ }
+
+ this.steps.push(func);
+
+ if (arguments.length === 1) {
+ this_obj = this;
+ }
+
+ try {
+ return func.apply(this_obj, Array.prototype.slice.call(arguments, 2));
+ } catch (e) {
+ if (this.phase >= this.phases.HAS_RESULT) {
+ return;
+ }
+ var message = String((typeof e === "object" && e !== null) ? e.message : e);
+ var stack = e.stack ? e.stack : null;
+
+ this.set_status(this.FAIL, message, stack);
+ this.phase = this.phases.HAS_RESULT;
+ this.done();
+ }
+ };
+
+ Test.prototype.step_func = function(func, this_obj)
+ {
+ var test_this = this;
+
+ if (arguments.length === 1) {
+ this_obj = test_this;
+ }
+
+ return function()
+ {
+ return test_this.step.apply(test_this, [func, this_obj].concat(
+ Array.prototype.slice.call(arguments)));
+ };
+ };
+
+ Test.prototype.step_func_done = function(func, this_obj)
+ {
+ var test_this = this;
+
+ if (arguments.length === 1) {
+ this_obj = test_this;
+ }
+
+ return function()
+ {
+ if (func) {
+ test_this.step.apply(test_this, [func, this_obj].concat(
+ Array.prototype.slice.call(arguments)));
+ }
+ test_this.done();
+ };
+ };
+
+ Test.prototype.unreached_func = function(description)
+ {
+ return this.step_func(function() {
+ assert_unreached(description);
+ });
+ };
+
+ Test.prototype.step_timeout = function(f, timeout) {
+ var test_this = this;
+ var args = Array.prototype.slice.call(arguments, 2);
+ return setTimeout(this.step_func(function() {
+ return f.apply(test_this, args);
+ }, timeout * tests.timeout_multiplier));
+ }
+
+ Test.prototype.add_cleanup = function(callback) {
+ this.cleanup_callbacks.push(callback);
+ };
+
+ Test.prototype.force_timeout = function() {
+ this.set_status(this.TIMEOUT);
+ this.phase = this.phases.HAS_RESULT;
+ };
+
+ Test.prototype.set_timeout = function()
+ {
+ if (this.timeout_length !== null) {
+ var this_obj = this;
+ this.timeout_id = setTimeout(function()
+ {
+ this_obj.timeout();
+ }, this.timeout_length);
+ }
+ };
+
+ Test.prototype.set_status = function(status, message, stack)
+ {
+ this.status = status;
+ this.message = message;
+ this.stack = stack ? stack : null;
+ };
+
+ Test.prototype.timeout = function()
+ {
+ this.timeout_id = null;
+ this.set_status(this.TIMEOUT, "Test timed out");
+ this.phase = this.phases.HAS_RESULT;
+ this.done();
+ };
+
+ Test.prototype.done = function()
+ {
+ if (this.phase == this.phases.COMPLETE) {
+ return;
+ }
+
+ if (this.phase <= this.phases.STARTED) {
+ this.set_status(this.PASS, null);
+ }
+
+ this.phase = this.phases.COMPLETE;
+
+ clearTimeout(this.timeout_id);
+ tests.result(this);
+ this.cleanup();
+ };
+
+ Test.prototype.cleanup = function() {
+ forEach(this.cleanup_callbacks,
+ function(cleanup_callback) {
+ cleanup_callback();
+ });
+ };
+
+ /*
+ * A RemoteTest object mirrors a Test object on a remote worker. The
+ * associated RemoteWorker updates the RemoteTest object in response to
+ * received events. In turn, the RemoteTest object replicates these events
+ * on the local document. This allows listeners (test result reporting
+ * etc..) to transparently handle local and remote events.
+ */
+ function RemoteTest(clone) {
+ var this_obj = this;
+ Object.keys(clone).forEach(
+ function(key) {
+ this_obj[key] = clone[key];
+ });
+ this.index = null;
+ this.phase = this.phases.INITIAL;
+ this.update_state_from(clone);
+ tests.push(this);
+ }
+
+ RemoteTest.prototype.structured_clone = function() {
+ var clone = {};
+ Object.keys(this).forEach(
+ (function(key) {
+ if (typeof(this[key]) === "object") {
+ clone[key] = merge({}, this[key]);
+ } else {
+ clone[key] = this[key];
+ }
+ }).bind(this));
+ clone.phases = merge({}, this.phases);
+ return clone;
+ };
+
+ RemoteTest.prototype.cleanup = function() {};
+ RemoteTest.prototype.phases = Test.prototype.phases;
+ RemoteTest.prototype.update_state_from = function(clone) {
+ this.status = clone.status;
+ this.message = clone.message;
+ this.stack = clone.stack;
+ if (this.phase === this.phases.INITIAL) {
+ this.phase = this.phases.STARTED;
+ }
+ };
+ RemoteTest.prototype.done = function() {
+ this.phase = this.phases.COMPLETE;
+ }
+
+ /*
+ * A RemoteWorker listens for test events from a worker. These events are
+ * then used to construct and maintain RemoteTest objects that mirror the
+ * tests running on the remote worker.
+ */
+ function RemoteWorker(worker) {
+ this.running = true;
+ this.tests = new Array();
+
+ var this_obj = this;
+ worker.onerror = function(error) { this_obj.worker_error(error); };
+
+ var message_port;
+
+ if (is_service_worker(worker)) {
+ if (window.MessageChannel) {
+ // The ServiceWorker's implicit MessagePort is currently not
+ // reliably accessible from the ServiceWorkerGlobalScope due to
+ // Blink setting MessageEvent.source to null for messages sent
+ // via ServiceWorker.postMessage(). Until that's resolved,
+ // create an explicit MessageChannel and pass one end to the
+ // worker.
+ var message_channel = new MessageChannel();
+ message_port = message_channel.port1;
+ message_port.start();
+ worker.postMessage({type: "connect"}, [message_channel.port2]);
+ } else {
+ // If MessageChannel is not available, then try the
+ // ServiceWorker.postMessage() approach using MessageEvent.source
+ // on the other end.
+ message_port = navigator.serviceWorker;
+ worker.postMessage({type: "connect"});
+ }
+ } else if (is_shared_worker(worker)) {
+ message_port = worker.port;
+ } else {
+ message_port = worker;
+ }
+
+ // Keeping a reference to the worker until worker_done() is seen
+ // prevents the Worker object and its MessageChannel from going away
+ // before all the messages are dispatched.
+ this.worker = worker;
+
+ message_port.onmessage =
+ function(message) {
+ if (this_obj.running && (message.data.type in this_obj.message_handlers)) {
+ this_obj.message_handlers[message.data.type].call(this_obj, message.data);
+ }
+ };
+ }
+
+ RemoteWorker.prototype.worker_error = function(error) {
+ var message = error.message || String(error);
+ var filename = (error.filename ? " " + error.filename: "");
+ // FIXME: Display worker error states separately from main document
+ // error state.
+ this.worker_done({
+ status: {
+ status: tests.status.ERROR,
+ message: "Error in worker" + filename + ": " + message,
+ stack: error.stack
+ }
+ });
+ error.preventDefault();
+ };
+
+ RemoteWorker.prototype.test_state = function(data) {
+ var remote_test = this.tests[data.test.index];
+ if (!remote_test) {
+ remote_test = new RemoteTest(data.test);
+ this.tests[data.test.index] = remote_test;
+ }
+ remote_test.update_state_from(data.test);
+ tests.notify_test_state(remote_test);
+ };
+
+ RemoteWorker.prototype.test_done = function(data) {
+ var remote_test = this.tests[data.test.index];
+ remote_test.update_state_from(data.test);
+ remote_test.done();
+ tests.result(remote_test);
+ };
+
+ RemoteWorker.prototype.worker_done = function(data) {
+ if (tests.status.status === null &&
+ data.status.status !== data.status.OK) {
+ tests.status.status = data.status.status;
+ tests.status.message = data.status.message;
+ tests.status.stack = data.status.stack;
+ }
+ this.running = false;
+ this.worker = null;
+ if (tests.all_done()) {
+ tests.complete();
+ }
+ };
+
+ RemoteWorker.prototype.message_handlers = {
+ test_state: RemoteWorker.prototype.test_state,
+ result: RemoteWorker.prototype.test_done,
+ complete: RemoteWorker.prototype.worker_done
+ };
+
+ /*
+ * Harness
+ */
+
+ function TestsStatus()
+ {
+ this.status = null;
+ this.message = null;
+ this.stack = null;
+ }
+
+ TestsStatus.statuses = {
+ OK:0,
+ ERROR:1,
+ TIMEOUT:2
+ };
+
+ TestsStatus.prototype = merge({}, TestsStatus.statuses);
+
+ TestsStatus.prototype.structured_clone = function()
+ {
+ if (!this._structured_clone) {
+ var msg = this.message;
+ msg = msg ? String(msg) : msg;
+ this._structured_clone = merge({
+ status:this.status,
+ message:msg,
+ stack:this.stack
+ }, TestsStatus.statuses);
+ }
+ return this._structured_clone;
+ };
+
+ function Tests()
+ {
+ this.tests = [];
+ this.num_pending = 0;
+
+ this.phases = {
+ INITIAL:0,
+ SETUP:1,
+ HAVE_TESTS:2,
+ HAVE_RESULTS:3,
+ COMPLETE:4
+ };
+ this.phase = this.phases.INITIAL;
+
+ this.properties = {};
+
+ this.wait_for_finish = false;
+ this.processing_callbacks = false;
+
+ this.allow_uncaught_exception = false;
+
+ this.file_is_test = false;
+
+ this.timeout_multiplier = 1;
+ this.timeout_length = test_environment.test_timeout();
+ this.timeout_id = null;
+
+ this.start_callbacks = [];
+ this.test_state_callbacks = [];
+ this.test_done_callbacks = [];
+ this.all_done_callbacks = [];
+
+ this.pending_workers = [];
+
+ this.status = new TestsStatus();
+
+ var this_obj = this;
+
+ test_environment.add_on_loaded_callback(function() {
+ if (this_obj.all_done()) {
+ this_obj.complete();
+ }
+ });
+
+ this.set_timeout();
+ }
+
+ Tests.prototype.setup = function(func, properties)
+ {
+ if (this.phase >= this.phases.HAVE_RESULTS) {
+ return;
+ }
+
+ if (this.phase < this.phases.SETUP) {
+ this.phase = this.phases.SETUP;
+ }
+
+ this.properties = properties;
+
+ for (var p in properties) {
+ if (properties.hasOwnProperty(p)) {
+ var value = properties[p];
+ if (p == "allow_uncaught_exception") {
+ this.allow_uncaught_exception = value;
+ } else if (p == "explicit_done" && value) {
+ this.wait_for_finish = true;
+ } else if (p == "explicit_timeout" && value) {
+ this.timeout_length = null;
+ if (this.timeout_id)
+ {
+ clearTimeout(this.timeout_id);
+ }
+ } else if (p == "timeout_multiplier") {
+ this.timeout_multiplier = value;
+ }
+ }
+ }
+
+ if (func) {
+ try {
+ func();
+ } catch (e) {
+ this.status.status = this.status.ERROR;
+ this.status.message = String(e);
+ this.status.stack = e.stack ? e.stack : null;
+ }
+ }
+ this.set_timeout();
+ };
+
+ Tests.prototype.set_file_is_test = function() {
+ if (this.tests.length > 0) {
+ throw new Error("Tried to set file as test after creating a test");
+ }
+ this.wait_for_finish = true;
+ this.file_is_test = true;
+ // Create the test, which will add it to the list of tests
+ async_test();
+ };
+
+ Tests.prototype.set_timeout = function() {
+ var this_obj = this;
+ clearTimeout(this.timeout_id);
+ if (this.timeout_length !== null) {
+ this.timeout_id = setTimeout(function() {
+ this_obj.timeout();
+ }, this.timeout_length);
+ }
+ };
+
+ Tests.prototype.timeout = function() {
+ if (this.status.status === null) {
+ this.status.status = this.status.TIMEOUT;
+ }
+ this.complete();
+ };
+
+ Tests.prototype.end_wait = function()
+ {
+ this.wait_for_finish = false;
+ if (this.all_done()) {
+ this.complete();
+ }
+ };
+
+ Tests.prototype.push = function(test)
+ {
+ if (this.phase < this.phases.HAVE_TESTS) {
+ this.start();
+ }
+ this.num_pending++;
+ test.index = this.tests.push(test);
+ this.notify_test_state(test);
+ };
+
+ Tests.prototype.notify_test_state = function(test) {
+ var this_obj = this;
+ forEach(this.test_state_callbacks,
+ function(callback) {
+ callback(test, this_obj);
+ });
+ };
+
+ Tests.prototype.all_done = function() {
+ return (this.tests.length > 0 && test_environment.all_loaded &&
+ this.num_pending === 0 && !this.wait_for_finish &&
+ !this.processing_callbacks &&
+ !this.pending_workers.some(function(w) { return w.running; }));
+ };
+
+ Tests.prototype.start = function() {
+ this.phase = this.phases.HAVE_TESTS;
+ this.notify_start();
+ };
+
+ Tests.prototype.notify_start = function() {
+ var this_obj = this;
+ forEach (this.start_callbacks,
+ function(callback)
+ {
+ callback(this_obj.properties);
+ });
+ };
+
+ Tests.prototype.result = function(test)
+ {
+ if (this.phase > this.phases.HAVE_RESULTS) {
+ return;
+ }
+ this.phase = this.phases.HAVE_RESULTS;
+ this.num_pending--;
+ this.notify_result(test);
+ };
+
+ Tests.prototype.notify_result = function(test) {
+ var this_obj = this;
+ this.processing_callbacks = true;
+ forEach(this.test_done_callbacks,
+ function(callback)
+ {
+ callback(test, this_obj);
+ });
+ this.processing_callbacks = false;
+ if (this_obj.all_done()) {
+ this_obj.complete();
+ }
+ };
+
+ Tests.prototype.complete = function() {
+ if (this.phase === this.phases.COMPLETE) {
+ return;
+ }
+ this.phase = this.phases.COMPLETE;
+ var this_obj = this;
+ this.tests.forEach(
+ function(x)
+ {
+ if (x.phase < x.phases.COMPLETE) {
+ this_obj.notify_result(x);
+ x.cleanup();
+ x.phase = x.phases.COMPLETE;
+ }
+ }
+ );
+ this.notify_complete();
+ };
+
+ Tests.prototype.notify_complete = function() {
+ var this_obj = this;
+ if (this.status.status === null) {
+ this.status.status = this.status.OK;
+ }
+
+ forEach (this.all_done_callbacks,
+ function(callback)
+ {
+ callback(this_obj.tests, this_obj.status);
+ });
+ };
+
+ Tests.prototype.fetch_tests_from_worker = function(worker) {
+ if (this.phase >= this.phases.COMPLETE) {
+ return;
+ }
+
+ this.pending_workers.push(new RemoteWorker(worker));
+ };
+
+ function fetch_tests_from_worker(port) {
+ tests.fetch_tests_from_worker(port);
+ }
+ expose(fetch_tests_from_worker, 'fetch_tests_from_worker');
+
+ function timeout() {
+ if (tests.timeout_length === null) {
+ tests.timeout();
+ }
+ }
+ expose(timeout, 'timeout');
+
+ function add_start_callback(callback) {
+ tests.start_callbacks.push(callback);
+ }
+
+ function add_test_state_callback(callback) {
+ tests.test_state_callbacks.push(callback);
+ }
+
+ function add_result_callback(callback) {
+ tests.test_done_callbacks.push(callback);
+ }
+
+ function add_completion_callback(callback) {
+ tests.all_done_callbacks.push(callback);
+ }
+
+ expose(add_start_callback, 'add_start_callback');
+ expose(add_test_state_callback, 'add_test_state_callback');
+ expose(add_result_callback, 'add_result_callback');
+ expose(add_completion_callback, 'add_completion_callback');
+
+ function remove(array, item) {
+ var index = array.indexOf(item);
+ if (index > -1) {
+ array.splice(index, 1);
+ }
+ }
+
+ function remove_start_callback(callback) {
+ remove(tests.start_callbacks, callback);
+ }
+
+ function remove_test_state_callback(callback) {
+ remove(tests.test_state_callbacks, callback);
+ }
+
+ function remove_result_callback(callback) {
+ remove(tests.test_done_callbacks, callback);
+ }
+
+ function remove_completion_callback(callback) {
+ remove(tests.all_done_callbacks, callback);
+ }
+
+ /*
+ * Output listener
+ */
+
+ function Output() {
+ this.output_document = document;
+ this.output_node = null;
+ this.enabled = settings.output;
+ this.phase = this.INITIAL;
+ }
+
+ Output.prototype.INITIAL = 0;
+ Output.prototype.STARTED = 1;
+ Output.prototype.HAVE_RESULTS = 2;
+ Output.prototype.COMPLETE = 3;
+
+ Output.prototype.setup = function(properties) {
+ if (this.phase > this.INITIAL) {
+ return;
+ }
+
+ //If output is disabled in testharnessreport.js the test shouldn't be
+ //able to override that
+ this.enabled = this.enabled && (properties.hasOwnProperty("output") ?
+ properties.output : settings.output);
+ };
+
+ Output.prototype.init = function(properties) {
+ if (this.phase >= this.STARTED) {
+ return;
+ }
+ if (properties.output_document) {
+ this.output_document = properties.output_document;
+ } else {
+ this.output_document = document;
+ }
+ this.phase = this.STARTED;
+ };
+
+ Output.prototype.resolve_log = function() {
+ var output_document;
+ if (typeof this.output_document === "function") {
+ output_document = this.output_document.apply(undefined);
+ } else {
+ output_document = this.output_document;
+ }
+ if (!output_document) {
+ return;
+ }
+ var node = output_document.getElementById("log");
+ if (!node) {
+ if (!document.body || document.readyState == "loading") {
+ return;
+ }
+ node = output_document.createElement("div");
+ node.id = "log";
+ output_document.body.appendChild(node);
+ }
+ this.output_document = output_document;
+ this.output_node = node;
+ };
+
+ Output.prototype.show_status = function() {
+ if (this.phase < this.STARTED) {
+ this.init();
+ }
+ if (!this.enabled) {
+ return;
+ }
+ if (this.phase < this.HAVE_RESULTS) {
+ this.resolve_log();
+ this.phase = this.HAVE_RESULTS;
+ }
+ var done_count = tests.tests.length - tests.num_pending;
+ if (this.output_node) {
+ if (done_count < 100 ||
+ (done_count < 1000 && done_count % 100 === 0) ||
+ done_count % 1000 === 0) {
+ this.output_node.textContent = "Running, " +
+ done_count + " complete, " +
+ tests.num_pending + " remain";
+ }
+ }
+ };
+
+ Output.prototype.show_results = function (tests, harness_status) {
+ if (this.phase >= this.COMPLETE) {
+ return;
+ }
+ if (!this.enabled) {
+ return;
+ }
+ if (!this.output_node) {
+ this.resolve_log();
+ }
+ this.phase = this.COMPLETE;
+
+ var log = this.output_node;
+ if (!log) {
+ return;
+ }
+ var output_document = this.output_document;
+
+ while (log.lastChild) {
+ log.removeChild(log.lastChild);
+ }
+
+ var harness_url = get_harness_url();
+ if (harness_url !== null) {
+ var stylesheet = output_document.createElementNS(xhtml_ns, "link");
+ stylesheet.setAttribute("rel", "stylesheet");
+ stylesheet.setAttribute("href", harness_url + "testharness.css");
+ var heads = output_document.getElementsByTagName("head");
+ if (heads.length) {
+ heads[0].appendChild(stylesheet);
+ }
+ }
+
+ var status_text_harness = {};
+ status_text_harness[harness_status.OK] = "OK";
+ status_text_harness[harness_status.ERROR] = "Error";
+ status_text_harness[harness_status.TIMEOUT] = "Timeout";
+
+ var status_text = {};
+ status_text[Test.prototype.PASS] = "Pass";
+ status_text[Test.prototype.FAIL] = "Fail";
+ status_text[Test.prototype.TIMEOUT] = "Timeout";
+ status_text[Test.prototype.NOTRUN] = "Not Run";
+
+ var status_number = {};
+ forEach(tests,
+ function(test) {
+ var status = status_text[test.status];
+ if (status_number.hasOwnProperty(status)) {
+ status_number[status] += 1;
+ } else {
+ status_number[status] = 1;
+ }
+ });
+
+ function status_class(status)
+ {
+ return status.replace(/\s/g, '').toLowerCase();
+ }
+
+ var summary_template = ["section", {"id":"summary"},
+ ["h2", {}, "Summary"],
+ function()
+ {
+
+ var status = status_text_harness[harness_status.status];
+ var rv = [["section", {},
+ ["p", {},
+ "Harness status: ",
+ ["span", {"class":status_class(status)},
+ status
+ ],
+ ]
+ ]];
+
+ if (harness_status.status === harness_status.ERROR) {
+ rv[0].push(["pre", {}, harness_status.message]);
+ if (harness_status.stack) {
+ rv[0].push(["pre", {}, harness_status.stack]);
+ }
+ }
+ return rv;
+ },
+ ["p", {}, "Found ${num_tests} tests"],
+ function() {
+ var rv = [["div", {}]];
+ var i = 0;
+ while (status_text.hasOwnProperty(i)) {
+ if (status_number.hasOwnProperty(status_text[i])) {
+ var status = status_text[i];
+ rv[0].push(["div", {"class":status_class(status)},
+ ["label", {},
+ ["input", {type:"checkbox", checked:"checked"}],
+ status_number[status] + " " + status]]);
+ }
+ i++;
+ }
+ return rv;
+ },
+ ];
+
+ log.appendChild(render(summary_template, {num_tests:tests.length}, output_document));
+
+ forEach(output_document.querySelectorAll("section#summary label"),
+ function(element)
+ {
+ on_event(element, "click",
+ function(e)
+ {
+ if (output_document.getElementById("results") === null) {
+ e.preventDefault();
+ return;
+ }
+ var result_class = element.parentNode.getAttribute("class");
+ var style_element = output_document.querySelector("style#hide-" + result_class);
+ var input_element = element.querySelector("input");
+ if (!style_element && !input_element.checked) {
+ style_element = output_document.createElementNS(xhtml_ns, "style");
+ style_element.id = "hide-" + result_class;
+ style_element.textContent = "table#results > tbody > tr."+result_class+"{display:none}";
+ output_document.body.appendChild(style_element);
+ } else if (style_element && input_element.checked) {
+ style_element.parentNode.removeChild(style_element);
+ }
+ });
+ });
+
+ // This use of innerHTML plus manual escaping is not recommended in
+ // general, but is necessary here for performance. Using textContent
+ // on each individual <td> adds tens of seconds of execution time for
+ // large test suites (tens of thousands of tests).
+ function escape_html(s)
+ {
+ return s.replace(/\&/g, "&amp;")
+ .replace(/</g, "&lt;")
+ .replace(/"/g, "&quot;")
+ .replace(/'/g, "&#39;");
+ }
+
+ function has_assertions()
+ {
+ for (var i = 0; i < tests.length; i++) {
+ if (tests[i].properties.hasOwnProperty("assert")) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ function get_assertion(test)
+ {
+ if (test.properties.hasOwnProperty("assert")) {
+ if (Array.isArray(test.properties.assert)) {
+ return test.properties.assert.join(' ');
+ }
+ return test.properties.assert;
+ }
+ return '';
+ }
+
+ log.appendChild(document.createElementNS(xhtml_ns, "section"));
+ var assertions = has_assertions();
+ var html = "<h2>Details</h2><table id='results' " + (assertions ? "class='assertions'" : "" ) + ">" +
+ "<thead><tr><th>Result</th><th>Test Name</th>" +
+ (assertions ? "<th>Assertion</th>" : "") +
+ "<th>Message</th></tr></thead>" +
+ "<tbody>";
+ for (var i = 0; i < tests.length; i++) {
+ html += '<tr class="' +
+ escape_html(status_class(status_text[tests[i].status])) +
+ '"><td>' +
+ escape_html(status_text[tests[i].status]) +
+ "</td><td>" +
+ escape_html(tests[i].name) +
+ "</td><td>" +
+ (assertions ? escape_html(get_assertion(tests[i])) + "</td><td>" : "") +
+ escape_html(tests[i].message ? tests[i].message : " ") +
+ (tests[i].stack ? "<pre>" +
+ escape_html(tests[i].stack) +
+ "</pre>": "") +
+ "</td></tr>";
+ }
+ html += "</tbody></table>";
+ try {
+ log.lastChild.innerHTML = html;
+ } catch (e) {
+ log.appendChild(document.createElementNS(xhtml_ns, "p"))
+ .textContent = "Setting innerHTML for the log threw an exception.";
+ log.appendChild(document.createElementNS(xhtml_ns, "pre"))
+ .textContent = html;
+ }
+ };
+
+ /*
+ * Template code
+ *
+ * A template is just a javascript structure. An element is represented as:
+ *
+ * [tag_name, {attr_name:attr_value}, child1, child2]
+ *
+ * the children can either be strings (which act like text nodes), other templates or
+ * functions (see below)
+ *
+ * A text node is represented as
+ *
+ * ["{text}", value]
+ *
+ * String values have a simple substitution syntax; ${foo} represents a variable foo.
+ *
+ * It is possible to embed logic in templates by using a function in a place where a
+ * node would usually go. The function must either return part of a template or null.
+ *
+ * In cases where a set of nodes are required as output rather than a single node
+ * with children it is possible to just use a list
+ * [node1, node2, node3]
+ *
+ * Usage:
+ *
+ * render(template, substitutions) - take a template and an object mapping
+ * variable names to parameters and return either a DOM node or a list of DOM nodes
+ *
+ * substitute(template, substitutions) - take a template and variable mapping object,
+ * make the variable substitutions and return the substituted template
+ *
+ */
+
+ function is_single_node(template)
+ {
+ return typeof template[0] === "string";
+ }
+
+ function substitute(template, substitutions)
+ {
+ if (typeof template === "function") {
+ var replacement = template(substitutions);
+ if (!replacement) {
+ return null;
+ }
+
+ return substitute(replacement, substitutions);
+ }
+
+ if (is_single_node(template)) {
+ return substitute_single(template, substitutions);
+ }
+
+ return filter(map(template, function(x) {
+ return substitute(x, substitutions);
+ }), function(x) {return x !== null;});
+ }
+
+ function substitute_single(template, substitutions)
+ {
+ var substitution_re = /\$\{([^ }]*)\}/g;
+
+ function do_substitution(input) {
+ var components = input.split(substitution_re);
+ var rv = [];
+ for (var i = 0; i < components.length; i += 2) {
+ rv.push(components[i]);
+ if (components[i + 1]) {
+ rv.push(String(substitutions[components[i + 1]]));
+ }
+ }
+ return rv;
+ }
+
+ function substitute_attrs(attrs, rv)
+ {
+ rv[1] = {};
+ for (var name in template[1]) {
+ if (attrs.hasOwnProperty(name)) {
+ var new_name = do_substitution(name).join("");
+ var new_value = do_substitution(attrs[name]).join("");
+ rv[1][new_name] = new_value;
+ }
+ }
+ }
+
+ function substitute_children(children, rv)
+ {
+ for (var i = 0; i < children.length; i++) {
+ if (children[i] instanceof Object) {
+ var replacement = substitute(children[i], substitutions);
+ if (replacement !== null) {
+ if (is_single_node(replacement)) {
+ rv.push(replacement);
+ } else {
+ extend(rv, replacement);
+ }
+ }
+ } else {
+ extend(rv, do_substitution(String(children[i])));
+ }
+ }
+ return rv;
+ }
+
+ var rv = [];
+ rv.push(do_substitution(String(template[0])).join(""));
+
+ if (template[0] === "{text}") {
+ substitute_children(template.slice(1), rv);
+ } else {
+ substitute_attrs(template[1], rv);
+ substitute_children(template.slice(2), rv);
+ }
+
+ return rv;
+ }
+
+ function make_dom_single(template, doc)
+ {
+ var output_document = doc || document;
+ var element;
+ if (template[0] === "{text}") {
+ element = output_document.createTextNode("");
+ for (var i = 1; i < template.length; i++) {
+ element.data += template[i];
+ }
+ } else {
+ element = output_document.createElementNS(xhtml_ns, template[0]);
+ for (var name in template[1]) {
+ if (template[1].hasOwnProperty(name)) {
+ element.setAttribute(name, template[1][name]);
+ }
+ }
+ for (var i = 2; i < template.length; i++) {
+ if (template[i] instanceof Object) {
+ var sub_element = make_dom(template[i]);
+ element.appendChild(sub_element);
+ } else {
+ var text_node = output_document.createTextNode(template[i]);
+ element.appendChild(text_node);
+ }
+ }
+ }
+
+ return element;
+ }
+
+ function make_dom(template, substitutions, output_document)
+ {
+ if (is_single_node(template)) {
+ return make_dom_single(template, output_document);
+ }
+
+ return map(template, function(x) {
+ return make_dom_single(x, output_document);
+ });
+ }
+
+ function render(template, substitutions, output_document)
+ {
+ return make_dom(substitute(template, substitutions), output_document);
+ }
+
+ /*
+ * Utility funcions
+ */
+ function assert(expected_true, function_name, description, error, substitutions)
+ {
+ if (tests.tests.length === 0) {
+ tests.set_file_is_test();
+ }
+ if (expected_true !== true) {
+ var msg = make_message(function_name, description,
+ error, substitutions);
+ throw new AssertionError(msg);
+ }
+ }
+
+ function AssertionError(message)
+ {
+ this.message = message;
+ this.stack = this.get_stack();
+ }
+
+ AssertionError.prototype = Object.create(Error.prototype);
+
+ AssertionError.prototype.get_stack = function() {
+ var stack = new Error().stack;
+ // IE11 does not initialize 'Error.stack' until the object is thrown.
+ if (!stack) {
+ try {
+ throw new Error();
+ } catch (e) {
+ stack = e.stack;
+ }
+ }
+
+ var lines = stack.split("\n");
+
+ // Create a pattern to match stack frames originating within testharness.js. These include the
+ // script URL, followed by the line/col (e.g., '/resources/testharness.js:120:21').
+ var re = new RegExp((get_script_url() || "\\btestharness.js") + ":\\d+:\\d+");
+
+ // Some browsers include a preamble that specifies the type of the error object. Skip this by
+ // advancing until we find the first stack frame originating from testharness.js.
+ var i = 0;
+ while (!re.test(lines[i]) && i < lines.length) {
+ i++;
+ }
+
+ // Then skip the top frames originating from testharness.js to begin the stack at the test code.
+ while (re.test(lines[i]) && i < lines.length) {
+ i++;
+ }
+
+ // Paranoid check that we didn't skip all frames. If so, return the original stack unmodified.
+ if (i >= lines.length) {
+ return stack;
+ }
+
+ return lines.slice(i).join("\n");
+ }
+
+ function make_message(function_name, description, error, substitutions)
+ {
+ for (var p in substitutions) {
+ if (substitutions.hasOwnProperty(p)) {
+ substitutions[p] = format_value(substitutions[p]);
+ }
+ }
+ var node_form = substitute(["{text}", "${function_name}: ${description}" + error],
+ merge({function_name:function_name,
+ description:(description?description + " ":"")},
+ substitutions));
+ return node_form.slice(1).join("");
+ }
+
+ function filter(array, callable, thisObj) {
+ var rv = [];
+ for (var i = 0; i < array.length; i++) {
+ if (array.hasOwnProperty(i)) {
+ var pass = callable.call(thisObj, array[i], i, array);
+ if (pass) {
+ rv.push(array[i]);
+ }
+ }
+ }
+ return rv;
+ }
+
+ function map(array, callable, thisObj)
+ {
+ var rv = [];
+ rv.length = array.length;
+ for (var i = 0; i < array.length; i++) {
+ if (array.hasOwnProperty(i)) {
+ rv[i] = callable.call(thisObj, array[i], i, array);
+ }
+ }
+ return rv;
+ }
+
+ function extend(array, items)
+ {
+ Array.prototype.push.apply(array, items);
+ }
+
+ function forEach(array, callback, thisObj)
+ {
+ for (var i = 0; i < array.length; i++) {
+ if (array.hasOwnProperty(i)) {
+ callback.call(thisObj, array[i], i, array);
+ }
+ }
+ }
+
+ function merge(a,b)
+ {
+ var rv = {};
+ var p;
+ for (p in a) {
+ rv[p] = a[p];
+ }
+ for (p in b) {
+ rv[p] = b[p];
+ }
+ return rv;
+ }
+
+ function expose(object, name)
+ {
+ var components = name.split(".");
+ var target = test_environment.global_scope();
+ for (var i = 0; i < components.length - 1; i++) {
+ if (!(components[i] in target)) {
+ target[components[i]] = {};
+ }
+ target = target[components[i]];
+ }
+ target[components[components.length - 1]] = object;
+ }
+
+ function is_same_origin(w) {
+ try {
+ 'random_prop' in w;
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+
+ /** Returns the 'src' URL of the first <script> tag in the page to include the file 'testharness.js'. */
+ function get_script_url()
+ {
+ if (!('document' in self)) {
+ return undefined;
+ }
+
+ var scripts = document.getElementsByTagName("script");
+ for (var i = 0; i < scripts.length; i++) {
+ var src;
+ if (scripts[i].src) {
+ src = scripts[i].src;
+ } else if (scripts[i].href) {
+ //SVG case
+ src = scripts[i].href.baseVal;
+ }
+
+ var matches = src && src.match(/^(.*\/|)testharness\.js$/);
+ if (matches) {
+ return src;
+ }
+ }
+ return undefined;
+ }
+
+ /** Returns the URL path at which the files for testharness.js are assumed to reside (e.g., '/resources/').
+ The path is derived from inspecting the 'src' of the <script> tag that included 'testharness.js'. */
+ function get_harness_url()
+ {
+ var script_url = get_script_url();
+
+ // Exclude the 'testharness.js' file from the returned path, but '+ 1' to include the trailing slash.
+ return script_url ? script_url.slice(0, script_url.lastIndexOf('/') + 1) : undefined;
+ }
+
+ function supports_post_message(w)
+ {
+ var supports;
+ var type;
+ // Given IE implements postMessage across nested iframes but not across
+ // windows or tabs, you can't infer cross-origin communication from the presence
+ // of postMessage on the current window object only.
+ //
+ // Touching the postMessage prop on a window can throw if the window is
+ // not from the same origin AND post message is not supported in that
+ // browser. So just doing an existence test here won't do, you also need
+ // to wrap it in a try..cacth block.
+ try {
+ type = typeof w.postMessage;
+ if (type === "function") {
+ supports = true;
+ }
+
+ // IE8 supports postMessage, but implements it as a host object which
+ // returns "object" as its `typeof`.
+ else if (type === "object") {
+ supports = true;
+ }
+
+ // This is the case where postMessage isn't supported AND accessing a
+ // window property across origins does NOT throw (e.g. old Safari browser).
+ else {
+ supports = false;
+ }
+ } catch (e) {
+ // This is the case where postMessage isn't supported AND accessing a
+ // window property across origins throws (e.g. old Firefox browser).
+ supports = false;
+ }
+ return supports;
+ }
+
+ /**
+ * Setup globals
+ */
+
+ var tests = new Tests();
+
+ addEventListener("error", function(e) {
+ if (tests.file_is_test) {
+ var test = tests.tests[0];
+ if (test.phase >= test.phases.HAS_RESULT) {
+ return;
+ }
+ test.set_status(test.FAIL, e.message, e.stack);
+ test.phase = test.phases.HAS_RESULT;
+ test.done();
+ done();
+ } else if (!tests.allow_uncaught_exception) {
+ tests.status.status = tests.status.ERROR;
+ tests.status.message = e.message;
+ tests.status.stack = e.stack;
+ }
+ });
+
+ test_environment.on_tests_ready();
+
+})();
+// vim: set expandtab shiftwidth=4 tabstop=4:
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsresourcestestharnessreportjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/resources/testharnessreport.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/resources/testharnessreport.js         (rev 0)
+++ trunk/LayoutTests/http/tests/resources/testharnessreport.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,87 @@
</span><ins>+/*
+ * THIS FILE INTENTIONALLY LEFT BLANK
+ *
+ * More specifically, this file is intended for vendors to implement
+ * code needed to integrate testharness.js tests with their own test systems.
+ *
+ * Typically such integration will attach callbacks when each test is
+ * has run, using add_result_callback(callback(test)), or when the whole test file has
+ * completed, using add_completion_callback(callback(tests, harness_status)).
+ *
+ * For more documentation about the callback functions and the
+ * parameters they are called with see testharness.js
+ */
+
+// Setup for WebKit JavaScript tests
+if (self.testRunner) {
+ testRunner.dumpAsText();
+ testRunner.waitUntilDone();
+}
+
+// Function used to convert the test status code into
+// the corresponding string
+function convertResult(resultStatus){
+        if(resultStatus == 0)
+                return("PASS");
+        else if(resultStatus == 1)
+                return("FAIL");
+        else if(resultStatus == 2)
+                return("TIMEOUT");
+        else
+                return("NOTRUN");
+}
+
+/* Disable the default output of testharness.js. The default output formats
+* test results into an HTML table. When that table is dumped as text, no
+* spacing between cells is preserved, and it is therefore not readable. By
+* setting output to false, the HTML table will not be created
+*/
+setup({"output":false});
+
+/* Using a callback function, test results will be added to the page in a
+* manner that allows dumpAsText to produce readable test results
+*/
+add_completion_callback(function (tests, harness_status){
+        
+        // Create element to hold results
+        var results = document.createElement("pre");
+        
+        // Declare result string
+        var resultStr = "\n";
+        
+        // Check harness_status. If it is not 0, tests did not
+        // execute correctly, output the error code and message
+        if(harness_status.status != 0){
+                resultStr += "Harness Error. harness_status.status = " +
+                                         harness_status.status +
+                                         " , harness_status.message = " +
+                                         harness_status.message;
+        }
+        else {
+                // Iterate through tests array and build string that contains
+                // results for all tests
+                for(var i=0; i<tests.length; i++){                                
+                        var message = (tests[i].message != null) ? tests[i].message : "";
+                        if (tests[i].status == 1 && !tests[i].dumpStack) {
+                                // Remove stack for failed tests for proper string comparison without file paths.
+                                // For a test to dump the stack set its dumpStack attribute to true.
+                                var stackIndex = message.indexOf("(stack:");
+                                if (stackIndex > 0) {
+                                        message = message.substr(0, stackIndex);
+                                }
+                        }
+                        resultStr += convertResult(tests[i].status) + " " +
+                                                ( (tests[i].name!=null) ? tests[i].name : "" ) + " " +
+                                                message +
+                                                "\n";
+                }                        
+        }
+
+        results.innerText = resultStr;
+
+        // Add results element to document
+        document.body.appendChild(results);
+
+         if (self.testRunner)
+                 testRunner.notifyDone();
+});
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomcollectionsHTMLCollectionemptynameexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/collections/HTMLCollection-empty-name-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/collections/HTMLCollection-empty-name-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/collections/HTMLCollection-empty-name-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+
+PASS Empty string as a name for Document.getElementsByTagName
+PASS Empty string as a name for Element.getElementsByTagName
+PASS Empty string as a name for Document.getElementsByTagNameNS
+PASS Empty string as a name for Element.getElementsByTagNameNS
+PASS Empty string as a name for Document.getElementsByClassName
+PASS Empty string as a name for Element.getElementsByClassName
+PASS Empty string as a name for Element.children
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomcollectionsHTMLCollectionemptynamehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/collections/HTMLCollection-empty-name.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/collections/HTMLCollection-empty-name.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/collections/HTMLCollection-empty-name.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,65 @@
</span><ins>+<!doctype html>
+<meta charset=utf-8>
+<title>HTMLCollection and empty names</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<div id=test>
+<div class=a id></div>
+<div class=a name></div>
+<a class=a name></a>
+</div>
+<script>
+test(function() {
+ var c = document.getElementsByTagName("*");
+ assert_false("" in c, "Empty string should not be in the collection.");
+ assert_equals(c[""], undefined, "Named getter should return undefined for empty string.");
+ assert_equals(c.namedItem(""), null, "namedItem should return null for empty string.");
+}, "Empty string as a name for Document.getElementsByTagName");
+
+test(function() {
+ var div = document.getElementById("test");
+ var c = div.getElementsByTagName("*");
+ assert_false("" in c, "Empty string should not be in the collection.");
+ assert_equals(c[""], undefined, "Named getter should return undefined for empty string.");
+ assert_equals(c.namedItem(""), null, "namedItem should return null for empty string.");
+}, "Empty string as a name for Element.getElementsByTagName");
+
+test(function() {
+ var c = document.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "a");
+ assert_false("" in c, "Empty string should not be in the collection.");
+ assert_equals(c[""], undefined, "Named getter should return undefined for empty string.");
+ assert_equals(c.namedItem(""), null, "namedItem should return null for empty string.");
+}, "Empty string as a name for Document.getElementsByTagNameNS");
+
+test(function() {
+ var div = document.getElementById("test");
+ var c = div.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "a");
+ assert_false("" in c, "Empty string should not be in the collection.");
+ assert_equals(c[""], undefined, "Named getter should return undefined for empty string.");
+ assert_equals(c.namedItem(""), null, "namedItem should return null for empty string.");
+}, "Empty string as a name for Element.getElementsByTagNameNS");
+
+test(function() {
+ var c = document.getElementsByClassName("a");
+ assert_false("" in c, "Empty string should not be in the collection.");
+ assert_equals(c[""], undefined, "Named getter should return undefined for empty string.");
+ assert_equals(c.namedItem(""), null, "namedItem should return null for empty string.");
+}, "Empty string as a name for Document.getElementsByClassName");
+
+test(function() {
+ var div = document.getElementById("test");
+ var c = div.getElementsByClassName("a");
+ assert_false("" in c, "Empty string should not be in the collection.");
+ assert_equals(c[""], undefined, "Named getter should return undefined for empty string.");
+ assert_equals(c.namedItem(""), null, "namedItem should return null for empty string.");
+}, "Empty string as a name for Element.getElementsByClassName");
+
+test(function() {
+ var div = document.getElementById("test");
+ var c = div.children;
+ assert_false("" in c, "Empty string should not be in the collection.");
+ assert_equals(c[""], undefined, "Named getter should return undefined for empty string.");
+ assert_equals(c.namedItem(""), null, "namedItem should return null for empty string.");
+}, "Empty string as a name for Element.children");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomcollectionsw3cimportlog"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/collections/w3c-import.log (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/collections/w3c-import.log         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/collections/w3c-import.log        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+The tests in this directory were imported from the W3C repository.
+Do NOT modify these tests directly in Webkit.
+Instead, create a pull request on the W3C CSS or WPT github:
+        https://github.com/w3c/csswg-test
+        https://github.com/w3c/web-platform-tests
+
+Then run the Tools/Scripts/import-w3c-tests in Webkit to reimport
+
+Do NOT modify or remove this file
+
+------------------------------------------------------------------------
+Properties requiring vendor prefixes:
+None
+Property values requiring vendor prefixes:
+None
+------------------------------------------------------------------------
+List of files:
+/LayoutTests/http/tests/w3c/dom/collections/HTMLCollection-empty-name.html
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomcommonjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/common.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/common.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/common.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,1085 @@
</span><ins>+"use strict";
+// Written by Aryeh Gregor <ayg@aryeh.name>
+
+// TODO: iframes, contenteditable/designMode
+
+// Everything is done in functions in this test harness, so we have to declare
+// all the variables before use to make sure they can be reused.
+var testDiv, paras, detachedDiv, detachedPara1, detachedPara2,
+ foreignDoc, foreignPara1, foreignPara2, xmlDoc, xmlElement,
+ detachedXmlElement, detachedTextNode, foreignTextNode,
+ detachedForeignTextNode, xmlTextNode, detachedXmlTextNode,
+ processingInstruction, detachedProcessingInstruction, comment,
+ detachedComment, foreignComment, detachedForeignComment, xmlComment,
+ detachedXmlComment, docfrag, foreignDocfrag, xmlDocfrag, doctype,
+ foreignDoctype, xmlDoctype;
+var testRangesShort, testRanges, testPoints, testNodesShort, testNodes;
+
+function setupRangeTests() {
+ testDiv = document.querySelector("#test");
+ if (testDiv) {
+ testDiv.parentNode.removeChild(testDiv);
+ }
+ testDiv = document.createElement("div");
+ testDiv.id = "test";
+ document.body.insertBefore(testDiv, document.body.firstChild);
+
+ paras = [];
+ paras.push(document.createElement("p"));
+ paras[0].setAttribute("id", "a");
+ // Test some diacritics, to make sure browsers are using code units here
+ // and not something like grapheme clusters.
+ paras[0].textContent = "A\u0308b\u0308c\u0308d\u0308e\u0308f\u0308g\u0308h\u0308\n";
+ testDiv.appendChild(paras[0]);
+
+ paras.push(document.createElement("p"));
+ paras[1].setAttribute("id", "b");
+ paras[1].setAttribute("style", "display:none");
+ paras[1].textContent = "Ijklmnop\n";
+ testDiv.appendChild(paras[1]);
+
+ paras.push(document.createElement("p"));
+ paras[2].setAttribute("id", "c");
+ paras[2].textContent = "Qrstuvwx";
+ testDiv.appendChild(paras[2]);
+
+ paras.push(document.createElement("p"));
+ paras[3].setAttribute("id", "d");
+ paras[3].setAttribute("style", "display:none");
+ paras[3].textContent = "Yzabcdef";
+ testDiv.appendChild(paras[3]);
+
+ paras.push(document.createElement("p"));
+ paras[4].setAttribute("id", "e");
+ paras[4].setAttribute("style", "display:none");
+ paras[4].textContent = "Ghijklmn";
+ testDiv.appendChild(paras[4]);
+
+ detachedDiv = document.createElement("div");
+ detachedPara1 = document.createElement("p");
+ detachedPara1.appendChild(document.createTextNode("Opqrstuv"));
+ detachedPara2 = document.createElement("p");
+ detachedPara2.appendChild(document.createTextNode("Wxyzabcd"));
+ detachedDiv.appendChild(detachedPara1);
+ detachedDiv.appendChild(detachedPara2);
+
+ // Opera doesn't automatically create a doctype for a new HTML document,
+ // contrary to spec. It also doesn't let you add doctypes to documents
+ // after the fact through any means I've tried. So foreignDoc in Opera
+ // will have no doctype, foreignDoctype will be null, and Opera will fail
+ // some tests somewhat mysteriously as a result.
+ foreignDoc = document.implementation.createHTMLDocument("");
+ foreignPara1 = foreignDoc.createElement("p");
+ foreignPara1.appendChild(foreignDoc.createTextNode("Efghijkl"));
+ foreignPara2 = foreignDoc.createElement("p");
+ foreignPara2.appendChild(foreignDoc.createTextNode("Mnopqrst"));
+ foreignDoc.body.appendChild(foreignPara1);
+ foreignDoc.body.appendChild(foreignPara2);
+
+ // Now we get to do really silly stuff, which nobody in the universe is
+ // ever going to actually do, but the spec defines behavior, so too bad.
+ // Testing is fun!
+ xmlDoctype = document.implementation.createDocumentType("qorflesnorf", "abcde", "x\"'y");
+ xmlDoc = document.implementation.createDocument(null, null, xmlDoctype);
+ detachedXmlElement = xmlDoc.createElement("everyone-hates-hyphenated-element-names");
+ detachedTextNode = document.createTextNode("Uvwxyzab");
+ detachedForeignTextNode = foreignDoc.createTextNode("Cdefghij");
+ detachedXmlTextNode = xmlDoc.createTextNode("Klmnopqr");
+ // PIs only exist in XML documents, so don't bother with document or
+ // foreignDoc.
+ detachedProcessingInstruction = xmlDoc.createProcessingInstruction("whippoorwill", "chirp chirp chirp");
+ detachedComment = document.createComment("Stuvwxyz");
+ // Hurrah, we finally got to "z" at the end!
+ detachedForeignComment = foreignDoc.createComment("אריה יהודה");
+ detachedXmlComment = xmlDoc.createComment("בן חיים אליעזר");
+
+ // We should also test with document fragments that actually contain stuff
+ // . . . but, maybe later.
+ docfrag = document.createDocumentFragment();
+ foreignDocfrag = foreignDoc.createDocumentFragment();
+ xmlDocfrag = xmlDoc.createDocumentFragment();
+
+ xmlElement = xmlDoc.createElement("igiveuponcreativenames");
+ xmlTextNode = xmlDoc.createTextNode("do re mi fa so la ti");
+ xmlElement.appendChild(xmlTextNode);
+ processingInstruction = xmlDoc.createProcessingInstruction("somePI", 'Did you know that ":syn sync fromstart" is very useful when using vim to edit large amounts of JavaScript embedded in HTML?');
+ xmlDoc.appendChild(xmlElement);
+ xmlDoc.appendChild(processingInstruction);
+ xmlComment = xmlDoc.createComment("I maliciously created a comment that will break incautious XML serializers, but Firefox threw an exception, so all I got was this lousy T-shirt");
+ xmlDoc.appendChild(xmlComment);
+
+ comment = document.createComment("Alphabet soup?");
+ testDiv.appendChild(comment);
+
+ foreignComment = foreignDoc.createComment('"Commenter" and "commentator" mean different things. I\'ve seen non-native speakers trip up on this.');
+ foreignDoc.appendChild(foreignComment);
+ foreignTextNode = foreignDoc.createTextNode("I admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now.");
+ foreignDoc.body.appendChild(foreignTextNode);
+
+ doctype = document.doctype;
+ foreignDoctype = foreignDoc.doctype;
+
+ testRangesShort = [
+ // Various ranges within the text node children of different
+ // paragraphs. All should be valid.
+ "[paras[0].firstChild, 0, paras[0].firstChild, 0]",
+ "[paras[0].firstChild, 0, paras[0].firstChild, 1]",
+ "[paras[0].firstChild, 2, paras[0].firstChild, 8]",
+ "[paras[0].firstChild, 2, paras[0].firstChild, 9]",
+ "[paras[1].firstChild, 0, paras[1].firstChild, 0]",
+ "[paras[1].firstChild, 2, paras[1].firstChild, 9]",
+ "[detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]",
+ "[detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]",
+ "[foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]",
+ "[foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]",
+ // Now try testing some elements, not just text nodes.
+ "[document.documentElement, 0, document.documentElement, 1]",
+ "[document.documentElement, 0, document.documentElement, 2]",
+ "[document.documentElement, 1, document.documentElement, 2]",
+ "[document.head, 1, document.head, 1]",
+ "[document.body, 4, document.body, 5]",
+ "[foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]",
+ "[paras[0], 0, paras[0], 1]",
+ "[detachedPara1, 0, detachedPara1, 1]",
+ // Now try some ranges that span elements.
+ "[paras[0].firstChild, 0, paras[1].firstChild, 0]",
+ "[paras[0].firstChild, 0, paras[1].firstChild, 8]",
+ "[paras[0].firstChild, 3, paras[3], 1]",
+ // How about something that spans a node and its descendant?
+ "[paras[0], 0, paras[0].firstChild, 7]",
+ "[testDiv, 2, paras[4], 1]",
+ // Then a few more interesting things just for good measure.
+ "[document, 0, document, 1]",
+ "[document, 0, document, 2]",
+ "[comment, 2, comment, 3]",
+ "[testDiv, 0, comment, 5]",
+ "[foreignDoc, 1, foreignComment, 2]",
+ "[foreignDoc.body, 0, foreignTextNode, 36]",
+ "[xmlDoc, 1, xmlComment, 0]",
+ "[detachedTextNode, 0, detachedTextNode, 8]",
+ "[detachedForeignTextNode, 0, detachedForeignTextNode, 8]",
+ "[detachedXmlTextNode, 0, detachedXmlTextNode, 8]",
+ "[detachedComment, 3, detachedComment, 4]",
+ "[detachedForeignComment, 0, detachedForeignComment, 1]",
+ "[detachedXmlComment, 2, detachedXmlComment, 6]",
+ "[docfrag, 0, docfrag, 0]",
+ "[processingInstruction, 0, processingInstruction, 4]",
+ ];
+
+ testRanges = testRangesShort.concat([
+ "[paras[1].firstChild, 0, paras[1].firstChild, 1]",
+ "[paras[1].firstChild, 2, paras[1].firstChild, 8]",
+ "[detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]",
+ "[foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]",
+ "[foreignDoc.head, 1, foreignDoc.head, 1]",
+ "[foreignDoc.body, 0, foreignDoc.body, 0]",
+ "[paras[0], 0, paras[0], 0]",
+ "[detachedPara1, 0, detachedPara1, 0]",
+ "[testDiv, 1, paras[2].firstChild, 5]",
+ "[document.documentElement, 1, document.body, 0]",
+ "[foreignDoc.documentElement, 1, foreignDoc.body, 0]",
+ "[document, 1, document, 2]",
+ "[paras[2].firstChild, 4, comment, 2]",
+ "[paras[3], 1, comment, 8]",
+ "[foreignDoc, 0, foreignDoc, 0]",
+ "[xmlDoc, 0, xmlDoc, 0]",
+ "[detachedForeignTextNode, 7, detachedForeignTextNode, 7]",
+ "[detachedXmlTextNode, 7, detachedXmlTextNode, 7]",
+ "[detachedComment, 5, detachedComment, 5]",
+ "[detachedForeignComment, 4, detachedForeignComment, 4]",
+ "[foreignDocfrag, 0, foreignDocfrag, 0]",
+ "[xmlDocfrag, 0, xmlDocfrag, 0]",
+ ]);
+
+ testPoints = [
+ // Various positions within the page, some invalid. Remember that
+ // paras[0] is visible, and paras[1] is display: none.
+ "[paras[0].firstChild, -1]",
+ "[paras[0].firstChild, 0]",
+ "[paras[0].firstChild, 1]",
+ "[paras[0].firstChild, 2]",
+ "[paras[0].firstChild, 8]",
+ "[paras[0].firstChild, 9]",
+ "[paras[0].firstChild, 10]",
+ "[paras[0].firstChild, 65535]",
+ "[paras[1].firstChild, -1]",
+ "[paras[1].firstChild, 0]",
+ "[paras[1].firstChild, 1]",
+ "[paras[1].firstChild, 2]",
+ "[paras[1].firstChild, 8]",
+ "[paras[1].firstChild, 9]",
+ "[paras[1].firstChild, 10]",
+ "[paras[1].firstChild, 65535]",
+ "[detachedPara1.firstChild, 0]",
+ "[detachedPara1.firstChild, 1]",
+ "[detachedPara1.firstChild, 8]",
+ "[detachedPara1.firstChild, 9]",
+ "[foreignPara1.firstChild, 0]",
+ "[foreignPara1.firstChild, 1]",
+ "[foreignPara1.firstChild, 8]",
+ "[foreignPara1.firstChild, 9]",
+ // Now try testing some elements, not just text nodes.
+ "[document.documentElement, -1]",
+ "[document.documentElement, 0]",
+ "[document.documentElement, 1]",
+ "[document.documentElement, 2]",
+ "[document.documentElement, 7]",
+ "[document.head, 1]",
+ "[document.body, 3]",
+ "[foreignDoc.documentElement, 0]",
+ "[foreignDoc.documentElement, 1]",
+ "[foreignDoc.head, 0]",
+ "[foreignDoc.body, 1]",
+ "[paras[0], 0]",
+ "[paras[0], 1]",
+ "[paras[0], 2]",
+ "[paras[1], 0]",
+ "[paras[1], 1]",
+ "[paras[1], 2]",
+ "[detachedPara1, 0]",
+ "[detachedPara1, 1]",
+ "[testDiv, 0]",
+ "[testDiv, 3]",
+ // Then a few more interesting things just for good measure.
+ "[document, -1]",
+ "[document, 0]",
+ "[document, 1]",
+ "[document, 2]",
+ "[document, 3]",
+ "[comment, -1]",
+ "[comment, 0]",
+ "[comment, 4]",
+ "[comment, 96]",
+ "[foreignDoc, 0]",
+ "[foreignDoc, 1]",
+ "[foreignComment, 2]",
+ "[foreignTextNode, 0]",
+ "[foreignTextNode, 36]",
+ "[xmlDoc, -1]",
+ "[xmlDoc, 0]",
+ "[xmlDoc, 1]",
+ "[xmlDoc, 5]",
+ "[xmlComment, 0]",
+ "[xmlComment, 4]",
+ "[processingInstruction, 0]",
+ "[processingInstruction, 5]",
+ "[processingInstruction, 9]",
+ "[detachedTextNode, 0]",
+ "[detachedTextNode, 8]",
+ "[detachedForeignTextNode, 0]",
+ "[detachedForeignTextNode, 8]",
+ "[detachedXmlTextNode, 0]",
+ "[detachedXmlTextNode, 8]",
+ "[detachedProcessingInstruction, 12]",
+ "[detachedComment, 3]",
+ "[detachedComment, 5]",
+ "[detachedForeignComment, 0]",
+ "[detachedForeignComment, 4]",
+ "[detachedXmlComment, 2]",
+ "[docfrag, 0]",
+ "[foreignDocfrag, 0]",
+ "[xmlDocfrag, 0]",
+ "[doctype, 0]",
+ "[doctype, -17]",
+ "[doctype, 1]",
+ "[foreignDoctype, 0]",
+ "[xmlDoctype, 0]",
+ ];
+
+ testNodesShort = [
+ "paras[0]",
+ "paras[0].firstChild",
+ "paras[1].firstChild",
+ "foreignPara1",
+ "foreignPara1.firstChild",
+ "detachedPara1",
+ "detachedPara1.firstChild",
+ "document",
+ "detachedDiv",
+ "foreignDoc",
+ "foreignPara2",
+ "xmlDoc",
+ "xmlElement",
+ "detachedTextNode",
+ "foreignTextNode",
+ "processingInstruction",
+ "detachedProcessingInstruction",
+ "comment",
+ "detachedComment",
+ "docfrag",
+ "doctype",
+ "foreignDoctype",
+ ];
+
+ testNodes = testNodesShort.concat([
+ "paras[1]",
+ "detachedPara2",
+ "detachedPara2.firstChild",
+ "testDiv",
+ "detachedXmlElement",
+ "detachedForeignTextNode",
+ "xmlTextNode",
+ "detachedXmlTextNode",
+ "xmlComment",
+ "foreignComment",
+ "detachedForeignComment",
+ "detachedXmlComment",
+ "foreignDocfrag",
+ "xmlDocfrag",
+ "xmlDoctype",
+ ]);
+}
+if ("setup" in window) {
+ setup(setupRangeTests);
+} else {
+ // Presumably we're running from within an iframe or something
+ setupRangeTests();
+}
+
+/**
+ * The "length" of a node as defined by the Ranges section of DOM4.
+ */
+function nodeLength(node) {
+ // "The length of a node node depends on node:
+ //
+ // "DocumentType
+ // "0."
+ if (node.nodeType == Node.DOCUMENT_TYPE_NODE) {
+ return 0;
+ }
+ // "Text
+ // "ProcessingInstruction
+ // "Comment
+ // "Its length attribute value."
+ // Browsers don't historically support the length attribute on
+ // ProcessingInstruction, so to avoid spurious failures, do
+ // node.data.length instead of node.length.
+ if (node.nodeType == Node.TEXT_NODE || node.nodeType == Node.PROCESSING_INSTRUCTION_NODE || node.nodeType == Node.COMMENT_NODE) {
+ return node.data.length;
+ }
+ // "Any other node
+ // "Its number of children."
+ return node.childNodes.length;
+}
+
+/**
+ * Returns the furthest ancestor of a Node as defined by the spec.
+ */
+function furthestAncestor(node) {
+ var root = node;
+ while (root.parentNode != null) {
+ root = root.parentNode;
+ }
+ return root;
+}
+
+/**
+ * "The ancestor containers of a Node are the Node itself and all its
+ * ancestors."
+ *
+ * Is node1 an ancestor container of node2?
+ */
+function isAncestorContainer(node1, node2) {
+ return node1 == node2 ||
+ (node2.compareDocumentPosition(node1) & Node.DOCUMENT_POSITION_CONTAINS);
+}
+
+/**
+ * Returns the first Node that's after node in tree order, or null if node is
+ * the last Node.
+ */
+function nextNode(node) {
+ if (node.hasChildNodes()) {
+ return node.firstChild;
+ }
+ return nextNodeDescendants(node);
+}
+
+/**
+ * Returns the last Node that's before node in tree order, or null if node is
+ * the first Node.
+ */
+function previousNode(node) {
+ if (node.previousSibling) {
+ node = node.previousSibling;
+ while (node.hasChildNodes()) {
+ node = node.lastChild;
+ }
+ return node;
+ }
+ return node.parentNode;
+}
+
+/**
+ * Returns the next Node that's after node and all its descendants in tree
+ * order, or null if node is the last Node or an ancestor of it.
+ */
+function nextNodeDescendants(node) {
+ while (node && !node.nextSibling) {
+ node = node.parentNode;
+ }
+ if (!node) {
+ return null;
+ }
+ return node.nextSibling;
+}
+
+/**
+ * Returns the ownerDocument of the Node, or the Node itself if it's a
+ * Document.
+ */
+function ownerDocument(node) {
+ return node.nodeType == Node.DOCUMENT_NODE
+ ? node
+ : node.ownerDocument;
+}
+
+/**
+ * Returns true if ancestor is an ancestor of descendant, false otherwise.
+ */
+function isAncestor(ancestor, descendant) {
+ if (!ancestor || !descendant) {
+ return false;
+ }
+ while (descendant && descendant != ancestor) {
+ descendant = descendant.parentNode;
+ }
+ return descendant == ancestor;
+}
+
+/**
+ * Returns true if ancestor is an inclusive ancestor of descendant, false
+ * otherwise.
+ */
+function isInclusiveAncestor(ancestor, descendant) {
+ return ancestor === descendant || isAncestor(ancestor, descendant);
+}
+
+/**
+ * Returns true if descendant is a descendant of ancestor, false otherwise.
+ */
+function isDescendant(descendant, ancestor) {
+ return isAncestor(ancestor, descendant);
+}
+
+/**
+ * Returns true if descendant is an inclusive descendant of ancestor, false
+ * otherwise.
+ */
+function isInclusiveDescendant(descendant, ancestor) {
+ return descendant === ancestor || isDescendant(descendant, ancestor);
+}
+
+/**
+ * The position of two boundary points relative to one another, as defined by
+ * the spec.
+ */
+function getPosition(nodeA, offsetA, nodeB, offsetB) {
+ // "If node A is the same as node B, return equal if offset A equals offset
+ // B, before if offset A is less than offset B, and after if offset A is
+ // greater than offset B."
+ if (nodeA == nodeB) {
+ if (offsetA == offsetB) {
+ return "equal";
+ }
+ if (offsetA < offsetB) {
+ return "before";
+ }
+ if (offsetA > offsetB) {
+ return "after";
+ }
+ }
+
+ // "If node A is after node B in tree order, compute the position of (node
+ // B, offset B) relative to (node A, offset A). If it is before, return
+ // after. If it is after, return before."
+ if (nodeB.compareDocumentPosition(nodeA) & Node.DOCUMENT_POSITION_FOLLOWING) {
+ var pos = getPosition(nodeB, offsetB, nodeA, offsetA);
+ if (pos == "before") {
+ return "after";
+ }
+ if (pos == "after") {
+ return "before";
+ }
+ }
+
+ // "If node A is an ancestor of node B:"
+ if (nodeB.compareDocumentPosition(nodeA) & Node.DOCUMENT_POSITION_CONTAINS) {
+ // "Let child equal node B."
+ var child = nodeB;
+
+ // "While child is not a child of node A, set child to its parent."
+ while (child.parentNode != nodeA) {
+ child = child.parentNode;
+ }
+
+ // "If the index of child is less than offset A, return after."
+ if (indexOf(child) < offsetA) {
+ return "after";
+ }
+ }
+
+ // "Return before."
+ return "before";
+}
+
+/**
+ * "contained" as defined by DOM Range: "A Node node is contained in a range
+ * range if node's furthest ancestor is the same as range's root, and (node, 0)
+ * is after range's start, and (node, length of node) is before range's end."
+ */
+function isContained(node, range) {
+ var pos1 = getPosition(node, 0, range.startContainer, range.startOffset);
+ var pos2 = getPosition(node, nodeLength(node), range.endContainer, range.endOffset);
+
+ return furthestAncestor(node) == furthestAncestor(range.startContainer)
+ && pos1 == "after"
+ && pos2 == "before";
+}
+
+/**
+ * "partially contained" as defined by DOM Range: "A Node is partially
+ * contained in a range if it is an ancestor container of the range's start but
+ * not its end, or vice versa."
+ */
+function isPartiallyContained(node, range) {
+ var cond1 = isAncestorContainer(node, range.startContainer);
+ var cond2 = isAncestorContainer(node, range.endContainer);
+ return (cond1 && !cond2) || (cond2 && !cond1);
+}
+
+/**
+ * Index of a node as defined by the spec.
+ */
+function indexOf(node) {
+ if (!node.parentNode) {
+ // No preceding sibling nodes, right?
+ return 0;
+ }
+ var i = 0;
+ while (node != node.parentNode.childNodes[i]) {
+ i++;
+ }
+ return i;
+}
+
+/**
+ * extractContents() implementation, following the spec. If an exception is
+ * supposed to be thrown, will return a string with the name (e.g.,
+ * "HIERARCHY_REQUEST_ERR") instead of a document fragment. It might also
+ * return an arbitrary human-readable string if a condition is hit that implies
+ * a spec bug.
+ */
+function myExtractContents(range) {
+ // "If the context object's detached flag is set, raise an
+ // INVALID_STATE_ERR exception and abort these steps."
+ try {
+ range.collapsed;
+ } catch (e) {
+ return "INVALID_STATE_ERR";
+ }
+
+ // "Let frag be a new DocumentFragment whose ownerDocument is the same as
+ // the ownerDocument of the context object's start node."
+ var ownerDoc = range.startContainer.nodeType == Node.DOCUMENT_NODE
+ ? range.startContainer
+ : range.startContainer.ownerDocument;
+ var frag = ownerDoc.createDocumentFragment();
+
+ // "If the context object's start and end are the same, abort this method,
+ // returning frag."
+ if (range.startContainer == range.endContainer
+ && range.startOffset == range.endOffset) {
+ return frag;
+ }
+
+ // "Let original start node, original start offset, original end node, and
+ // original end offset be the context object's start and end nodes and
+ // offsets, respectively."
+ var originalStartNode = range.startContainer;
+ var originalStartOffset = range.startOffset;
+ var originalEndNode = range.endContainer;
+ var originalEndOffset = range.endOffset;
+
+ // "If original start node and original end node are the same, and they are
+ // a Text or Comment node:"
+ if (range.startContainer == range.endContainer
+ && (range.startContainer.nodeType == Node.TEXT_NODE
+ || range.startContainer.nodeType == Node.COMMENT_NODE)) {
+ // "Let clone be the result of calling cloneNode(false) on original
+ // start node."
+ var clone = originalStartNode.cloneNode(false);
+
+ // "Set the data of clone to the result of calling
+ // substringData(original start offset, original end offset − original
+ // start offset) on original start node."
+ clone.data = originalStartNode.substringData(originalStartOffset,
+ originalEndOffset - originalStartOffset);
+
+ // "Append clone as the last child of frag."
+ frag.appendChild(clone);
+
+ // "Call deleteData(original start offset, original end offset −
+ // original start offset) on original start node."
+ originalStartNode.deleteData(originalStartOffset,
+ originalEndOffset - originalStartOffset);
+
+ // "Abort this method, returning frag."
+ return frag;
+ }
+
+ // "Let common ancestor equal original start node."
+ var commonAncestor = originalStartNode;
+
+ // "While common ancestor is not an ancestor container of original end
+ // node, set common ancestor to its own parent."
+ while (!isAncestorContainer(commonAncestor, originalEndNode)) {
+ commonAncestor = commonAncestor.parentNode;
+ }
+
+ // "If original start node is an ancestor container of original end node,
+ // let first partially contained child be null."
+ var firstPartiallyContainedChild;
+ if (isAncestorContainer(originalStartNode, originalEndNode)) {
+ firstPartiallyContainedChild = null;
+ // "Otherwise, let first partially contained child be the first child of
+ // common ancestor that is partially contained in the context object."
+ } else {
+ for (var i = 0; i < commonAncestor.childNodes.length; i++) {
+ if (isPartiallyContained(commonAncestor.childNodes[i], range)) {
+ firstPartiallyContainedChild = commonAncestor.childNodes[i];
+ break;
+ }
+ }
+ if (!firstPartiallyContainedChild) {
+ throw "Spec bug: no first partially contained child!";
+ }
+ }
+
+ // "If original end node is an ancestor container of original start node,
+ // let last partially contained child be null."
+ var lastPartiallyContainedChild;
+ if (isAncestorContainer(originalEndNode, originalStartNode)) {
+ lastPartiallyContainedChild = null;
+ // "Otherwise, let last partially contained child be the last child of
+ // common ancestor that is partially contained in the context object."
+ } else {
+ for (var i = commonAncestor.childNodes.length - 1; i >= 0; i--) {
+ if (isPartiallyContained(commonAncestor.childNodes[i], range)) {
+ lastPartiallyContainedChild = commonAncestor.childNodes[i];
+ break;
+ }
+ }
+ if (!lastPartiallyContainedChild) {
+ throw "Spec bug: no last partially contained child!";
+ }
+ }
+
+ // "Let contained children be a list of all children of common ancestor
+ // that are contained in the context object, in tree order."
+ //
+ // "If any member of contained children is a DocumentType, raise a
+ // HIERARCHY_REQUEST_ERR exception and abort these steps."
+ var containedChildren = [];
+ for (var i = 0; i < commonAncestor.childNodes.length; i++) {
+ if (isContained(commonAncestor.childNodes[i], range)) {
+ if (commonAncestor.childNodes[i].nodeType
+ == Node.DOCUMENT_TYPE_NODE) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+ containedChildren.push(commonAncestor.childNodes[i]);
+ }
+ }
+
+ // "If original start node is an ancestor container of original end node,
+ // set new node to original start node and new offset to original start
+ // offset."
+ var newNode, newOffset;
+ if (isAncestorContainer(originalStartNode, originalEndNode)) {
+ newNode = originalStartNode;
+ newOffset = originalStartOffset;
+ // "Otherwise:"
+ } else {
+ // "Let reference node equal original start node."
+ var referenceNode = originalStartNode;
+
+ // "While reference node's parent is not null and is not an ancestor
+ // container of original end node, set reference node to its parent."
+ while (referenceNode.parentNode
+ && !isAncestorContainer(referenceNode.parentNode, originalEndNode)) {
+ referenceNode = referenceNode.parentNode;
+ }
+
+ // "Set new node to the parent of reference node, and new offset to one
+ // plus the index of reference node."
+ newNode = referenceNode.parentNode;
+ newOffset = 1 + indexOf(referenceNode);
+ }
+
+ // "If first partially contained child is a Text or Comment node:"
+ if (firstPartiallyContainedChild
+ && (firstPartiallyContainedChild.nodeType == Node.TEXT_NODE
+ || firstPartiallyContainedChild.nodeType == Node.COMMENT_NODE)) {
+ // "Let clone be the result of calling cloneNode(false) on original
+ // start node."
+ var clone = originalStartNode.cloneNode(false);
+
+ // "Set the data of clone to the result of calling substringData() on
+ // original start node, with original start offset as the first
+ // argument and (length of original start node − original start offset)
+ // as the second."
+ clone.data = originalStartNode.substringData(originalStartOffset,
+ nodeLength(originalStartNode) - originalStartOffset);
+
+ // "Append clone as the last child of frag."
+ frag.appendChild(clone);
+
+ // "Call deleteData() on original start node, with original start
+ // offset as the first argument and (length of original start node −
+ // original start offset) as the second."
+ originalStartNode.deleteData(originalStartOffset,
+ nodeLength(originalStartNode) - originalStartOffset);
+ // "Otherwise, if first partially contained child is not null:"
+ } else if (firstPartiallyContainedChild) {
+ // "Let clone be the result of calling cloneNode(false) on first
+ // partially contained child."
+ var clone = firstPartiallyContainedChild.cloneNode(false);
+
+ // "Append clone as the last child of frag."
+ frag.appendChild(clone);
+
+ // "Let subrange be a new Range whose start is (original start node,
+ // original start offset) and whose end is (first partially contained
+ // child, length of first partially contained child)."
+ var subrange = ownerDoc.createRange();
+ subrange.setStart(originalStartNode, originalStartOffset);
+ subrange.setEnd(firstPartiallyContainedChild,
+ nodeLength(firstPartiallyContainedChild));
+
+ // "Let subfrag be the result of calling extractContents() on
+ // subrange."
+ var subfrag = myExtractContents(subrange);
+
+ // "For each child of subfrag, in order, append that child to clone as
+ // its last child."
+ for (var i = 0; i < subfrag.childNodes.length; i++) {
+ clone.appendChild(subfrag.childNodes[i]);
+ }
+ }
+
+ // "For each contained child in contained children, append contained child
+ // as the last child of frag."
+ for (var i = 0; i < containedChildren.length; i++) {
+ frag.appendChild(containedChildren[i]);
+ }
+
+ // "If last partially contained child is a Text or Comment node:"
+ if (lastPartiallyContainedChild
+ && (lastPartiallyContainedChild.nodeType == Node.TEXT_NODE
+ || lastPartiallyContainedChild.nodeType == Node.COMMENT_NODE)) {
+ // "Let clone be the result of calling cloneNode(false) on original
+ // end node."
+ var clone = originalEndNode.cloneNode(false);
+
+ // "Set the data of clone to the result of calling substringData(0,
+ // original end offset) on original end node."
+ clone.data = originalEndNode.substringData(0, originalEndOffset);
+
+ // "Append clone as the last child of frag."
+ frag.appendChild(clone);
+
+ // "Call deleteData(0, original end offset) on original end node."
+ originalEndNode.deleteData(0, originalEndOffset);
+ // "Otherwise, if last partially contained child is not null:"
+ } else if (lastPartiallyContainedChild) {
+ // "Let clone be the result of calling cloneNode(false) on last
+ // partially contained child."
+ var clone = lastPartiallyContainedChild.cloneNode(false);
+
+ // "Append clone as the last child of frag."
+ frag.appendChild(clone);
+
+ // "Let subrange be a new Range whose start is (last partially
+ // contained child, 0) and whose end is (original end node, original
+ // end offset)."
+ var subrange = ownerDoc.createRange();
+ subrange.setStart(lastPartiallyContainedChild, 0);
+ subrange.setEnd(originalEndNode, originalEndOffset);
+
+ // "Let subfrag be the result of calling extractContents() on
+ // subrange."
+ var subfrag = myExtractContents(subrange);
+
+ // "For each child of subfrag, in order, append that child to clone as
+ // its last child."
+ for (var i = 0; i < subfrag.childNodes.length; i++) {
+ clone.appendChild(subfrag.childNodes[i]);
+ }
+ }
+
+ // "Set the context object's start and end to (new node, new offset)."
+ range.setStart(newNode, newOffset);
+ range.setEnd(newNode, newOffset);
+
+ // "Return frag."
+ return frag;
+}
+
+/**
+ * insertNode() implementation, following the spec. If an exception is meant
+ * to be thrown, will return a string with the expected exception name, for
+ * instance "HIERARCHY_REQUEST_ERR".
+ */
+function myInsertNode(range, node) {
+ // "If range's start node is either a ProcessingInstruction or Comment
+ // node, or a Text node whose parent is null, throw an
+ // "HierarchyRequestError" exception and terminate these steps."
+ if (range.startContainer.nodeType == Node.PROCESSING_INSTRUCTION_NODE
+ || range.startContainer.nodeType == Node.COMMENT_NODE
+ || (range.startContainer.nodeType == Node.TEXT_NODE
+ && !range.startContainer.parentNode)) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+
+ // "Let referenceNode be null."
+ var referenceNode = null;
+
+ // "If range's start node is a Text node, set referenceNode to that Text node."
+ if (range.startContainer.nodeType == Node.TEXT_NODE) {
+ referenceNode = range.startContainer;
+
+ // "Otherwise, set referenceNode to the child of start node whose index is
+ // start offset, and null if there is no such child."
+ } else {
+ if (range.startOffset < range.startContainer.childNodes.length) {
+ referenceNode = range.startContainer.childNodes[range.startOffset];
+ } else {
+ referenceNode = null;
+ }
+ }
+
+ // "Let parent be range's start node if referenceNode is null, and
+ // referenceNode's parent otherwise."
+ var parent_ = referenceNode === null ? range.startContainer :
+ referenceNode.parentNode;
+
+ // "Ensure pre-insertion validity of node into parent before
+ // referenceNode."
+ var error = ensurePreInsertionValidity(node, parent_, referenceNode);
+ if (error) {
+ return error;
+ }
+
+ // "If range's start node is a Text node, set referenceNode to the result
+ // of splitting it with offset range's start offset."
+ if (range.startContainer.nodeType == Node.TEXT_NODE) {
+ referenceNode = range.startContainer.splitText(range.startOffset);
+ }
+
+ // "If node is referenceNode, set referenceNode to its next sibling."
+ if (node == referenceNode) {
+ referenceNode = referenceNode.nextSibling;
+ }
+
+ // "If node's parent is not null, remove node from its parent."
+ if (node.parentNode) {
+ node.parentNode.removeChild(node);
+ }
+
+ // "Let newOffset be parent's length if referenceNode is null, and
+ // referenceNode's index otherwise."
+ var newOffset = referenceNode === null ? nodeLength(parent_) :
+ indexOf(referenceNode);
+
+ // "Increase newOffset by node's length if node is a DocumentFragment node,
+ // and one otherwise."
+ newOffset += node.nodeType == Node.DOCUMENT_FRAGMENT_NODE ?
+ nodeLength(node) : 1;
+
+ // "Pre-insert node into parent before referenceNode."
+ parent_.insertBefore(node, referenceNode);
+
+ // "If range's start and end are the same, set range's end to (parent,
+ // newOffset)."
+ if (range.startContainer == range.endContainer
+ && range.startOffset == range.endOffset) {
+ range.setEnd(parent_, newOffset);
+ }
+}
+
+// To make filter() calls more readable
+function isElement(node) {
+ return node.nodeType == Node.ELEMENT_NODE;
+}
+
+function isText(node) {
+ return node.nodeType == Node.TEXT_NODE;
+}
+
+function isDoctype(node) {
+ return node.nodeType == Node.DOCUMENT_TYPE_NODE;
+}
+
+function ensurePreInsertionValidity(node, parent_, child) {
+ // "If parent is not a Document, DocumentFragment, or Element node, throw a
+ // HierarchyRequestError."
+ if (parent_.nodeType != Node.DOCUMENT_NODE
+ && parent_.nodeType != Node.DOCUMENT_FRAGMENT_NODE
+ && parent_.nodeType != Node.ELEMENT_NODE) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+
+ // "If node is a host-including inclusive ancestor of parent, throw a
+ // HierarchyRequestError."
+ //
+ // XXX Does not account for host
+ if (isInclusiveAncestor(node, parent_)) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+
+ // "If child is not null and its parent is not parent, throw a NotFoundError
+ // exception."
+ if (child && child.parentNode != parent_) {
+ return "NOT_FOUND_ERR";
+ }
+
+ // "If node is not a DocumentFragment, DocumentType, Element, Text,
+ // ProcessingInstruction, or Comment node, throw a HierarchyRequestError."
+ if (node.nodeType != Node.DOCUMENT_FRAGMENT_NODE
+ && node.nodeType != Node.DOCUMENT_TYPE_NODE
+ && node.nodeType != Node.ELEMENT_NODE
+ && node.nodeType != Node.TEXT_NODE
+ && node.nodeType != Node.PROCESSING_INSTRUCTION_NODE
+ && node.nodeType != Node.COMMENT_NODE) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+
+ // "If either node is a Text node and parent is a document, or node is a
+ // doctype and parent is not a document, throw a HierarchyRequestError."
+ if ((node.nodeType == Node.TEXT_NODE
+ && parent_.nodeType == Node.DOCUMENT_NODE)
+ || (node.nodeType == Node.DOCUMENT_TYPE_NODE
+ && parent_.nodeType != Node.DOCUMENT_NODE)) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+
+ // "If parent is a document, and any of the statements below, switched on
+ // node, are true, throw a HierarchyRequestError."
+ if (parent_.nodeType == Node.DOCUMENT_NODE) {
+ switch (node.nodeType) {
+ case Node.DOCUMENT_FRAGMENT_NODE:
+ // "If node has more than one element child or has a Text node
+ // child. Otherwise, if node has one element child and either
+ // parent has an element child, child is a doctype, or child is not
+ // null and a doctype is following child."
+ if ([].filter.call(node.childNodes, isElement).length > 1) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+
+ if ([].some.call(node.childNodes, isText)) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+
+ if ([].filter.call(node.childNodes, isElement).length == 1) {
+ if ([].some.call(parent_.childNodes, isElement)) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+
+ if (child && child.nodeType == Node.DOCUMENT_TYPE_NODE) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+
+ if (child && [].slice.call(parent_.childNodes, indexOf(child) + 1)
+ .filter(isDoctype)) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+ }
+ break;
+
+ case Node.ELEMENT_NODE:
+ // "parent has an element child, child is a doctype, or child is
+ // not null and a doctype is following child."
+ if ([].some.call(parent_.childNodes, isElement)) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+
+ if (child.nodeType == Node.DOCUMENT_TYPE_NODE) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+
+ if (child && [].slice.call(parent_.childNodes, indexOf(child) + 1)
+ .filter(isDoctype)) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+ break;
+
+ case Node.DOCUMENT_TYPE_NODE:
+ // "parent has a doctype child, an element is preceding child, or
+ // child is null and parent has an element child."
+ if ([].some.call(parent_.childNodes, isDoctype)) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+
+ if (child && [].slice.call(parent_.childNodes, 0, indexOf(child))
+ .some(isElement)) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+
+ if (!child && [].some.call(parent_.childNodes, isElement)) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+ break;
+ }
+ }
+}
+
+/**
+ * Asserts that two nodes are equal, in the sense of isEqualNode(). If they
+ * aren't, tries to print a relatively informative reason why not. TODO: Move
+ * this to testharness.js?
+ */
+function assertNodesEqual(actual, expected, msg) {
+ if (!actual.isEqualNode(expected)) {
+ msg = "Actual and expected mismatch for " + msg + ". ";
+
+ while (actual && expected) {
+ assert_true(actual.nodeType === expected.nodeType
+ && actual.nodeName === expected.nodeName
+ && actual.nodeValue === expected.nodeValue,
+ "First differing node: expected " + format_value(expected)
+ + ", got " + format_value(actual) + " [" + msg + "]");
+ actual = nextNode(actual);
+ expected = nextNode(expected);
+ }
+
+ assert_unreached("DOMs were not equal but we couldn't figure out why");
+ }
+}
+
+/**
+ * Given a DOMException, return the name (e.g., "HIERARCHY_REQUEST_ERR").
+ */
+function getDomExceptionName(e) {
+ var ret = null;
+ for (var prop in e) {
+ if (/^[A-Z_]+_ERR$/.test(prop) && e[prop] == e.code) {
+ return prop;
+ }
+ }
+
+ throw "Exception seems to not be a DOMException? " + e;
+}
+
+/**
+ * Given an array of endpoint data [start container, start offset, end
+ * container, end offset], returns a Range with those endpoints.
+ */
+function rangeFromEndpoints(endpoints) {
+ // If we just use document instead of the ownerDocument of endpoints[0],
+ // WebKit will throw on setStart/setEnd. This is a WebKit bug, but it's in
+ // range, not selection, so we don't want to fail anything for it.
+ var range = ownerDocument(endpoints[0]).createRange();
+ range.setStart(endpoints[0], endpoints[1]);
+ range.setEnd(endpoints[2], endpoints[3]);
+ return range;
+}
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomconstantsjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/constants.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/constants.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/constants.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+function testConstants(objects, constants, msg) {
+ objects.forEach(function(arr) {
+ var o = arr[0], desc = arr[1];
+ test(function() {
+ constants.forEach(function(d) {
+ assert_true(d[0] in o, "Object " + o + " doesn't have " + d[0])
+ assert_equals(o[d[0]], d[1], "Object " + o + " value for " + d[0] + " is wrong")
+ })
+ }, "Constants for " + msg + " on " + desc + ".")
+ })
+}
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventconstantsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-constants-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-constants-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-constants-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+
+PASS Constants for eventPhase on Event interface object.
+PASS Constants for eventPhase on Event prototype object.
+PASS Constants for eventPhase on Event object.
+PASS Constants for eventPhase on CustomEvent object.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventconstantshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-constants.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-constants.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-constants.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+<!doctype html>
+<title>Event constants</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../constants.js"></script>
+<div id="log"></div>
+<script>
+var objects;
+setup(function() {
+ objects = [
+ [Event, "Event interface object"],
+ [Event.prototype, "Event prototype object"],
+ [document.createEvent("Event"), "Event object"],
+ [document.createEvent("CustomEvent"), "CustomEvent object"]
+ ]
+})
+testConstants(objects, [
+ ["NONE", 0],
+ ["CAPTURING_PHASE", 1],
+ ["AT_TARGET", 2],
+ ["BUBBLING_PHASE", 3]
+], "eventPhase")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventconstructorsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-constructors-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-constructors-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-constructors-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+
+FAIL Event constructors assert_throws: function "function () {
+ new Event()
+ }" did not throw
+PASS Event constructors 1
+FAIL Event constructors 2 assert_equals: expected (boolean) false but got (undefined) undefined
+FAIL Event constructors 3 assert_equals: expected (boolean) false but got (undefined) undefined
+FAIL Event constructors 4 Event is not a function. (In 'Event("test")', 'Event' is an instance of EventConstructor)
+PASS Event constructors 5
+PASS Event constructors 6
+PASS Event constructors 7
+PASS Event constructors 8
+PASS Event constructors 9
+PASS Event constructors 10
+PASS Event constructors 11
+PASS Event constructors 12
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventconstructorshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-constructors.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-constructors.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-constructors.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,124 @@
</span><ins>+<!doctype html>
+<title>Event constructors</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<script>
+test(function() {
+ assert_throws(new TypeError(), function() {
+ new Event()
+ })
+})
+test(function() {
+ var test_error = { name: "test" }
+ assert_throws(test_error, function() {
+ new Event({ toString: function() { throw test_error; } })
+ })
+})
+test(function() {
+ var ev = new Event("")
+ assert_equals(ev.type, "")
+ assert_equals(ev.target, null)
+ assert_equals(ev.currentTarget, null)
+ assert_equals(ev.eventPhase, Event.NONE)
+ assert_equals(ev.bubbles, false)
+ assert_equals(ev.cancelable, false)
+ assert_equals(ev.defaultPrevented, false)
+ assert_equals(ev.isTrusted, false)
+ assert_true(ev.timeStamp > 0)
+ assert_true("initEvent" in ev)
+})
+test(function() {
+ var ev = new Event("test")
+ assert_equals(ev.type, "test")
+ assert_equals(ev.target, null)
+ assert_equals(ev.currentTarget, null)
+ assert_equals(ev.eventPhase, Event.NONE)
+ assert_equals(ev.bubbles, false)
+ assert_equals(ev.cancelable, false)
+ assert_equals(ev.defaultPrevented, false)
+ assert_equals(ev.isTrusted, false)
+ assert_true(ev.timeStamp > 0)
+ assert_true("initEvent" in ev)
+})
+test(function() {
+ var ev = Event("test")
+ assert_equals(ev.type, "test")
+ assert_equals(ev.target, null)
+ assert_equals(ev.currentTarget, null)
+ assert_equals(ev.eventPhase, Event.NONE)
+ assert_equals(ev.bubbles, false)
+ assert_equals(ev.cancelable, false)
+ assert_equals(ev.defaultPrevented, false)
+ assert_equals(ev.isTrusted, false)
+ assert_true(ev.timeStamp > 0)
+ assert_true("initEvent" in ev)
+})
+test(function() {
+ var ev = new Event("I am an event", { bubbles: true, cancelable: false})
+ assert_equals(ev.type, "I am an event")
+ assert_equals(ev.bubbles, true)
+ assert_equals(ev.cancelable, false)
+})
+test(function() {
+ var ev = new Event("@", { bubblesIGNORED: true, cancelable: true})
+ assert_equals(ev.type, "@")
+ assert_equals(ev.bubbles, false)
+ assert_equals(ev.cancelable, true)
+})
+test(function() {
+ var ev = new Event("@", { "bubbles\0IGNORED": true, cancelable: true})
+ assert_equals(ev.type, "@")
+ assert_equals(ev.bubbles, false)
+ assert_equals(ev.cancelable, true)
+})
+test(function() {
+ var ev = new Event("Xx", { cancelable: true})
+ assert_equals(ev.type, "Xx")
+ assert_equals(ev.bubbles, false)
+ assert_equals(ev.cancelable, true)
+})
+test(function() {
+ var ev = new Event("Xx", {})
+ assert_equals(ev.type, "Xx")
+ assert_equals(ev.bubbles, false)
+ assert_equals(ev.cancelable, false)
+})
+test(function() {
+ var ev = new Event("Xx", {bubbles: true, cancelable: false, sweet: "x"})
+ assert_equals(ev.type, "Xx")
+ assert_equals(ev.bubbles, true)
+ assert_equals(ev.cancelable, false)
+ assert_equals(ev.sweet, undefined)
+})
+test(function() {
+ var called = []
+ var ev = new Event("Xx", {
+ get cancelable() {
+ called.push("cancelable")
+ return false
+ },
+ get bubbles() {
+ called.push("bubbles")
+ return true;
+ },
+ get sweet() {
+ called.push("sweet")
+ return "x"
+ }
+ })
+ assert_array_equals(called, ["bubbles", "cancelable"])
+ assert_equals(ev.type, "Xx")
+ assert_equals(ev.bubbles, true)
+ assert_equals(ev.cancelable, false)
+ assert_equals(ev.sweet, undefined)
+})
+test(function() {
+ var ev = new CustomEvent("$", {detail: 54, sweet: "x", sweet2: "x", cancelable:true})
+ assert_equals(ev.type, "$")
+ assert_equals(ev.bubbles, false)
+ assert_equals(ev.cancelable, true)
+ assert_equals(ev.sweet, undefined)
+ assert_equals(ev.detail, 54)
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventdefaultPreventedexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-defaultPrevented-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-defaultPrevented-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-defaultPrevented-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+
+PASS When an event is created, defaultPrevented should be initialized to false.
+PASS initEvent should work correctly (not cancelable).
+PASS preventDefault() should not change defaultPrevented if cancelable is false.
+PASS initEvent should work correctly (cancelable).
+PASS preventDefault() should change defaultPrevented if cancelable is false.
+PASS initEvent should unset defaultPrevented.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventdefaultPreventedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-defaultPrevented.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-defaultPrevented.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-defaultPrevented.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,42 @@
</span><ins>+<!doctype html>
+<title>Event.defaultPrevented</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+var ev;
+test(function() {
+ ev = document.createEvent("Event");
+ assert_equals(ev.defaultPrevented, false, "defaultPrevented");
+}, "When an event is created, defaultPrevented should be initialized to false.");
+test(function() {
+ ev.initEvent("foo", true, false);
+ assert_equals(ev.bubbles, true, "bubbles");
+ assert_equals(ev.cancelable, false, "cancelable");
+ assert_equals(ev.defaultPrevented, false, "defaultPrevented");
+}, "initEvent should work correctly (not cancelable).");
+test(function() {
+ assert_equals(ev.cancelable, false, "cancelable (before)");
+ ev.preventDefault();
+ assert_equals(ev.cancelable, false, "cancelable (after)");
+ assert_equals(ev.defaultPrevented, false, "defaultPrevented");
+}, "preventDefault() should not change defaultPrevented if cancelable is false.");
+test(function() {
+ ev.initEvent("foo", true, true);
+ assert_equals(ev.bubbles, true, "bubbles");
+ assert_equals(ev.cancelable, true, "cancelable");
+ assert_equals(ev.defaultPrevented, false, "defaultPrevented");
+}, "initEvent should work correctly (cancelable).");
+test(function() {
+ assert_equals(ev.cancelable, true, "cancelable (before)");
+ ev.preventDefault();
+ assert_equals(ev.cancelable, true, "cancelable (after)");
+ assert_equals(ev.defaultPrevented, true, "defaultPrevented");
+}, "preventDefault() should change defaultPrevented if cancelable is false.");
+test(function() {
+ ev.initEvent("foo", true, true);
+ assert_equals(ev.bubbles, true, "bubbles");
+ assert_equals(ev.cancelable, true, "cancelable");
+ assert_equals(ev.defaultPrevented, false, "defaultPrevented");
+}, "initEvent should unset defaultPrevented.");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventdispatchbubblesfalseexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-bubbles-false-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-bubbles-false-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-bubbles-false-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS Event.dispatchEvent with Event.bubbles set to false.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventdispatchbubblesfalsehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-bubbles-false.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-bubbles-false.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-bubbles-false.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,68 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title> Event.bubbles attribute is set to false </title>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-event-initevent">
+<link rel="help" href="https://dom.spec.whatwg.org/#concept-event-dispatch">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<table id="table" border="1" style="display: none">
+ <tbody id="table-body">
+ <tr id="table-row">
+ <td id="table-cell">Shady Grove</td>
+ <td>Aeolian</td>
+ </tr>
+ <tr id="parent">
+ <td id="target">Over the river, Charlie</td>
+ <td>Dorian</td>
+ </tr>
+ </tbody>
+</table>
+<script>
+test(function() {
+ var event_type = "click";
+ var target = document.getElementById("target");
+ var targets = [
+ window,
+ document,
+ document.documentElement,
+ document.body,
+ document.getElementById("table"),
+ document.getElementById("table-body"),
+ document.getElementById("parent"),
+ target,
+ ];
+ var expected_targets = targets.concat(target);
+ var phases = [
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.AT_TARGET,
+ Event.AT_TARGET,
+ ];
+
+
+ var actual_targets = [], actual_phases = [];
+ var test_event = function(evt) {
+ actual_targets.push(evt.currentTarget);
+ actual_phases.push(evt.eventPhase);
+ }
+
+ for (var i = 0; i < targets.length; i++) {
+ targets[i].addEventListener(event_type, test_event, true);
+ targets[i].addEventListener(event_type, test_event, false);
+ }
+
+ var evt = document.createEvent("Event");
+ evt.initEvent(event_type, false, true);
+
+ target.dispatchEvent(evt);
+
+ assert_array_equals(actual_targets, expected_targets, "targets");
+ assert_array_equals(actual_phases, phases, "phases");
+}, "Event.dispatchEvent with Event.bubbles set to false.");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventdispatchhandlerschangedexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-handlers-changed-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-handlers-changed-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-handlers-changed-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS Dispatch additional events inside an event listener
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventdispatchhandlerschangedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-handlers-changed.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-handlers-changed.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-handlers-changed.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,92 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title> Dispatch additional events inside an event listener </title>
+<link rel="help" href="https://dom.spec.whatwg.org/#concept-event-dispatch">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+
+<table id="table" border="1" style="display: none">
+ <tbody id="table-body">
+ <tr id="table-row">
+ <td id="table-cell">Shady Grove</td>
+ <td>Aeolian</td>
+ </tr>
+ <tr id="parent">
+ <td id="target">Over the river, Charlie</td>
+ <td>Dorian</td>
+ </tr>
+ </tbody>
+</table>
+
+<script>
+async_test(function() {
+ var event_type = "bar";
+ var target = document.getElementById("target");
+ var parent = document.getElementById("parent");
+ var tbody = document.getElementById("table-body");
+ var table = document.getElementById("table");
+ var body = document.body;
+ var html = document.documentElement;
+ var targets = [window, document, html, body, table, tbody, parent, target];
+ var expected_targets = [
+ window,
+ document,
+ html,
+ body,
+ table,
+ tbody,
+ parent,
+ target,
+ target,
+ parent,
+ tbody,
+ table,
+ body,
+ html,
+ document,
+ window
+ ];
+ var expected_listeners = [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1];
+
+ var actual_targets = [], actual_listeners = [];
+ var test_event_function = function(i) {
+ return this.step_func(function(evt) {
+ actual_targets.push(evt.currentTarget);
+ actual_listeners.push(i);
+
+ if (evt.eventPhase != evt.BUBBLING_PHASE && evt.currentTarget.foo != 1) {
+ evt.currentTarget.removeEventListener(event_type, event_handlers[0], true);
+ evt.currentTarget.addEventListener(event_type, event_handlers[2], true);
+ evt.currentTarget.foo = 1;
+ }
+
+ if (evt.eventPhase != evt.CAPTURING_PHASE && evt.currentTarget.foo != 3) {
+ evt.currentTarget.removeEventListener(event_type, event_handlers[0], false);
+ evt.currentTarget.addEventListener(event_type, event_handlers[3], false);
+ evt.currentTarget.foo = 3;
+ }
+ });
+ }.bind(this);
+ var event_handlers = [
+ test_event_function(0),
+ test_event_function(1),
+ test_event_function(2),
+ test_event_function(3),
+ ];
+
+ for (var i = 0; i < targets.length; ++i) {
+ targets[i].addEventListener(event_type, event_handlers[0], true);
+ targets[i].addEventListener(event_type, event_handlers[1], false);
+ }
+
+ var evt = document.createEvent("Event");
+ evt.initEvent(event_type, true, true);
+ target.dispatchEvent(evt);
+
+ assert_array_equals(actual_targets, expected_targets, "actual_targets");
+ assert_array_equals(actual_listeners, expected_listeners, "actual_listeners");
+
+ this.done();
+});
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventdispatchomittedcaptureexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-omitted-capture-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-omitted-capture-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-omitted-capture-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS EventTarget.addEventListener with the capture argument omitted
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventdispatchomittedcapturehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-omitted-capture.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-omitted-capture.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-omitted-capture.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,70 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>EventTarget.addEventListener: capture argument omitted</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener">
+<link rel="help" href="https://dom.spec.whatwg.org/#concept-event-dispatch">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<table id="table" border="1" style="display: none">
+ <tbody id="table-body">
+ <tr id="table-row">
+ <td id="table-cell">Shady Grove</td>
+ <td>Aeolian</td>
+ </tr>
+ <tr id="parent">
+ <td id="target">Over the river, Charlie</td>
+ <td>Dorian</td>
+ </tr>
+ </tbody>
+</table>
+<script>
+test(function() {
+ var event_type = "foo";
+ var target = document.getElementById("target");
+ var targets = [
+ target,
+ document.getElementById("parent"),
+ document.getElementById("table-body"),
+ document.getElementById("table"),
+ document.body,
+ document.documentElement,
+ document,
+ window
+ ];
+ var phases = [
+ Event.AT_TARGET,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE
+ ];
+
+ var actual_targets = [], actual_phases = [];
+ var test_event = function(evt) {
+ actual_targets.push(evt.currentTarget);
+ actual_phases.push(evt.eventPhase);
+ }
+
+ for (var i = 0; i < targets.length; i++) {
+ targets[i].addEventListener(event_type, test_event);
+ }
+
+ var evt = document.createEvent("Event");
+ evt.initEvent(event_type, true, true);
+
+ target.dispatchEvent(evt);
+
+ for (var i = 0; i < targets.length; i++) {
+ targets[i].removeEventListener(event_type, test_event);
+ }
+
+ target.dispatchEvent(evt);
+
+ assert_array_equals(actual_targets, targets, "targets");
+ assert_array_equals(actual_phases, phases, "phases");
+}, "EventTarget.addEventListener with the capture argument omitted");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventdispatchredispatchexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-redispatch-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-redispatch-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-redispatch-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+FAIL EventTarget#dispatchEvent(): redispatching a native event assert_true: Should be trusted when first handled expected true got undefined
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventdispatchredispatchhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-redispatch.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-redispatch.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-redispatch.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=urf-8>
+<title>EventTarget#dispatchEvent(): redispatching a native event</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var event;
+ document.addEventListener("DOMContentLoaded", this.step_func(function(e) {
+ assert_true(e.isTrusted, "Should be trusted when first handled");
+ event = e;
+ }), true);
+
+ window.onload = this.step_func_done(function() {
+ var received = 0;
+ var target = document.createElement("span");
+ target.addEventListener("DOMContentLoaded", this.step_func(function(e) {
+ assert_false(e.isTrusted, "Should not be trusted during redispatching");
+ ++received;
+ }), true);
+ assert_true(event.isTrusted, "Should be trusted before redispatching");
+ target.dispatchEvent(event);
+ assert_false(event.isTrusted, "Should not be trusted after redispatching");
+ assert_equals(received, 1);
+ });
+});
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventdispatchreenterexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-reenter-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-reenter-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-reenter-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS Dispatch additional events inside an event listener
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventdispatchreenterhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-reenter.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-reenter.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-reenter.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,66 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title> Dispatch additional events inside an event listener </title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<table id="table" border="1" style="display: none">
+ <tbody id="table-body">
+ <tr id="table-row">
+ <td id="table-cell">Shady Grove</td>
+ <td>Aeolian</td>
+ </tr>
+ <tr id="parent">
+ <td id="target">Over the river, Charlie</td>
+ <td>Dorian</td>
+ </tr>
+ </tbody>
+</table>
+<script>
+test(function() {
+ var event_type = "foo";
+ var target = document.getElementById("target");
+ var parent = document.getElementById("parent");
+ var tbody = document.getElementById("table-body");
+ var table = document.getElementById("table");
+ var body = document.body;
+ var html = document.documentElement;
+ var targets = [window, document, html, body, table, tbody, parent, target];
+ var expected_targets = [
+ window, document, html, body, table,
+ target, parent, tbody,
+ table, body, html, document, window,
+ tbody, parent, target];
+ var actual_targets = [];
+ var expected_types = [
+ "foo", "foo", "foo", "foo", "foo",
+ "bar", "bar", "bar",
+ "bar", "bar", "bar", "bar", "bar",
+ "foo", "foo", "foo"
+ ];
+
+ var actual_targets = [], actual_types = [];
+ var test_event = this.step_func(function(evt) {
+ actual_targets.push(evt.currentTarget);
+ actual_types.push(evt.type);
+
+ if (table == evt.currentTarget && event_type == evt.type) {
+ var e = document.createEvent("Event");
+ e.initEvent("bar", true, true);
+ target.dispatchEvent(e);
+ }
+ });
+
+ for (var i = 0; i < targets.length; ++i) {
+ targets[i].addEventListener(event_type, test_event, true);
+ targets[i].addEventListener("bar", test_event, false);
+ }
+
+ var evt = document.createEvent("Event");
+ evt.initEvent(event_type, false, true);
+ target.dispatchEvent(evt);
+
+ assert_array_equals(actual_targets, expected_targets, "actual_targets");
+ assert_array_equals(actual_types, expected_types, "actual_types");
+});
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventdispatchtargetmovedexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-moved-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-moved-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-moved-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS Event propagation path when an element in it is moved within the DOM
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventdispatchtargetmovedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-moved.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-moved.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-moved.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,73 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title> Determined event propagation path - target moved </title>
+<link rel="help" href="https://dom.spec.whatwg.org/#concept-event-dispatch">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<table id="table" border="1" style="display: none">
+ <tbody id="table-body">
+ <tr id="table-row">
+ <td id="table-cell">Shady Grove</td>
+ <td>Aeolian</td>
+ </tr>
+ <tr id="parent">
+ <td id="target">Over the river, Charlie</td>
+ <td>Dorian</td>
+ </tr>
+ </tbody>
+</table>
+<script>
+test(function() {
+ var event_type = "foo";
+ var target = document.getElementById("target");
+ var parent = document.getElementById("parent");
+ var tbody = document.getElementById("table-body");
+ var table = document.getElementById("table");
+ var body = document.body;
+ var html = document.documentElement;
+ var targets = [window, document, html, body, table, tbody, parent, target];
+ var expected_targets = targets.concat([target, parent, tbody, table, body, html, document, window]);
+ var phases = [
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.AT_TARGET,
+ Event.AT_TARGET,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ ];
+
+ var actual_targets = [], actual_phases = [];
+ var test_event = this.step_func(function(evt) {
+ if (parent === target.parentNode) {
+ var table_row = document.getElementById("table-row");
+ table_row.appendChild(parent.removeChild(target));
+ }
+
+ actual_targets.push(evt.currentTarget);
+ actual_phases.push(evt.eventPhase);
+ });
+
+ for (var i = 0; i < targets.length; i++) {
+ targets[i].addEventListener(event_type, test_event, true);
+ targets[i].addEventListener(event_type, test_event, false);
+ }
+
+ var evt = document.createEvent("Event");
+ evt.initEvent(event_type, true, true);
+ target.dispatchEvent(evt);
+
+ assert_array_equals(actual_targets, expected_targets, "targets");
+ assert_array_equals(actual_phases, phases, "phases");
+}, "Event propagation path when an element in it is moved within the DOM");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventdispatchtargetremovedexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-removed-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-removed-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-removed-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS Event propagation path when an element in it is removed from the DOM
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventdispatchtargetremovedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-removed.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-removed.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-removed.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,72 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Determined event propagation path - target removed</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#concept-event-dispatch">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<table id="table" border="1" style="display: none">
+ <tbody id="table-body">
+ <tr id="table-row">
+ <td id="table-cell">Shady Grove</td>
+ <td>Aeolian</td>
+ </tr>
+ <tr id="parent">
+ <td id="target">Over the river, Charlie</td>
+ <td>Dorian</td>
+ </tr>
+ </tbody>
+</table>
+<script>
+test(function() {
+ var event_type = "foo";
+ var target = document.getElementById("target");
+ var parent = document.getElementById("parent");
+ var tbody = document.getElementById("table-body");
+ var table = document.getElementById("table");
+ var body = document.body;
+ var html = document.documentElement;
+ var targets = [window, document, html, body, table, tbody, parent, target];
+ var expected_targets = targets.concat([target, parent, tbody, table, body, html, document, window]);
+ var phases = [
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.CAPTURING_PHASE,
+ Event.AT_TARGET,
+ Event.AT_TARGET,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ Event.BUBBLING_PHASE,
+ ];
+
+ var actual_targets = [], actual_phases = [];
+ var test_event = this.step_func(function(evt) {
+ if (parent === target.parentNode) {
+ parent.removeChild(target);
+ }
+
+ actual_targets.push(evt.currentTarget);
+ actual_phases.push(evt.eventPhase);
+ });
+
+ for (var i = 0; i < targets.length; i++) {
+ targets[i].addEventListener(event_type, test_event, true);
+ targets[i].addEventListener(event_type, test_event, false);
+ }
+
+ var evt = document.createEvent("Event");
+ evt.initEvent(event_type, true, true);
+ target.dispatchEvent(evt);
+
+ assert_array_equals(actual_targets, expected_targets, "targets");
+ assert_array_equals(actual_phases, phases, "phases");
+}, "Event propagation path when an element in it is removed from the DOM");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventinitEventexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-initEvent-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-initEvent-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-initEvent-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+
+FAIL Properties of initEvent(type, true, true) assert_equals: isTrusted expected (boolean) false but got (undefined) undefined
+FAIL Properties of initEvent(type, true, false) assert_equals: isTrusted expected (boolean) false but got (undefined) undefined
+FAIL Properties of initEvent(type, false, true) assert_equals: isTrusted expected (boolean) false but got (undefined) undefined
+FAIL Properties of initEvent(type, false, false) assert_equals: isTrusted expected (boolean) false but got (undefined) undefined
+PASS Calling initEvent multiple times (getting type).
+PASS Calling initEvent multiple times (not getting type).
+PASS Calling initEvent must not have an effect during dispatching.
+PASS Calling initEvent must unset the stop propagation flag.
+PASS Calling initEvent during propagation.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventinitEventhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-initEvent.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-initEvent.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-initEvent.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,121 @@
</span><ins>+<!DOCTYPE html>
+<title>Event.initEvent</title>
+<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+var booleans = [true, false];
+booleans.forEach(function(bubbles) {
+ booleans.forEach(function(cancelable) {
+ test(function() {
+ var e = document.createEvent("Event")
+ e.initEvent("type", bubbles, cancelable)
+
+ // Step 3.
+ // Can't test the stop propagation flag and stop immediate propagation flag.
+ assert_equals(e.defaultPrevented, false, "defaultPrevented")
+ // Step 4.
+ assert_equals(e.isTrusted, false, "isTrusted")
+ // Step 5.
+ assert_equals(e.target, null, "target")
+ // Step 6.
+ assert_equals(e.type, "type", "type")
+ // Step 7.
+ assert_equals(e.bubbles, bubbles, "bubbles")
+ // Step 8.
+ assert_equals(e.cancelable, cancelable, "cancelable")
+ }, "Properties of initEvent(type, " + bubbles + ", " + cancelable + ")")
+ })
+})
+
+test(function() {
+ var e = document.createEvent("Event")
+ e.initEvent("type 1", true, false)
+ assert_equals(e.type, "type 1", "type (first init)")
+ assert_equals(e.bubbles, true, "bubbles (first init)")
+ assert_equals(e.cancelable, false, "cancelable (first init)")
+
+ e.initEvent("type 2", false, true)
+ assert_equals(e.type, "type 2", "type (second init)")
+ assert_equals(e.bubbles, false, "bubbles (second init)")
+ assert_equals(e.cancelable, true, "cancelable (second init)")
+}, "Calling initEvent multiple times (getting type).")
+
+test(function() {
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=998809
+ var e = document.createEvent("Event")
+ e.initEvent("type 1", true, false)
+ assert_equals(e.bubbles, true, "bubbles (first init)")
+ assert_equals(e.cancelable, false, "cancelable (first init)")
+
+ e.initEvent("type 2", false, true)
+ assert_equals(e.type, "type 2", "type (second init)")
+ assert_equals(e.bubbles, false, "bubbles (second init)")
+ assert_equals(e.cancelable, true, "cancelable (second init)")
+}, "Calling initEvent multiple times (not getting type).")
+
+// Step 2.
+async_test(function() {
+ // https://www.w3.org/Bugs/Public/show_bug.cgi?id=17715
+
+ var e = document.createEvent("Event")
+ e.initEvent("type", false, false)
+ assert_equals(e.type, "type", "type (first init)")
+ assert_equals(e.bubbles, false, "bubbles (first init)")
+ assert_equals(e.cancelable, false, "cancelable (first init)")
+
+ var target = document.createElement("div")
+ target.addEventListener("type", this.step_func(function() {
+ e.initEvent("fail", true, true)
+ assert_equals(e.type, "type", "type (second init)")
+ assert_equals(e.bubbles, false, "bubbles (second init)")
+ assert_equals(e.cancelable, false, "cancelable (second init)")
+ }), false)
+
+ assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true")
+
+ this.done()
+}, "Calling initEvent must not have an effect during dispatching.")
+
+async_test(function() {
+ var e = document.createEvent("Event")
+ e.initEvent("type", false, false)
+ e.stopPropagation()
+
+ var target = document.createElement("div")
+ target.addEventListener("type", this.step_func(function() {
+ assert_unreached("")
+ }), false)
+ assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true")
+ assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true")
+
+ e.initEvent("type", false, false)
+ var called = false
+ var target = document.createElement("div")
+ target.addEventListener("type", this.step_func(function() {
+ called = true
+ }), false)
+ assert_false(called)
+ assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true")
+ assert_true(called)
+
+ this.done()
+}, "Calling initEvent must unset the stop propagation flag.")
+
+async_test(function() {
+ var e = document.createEvent("Event")
+ e.initEvent("type", false, false)
+
+ var target = document.createElement("div")
+ target.addEventListener("type", this.step_func(function() {
+ e.initEvent("type2", true, true);
+ assert_equals(e.type, "type", "initEvent type setter should short-circuit");
+ assert_false(e.bubbles, "initEvent bubbles setter should short-circuit");
+ assert_false(e.cancelable, "initEvent cancelable setter should short-circuit");
+ }), false)
+ assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true")
+
+ this.done()
+}, "Calling initEvent during propagation.")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventpropagationexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-propagation-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-propagation-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-propagation-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+
+PASS Newly-created Event
+PASS After stopPropagation()
+FAIL Reinitialized after stopPropagation() assert_equals: Propagation flag expected true but got false
+PASS After stopImmediatePropagation()
+FAIL Reinitialized after stopImmediatePropagation() assert_equals: Propagation flag expected true but got false
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventpropagationhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-propagation.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-propagation.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-propagation.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,38 @@
</span><ins>+<!doctype html>
+<title>Event propagation tests</title>
+<link rel=author title="Aryeh Gregor" href=ayg@aryeh.name>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script>
+"use strict";
+
+function testPropagationFlag(ev, expected, desc) {
+ test(function() {
+ var called = false;
+ var callback = function() { called = true };
+ document.head.addEventListener("foo", callback);
+ document.head.dispatchEvent(ev);
+ // Gecko resets the flags after dispatching; it will happily dispatch
+ // the event the second time around.
+ document.head.dispatchEvent(ev);
+ assert_equals(called, expected, "Propagation flag");
+ document.head.removeEventListener("foo", callback);
+ }, desc);
+}
+
+var ev = document.createEvent("Event");
+ev.initEvent("foo", true, false);
+testPropagationFlag(ev, true, "Newly-created Event");
+ev.stopPropagation();
+testPropagationFlag(ev, false, "After stopPropagation()");
+ev.initEvent("foo", true, false);
+testPropagationFlag(ev, true, "Reinitialized after stopPropagation()");
+
+var ev = document.createEvent("Event");
+ev.initEvent("foo", true, false);
+ev.stopImmediatePropagation();
+testPropagationFlag(ev, false, "After stopImmediatePropagation()");
+ev.initEvent("foo", true, false);
+testPropagationFlag(ev, true, "Reinitialized after stopImmediatePropagation()");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventtypeemptyexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-type-empty-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-type-empty-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-type-empty-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+
+FAIL initEvent UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0
+FAIL Constructor UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventtypeemptyhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-type-empty.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-type-empty.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-type-empty.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+<!DOCTYPE html>
+<title>Event.type set to the empty string</title>
+<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com">
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-event-type">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+function do_test(t, e) {
+ assert_equals(e.type, "", "type");
+ assert_equals(e.bubbles, false, "bubbles");
+ assert_equals(e.cancelable, false, "cancelable");
+
+ var target = document.createElement("div");
+ var handled = false;
+ target.addEventListener("", t.step_func(function(e) {
+ handled = true;
+ }));
+ assert_true(target.dispatchEvent(e));
+ assert_true(handled);
+}
+
+async_test(function() {
+ var e = document.createEvent("Event");
+ e.initEvent("", false, false);
+ do_test(this, e);
+ this.done();
+}, "initEvent");
+
+async_test(function() {
+ var e = new Event("");
+ do_test(this, e);
+ this.done();
+}, "Constructor");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventtypeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-type-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-type-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-type-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+
+PASS Event.type should initially be the empty string
+PASS Event.type should be initialized by initEvent
+PASS Event.type should be initialized by the constructor
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventtypehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/Event-type.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/Event-type.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/Event-type.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+<!DOCTYPE html>
+<title>Event.type</title>
+<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com">
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-event-type">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ var e = document.createEvent("Event")
+ assert_equals(e.type, "");
+}, "Event.type should initially be the empty string");
+test(function() {
+ var e = document.createEvent("Event")
+ e.initEvent("foo", false, false)
+ assert_equals(e.type, "foo")
+}, "Event.type should be initialized by initEvent");
+test(function() {
+ var e = new Event("bar")
+ assert_equals(e.type, "bar")
+}, "Event.type should be initialized by the constructor");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventTargetaddEventListenerexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-addEventListener-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-addEventListener-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-addEventListener-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS Adding a null event listener should succeed
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventTargetaddEventListenerhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-addEventListener.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-addEventListener.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-addEventListener.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>EventTarget.addEventListener</title>
+<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com">
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+// Step 1.
+test(function() {
+ assert_equals(document.addEventListener("x", null, false), undefined);
+ assert_equals(document.addEventListener("x", null, true), undefined);
+ assert_equals(document.addEventListener("x", null), undefined);
+}, "Adding a null event listener should succeed");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventTargetdispatchEventexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+CONSOLE MESSAGE: line 60: Error
+
+FAIL Calling dispatchEvent(null). assert_throws: function "function () { document.dispatchEvent(null) }" threw object "Error: UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0" ("UNSPECIFIED_EVENT_TYPE_ERR") expected object "TypeError" ("TypeError")
+FAIL If the event's initialized flag is not set, an InvalidStateError must be thrown (CustomEvent). assert_throws: function "function () { document.dispatchEvent(e) }" threw object "Error: UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0" that is not a DOMException InvalidStateError: property "code" is equal to 0, expected 11
+FAIL If the event's initialized flag is not set, an InvalidStateError must be thrown (Event). assert_throws: function "function () { document.dispatchEvent(e) }" threw object "Error: UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0" that is not a DOMException InvalidStateError: property "code" is equal to 0, expected 11
+FAIL If the event's initialized flag is not set, an InvalidStateError must be thrown (Events). assert_throws: function "function () { document.dispatchEvent(e) }" threw object "Error: UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0" that is not a DOMException InvalidStateError: property "code" is equal to 0, expected 11
+FAIL If the event's initialized flag is not set, an InvalidStateError must be thrown (HTMLEvents). assert_throws: function "function () { document.dispatchEvent(e) }" threw object "Error: UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0" that is not a DOMException InvalidStateError: property "code" is equal to 0, expected 11
+FAIL If the event's initialized flag is not set, an InvalidStateError must be thrown (KeyboardEvent). assert_throws: function "function () { document.dispatchEvent(e) }" threw object "Error: UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0" that is not a DOMException InvalidStateError: property "code" is equal to 0, expected 11
+FAIL If the event's initialized flag is not set, an InvalidStateError must be thrown (KeyEvents). NotSupportedError: DOM Exception 9
+FAIL If the event's initialized flag is not set, an InvalidStateError must be thrown (MessageEvent). assert_throws: function "function () { document.dispatchEvent(e) }" threw object "Error: UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0" that is not a DOMException InvalidStateError: property "code" is equal to 0, expected 11
+FAIL If the event's initialized flag is not set, an InvalidStateError must be thrown (MouseEvent). assert_throws: function "function () { document.dispatchEvent(e) }" threw object "Error: UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0" that is not a DOMException InvalidStateError: property "code" is equal to 0, expected 11
+FAIL If the event's initialized flag is not set, an InvalidStateError must be thrown (MouseEvents). assert_throws: function "function () { document.dispatchEvent(e) }" threw object "Error: UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0" that is not a DOMException InvalidStateError: property "code" is equal to 0, expected 11
+FAIL If the event's initialized flag is not set, an InvalidStateError must be thrown (TouchEvent). NotSupportedError: DOM Exception 9
+FAIL If the event's initialized flag is not set, an InvalidStateError must be thrown (UIEvent). assert_throws: function "function () { document.dispatchEvent(e) }" threw object "Error: UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0" that is not a DOMException InvalidStateError: property "code" is equal to 0, expected 11
+FAIL If the event's initialized flag is not set, an InvalidStateError must be thrown (UIEvents). assert_throws: function "function () { document.dispatchEvent(e) }" threw object "Error: UNSPECIFIED_EVENT_TYPE_ERR: DOM Events Exception 0" that is not a DOMException InvalidStateError: property "code" is equal to 0, expected 11
+FAIL If the event's dispatch flag is set, an InvalidStateError must be thrown. assert_throws: function "function () {
+ target.dispatchEvent(e)
+ }" threw object "Error: DISPATCH_REQUEST_ERR: DOM Events Exception 1" that is not a DOMException InvalidStateError: property "code" is equal to 1, expected 11
+PASS Exceptions from event listeners must not be propagated.
+FAIL Event listeners added during dispatch should be called assert_array_equals: lengths differ, expected 2 got 0
+PASS Event listeners should be called in order of addition
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventTargetdispatchEventreturnvalueexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent-returnvalue-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent-returnvalue-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent-returnvalue-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS Return value of EventTarget.dispatchEvent.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventTargetdispatchEventreturnvaluehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent-returnvalue.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent-returnvalue.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent-returnvalue.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,43 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>EventTarget.dispatchEvent: return value</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#concept-event-dispatch">
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-event-preventdefault">
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-event-defaultprevented">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<table id="table" border="1" style="display: none">
+ <tbody id="table-body">
+ <tr id="table-row">
+ <td id="table-cell">Shady Grove</td>
+ <td>Aeolian</td>
+ </tr>
+ <tr id="parent">
+ <td id="target">Over the river, Charlie</td>
+ <td>Dorian</td>
+ </tr>
+ </tbody>
+</table>
+<script>
+test(function() {
+ var event_type = "foo";
+ var target = document.getElementById("target");
+ var parent = document.getElementById("parent");
+ var default_prevented;
+
+ parent.addEventListener(event_type, function(e) {}, true);
+ target.addEventListener(event_type, function(e) {
+ evt.preventDefault();
+ default_prevented = evt.defaultPrevented;
+ }, true);
+ target.addEventListener(event_type, function(e) {}, true);
+
+ var evt = document.createEvent("Event");
+ evt.initEvent(event_type, true, true);
+
+ assert_true(parent.dispatchEvent(evt));
+ assert_false(target.dispatchEvent(evt));
+ assert_true(default_prevented);
+}, "Return value of EventTarget.dispatchEvent.");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventTargetdispatchEventhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,104 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>EventTarget.dispatchEvent</title>
+<link rel="author" title="Olli Pettay" href="mailto:Olli.Pettay@gmail.com">
+<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com">
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../nodes/Document-createEvent.js"></script>
+<div id="log"></div>
+<script>
+setup({
+ "allow_uncaught_exception": true,
+})
+
+test(function() {
+ assert_throws(new TypeError(), function() { document.dispatchEvent(null) })
+}, "Calling dispatchEvent(null).")
+
+aliases.forEach(function(alias) {
+ test(function() {
+ var e = document.createEvent(alias[0])
+ assert_equals(e.type, "", "Event type should be empty string before initialization")
+ assert_throws("InvalidStateError", function() { document.dispatchEvent(e) })
+ }, "If the event's initialized flag is not set, an InvalidStateError must be thrown (" + alias [0] + ").")
+})
+
+var dispatch_dispatch = async_test("If the event's dispatch flag is set, an InvalidStateError must be thrown.")
+dispatch_dispatch.step(function() {
+ var e = document.createEvent("Event")
+ e.initEvent("type", false, false)
+
+ var target = document.createElement("div")
+ target.addEventListener("type", dispatch_dispatch.step_func(function() {
+ assert_throws("InvalidStateError", function() {
+ target.dispatchEvent(e)
+ })
+ assert_throws("InvalidStateError", function() {
+ document.dispatchEvent(e)
+ })
+ }), false)
+
+ assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true")
+
+ dispatch_dispatch.done()
+})
+
+test(function() {
+ // https://www.w3.org/Bugs/Public/show_bug.cgi?id=17713
+ // https://www.w3.org/Bugs/Public/show_bug.cgi?id=17714
+
+ var e = document.createEvent("Event")
+ e.initEvent("type", false, false)
+
+ var called = []
+
+ var target = document.createElement("div")
+ target.addEventListener("type", function() {
+ called.push("First")
+ throw new Error()
+ }, false)
+
+ target.addEventListener("type", function() {
+ called.push("Second")
+ }, false)
+
+ assert_equals(target.dispatchEvent(e), true, "dispatchEvent must return true")
+ assert_array_equals(called, ["First", "Second"],
+ "Should have continued to call other event listeners")
+}, "Exceptions from event listeners must not be propagated.")
+
+async_test(function() {
+ var results = []
+ var outerb = document.createElement("b")
+ var middleb = outerb.appendChild(document.createElement("b"))
+ var innerb = middleb.appendChild(document.createElement("b"))
+ outerb.addEventListener("x", this.step_func(function() {
+ middleb.addEventListener("x", this.step_func(function() {
+ results.push("middle")
+ }), true)
+ results.push("outer")
+ }), true)
+ innerb.dispatchEvent(new Event("x"))
+ assert_array_equals(results, ["outer", "middle"])
+ this.done()
+}, "Event listeners added during dispatch should be called");
+
+async_test(function() {
+ var results = []
+ var b = document.createElement("b")
+ b.addEventListener("x", this.step_func(function() {
+ results.push(1)
+ }), true)
+ b.addEventListener("x", this.step_func(function() {
+ results.push(2)
+ }), false)
+ b.addEventListener("x", this.step_func(function() {
+ results.push(3)
+ }), true)
+ b.dispatchEvent(new Event("x"))
+ assert_array_equals(results, [1, 2, 3])
+ this.done()
+}, "Event listeners should be called in order of addition")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventTargetremoveEventListenerexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-removeEventListener-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-removeEventListener-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-removeEventListener-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS removing a null event listener should succeed
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsEventTargetremoveEventListenerhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-removeEventListener.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-removeEventListener.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/EventTarget-removeEventListener.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>EventTarget.removeEventListener</title>
+<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com">
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+// Step 1.
+test(function() {
+ assert_equals(document.removeEventListener("x", null, false), undefined);
+ assert_equals(document.removeEventListener("x", null, true), undefined);
+ assert_equals(document.removeEventListener("x", null), undefined);
+}, "removing a null event listener should succeed");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsProgressEventexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/ProgressEvent-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/ProgressEvent-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/ProgressEvent-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+
+FAIL Default event values. assert_equals: expected (boolean) false but got (undefined) undefined
+FAIL document.createEvent() should not work with ProgressEvent. assert_throws: function "function () {
+ document.createEvent("ProgressEvent")
+ }" did not throw
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsProgressEventhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/ProgressEvent.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/ProgressEvent.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/ProgressEvent.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,25 @@
</span><ins>+<!doctype html>
+<title>ProgressEvent constructor</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<script>
+test(function() {
+ var ev = new ProgressEvent("test")
+ assert_equals(ev.type, "test")
+ assert_equals(ev.target, null)
+ assert_equals(ev.currentTarget, null)
+ assert_equals(ev.eventPhase, Event.NONE)
+ assert_equals(ev.bubbles, false)
+ assert_equals(ev.cancelable, false)
+ assert_equals(ev.defaultPrevented, false)
+ assert_equals(ev.isTrusted, false)
+ assert_true(ev.timeStamp > 0)
+ assert_true("initEvent" in ev)
+}, "Default event values.")
+test(function() {
+ assert_throws("NotSupportedError", function() {
+ document.createEvent("ProgressEvent")
+ })
+}, "document.createEvent() should not work with ProgressEvent.")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomeventsw3cimportlog"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/events/w3c-import.log (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/events/w3c-import.log         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/events/w3c-import.log        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+The tests in this directory were imported from the W3C repository.
+Do NOT modify these tests directly in Webkit.
+Instead, create a pull request on the W3C CSS or WPT github:
+        https://github.com/w3c/csswg-test
+        https://github.com/w3c/web-platform-tests
+
+Then run the Tools/Scripts/import-w3c-tests in Webkit to reimport
+
+Do NOT modify or remove this file
+
+------------------------------------------------------------------------
+Properties requiring vendor prefixes:
+None
+Property values requiring vendor prefixes:
+None
+------------------------------------------------------------------------
+List of files:
+/LayoutTests/http/tests/w3c/dom/events/Event-constants.html
+/LayoutTests/http/tests/w3c/dom/events/Event-constructors.html
+/LayoutTests/http/tests/w3c/dom/events/Event-defaultPrevented.html
+/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-bubbles-false.html
+/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-handlers-changed.html
+/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-omitted-capture.html
+/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-redispatch.html
+/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-reenter.html
+/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-moved.html
+/LayoutTests/http/tests/w3c/dom/events/Event-dispatch-target-removed.html
+/LayoutTests/http/tests/w3c/dom/events/Event-initEvent.html
+/LayoutTests/http/tests/w3c/dom/events/Event-propagation.html
+/LayoutTests/http/tests/w3c/dom/events/Event-type-empty.html
+/LayoutTests/http/tests/w3c/dom/events/Event-type.html
+/LayoutTests/http/tests/w3c/dom/events/EventTarget-addEventListener.html
+/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent-returnvalue.html
+/LayoutTests/http/tests/w3c/dom/events/EventTarget-dispatchEvent.html
+/LayoutTests/http/tests/w3c/dom/events/EventTarget-removeEventListener.html
+/LayoutTests/http/tests/w3c/dom/events/ProgressEvent.html
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomhistoricalexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/historical-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/historical-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/historical-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,60 @@
</span><ins>+
+FAIL Historical DOM features must be removed: CDATASection assert_equals: expected (undefined) undefined but got (object) object "[object CDATASectionConstructor]"
+PASS Historical DOM features must be removed: DOMConfiguration
+PASS Historical DOM features must be removed: DOMError
+PASS Historical DOM features must be removed: DOMErrorHandler
+PASS Historical DOM features must be removed: DOMImplementationList
+PASS Historical DOM features must be removed: DOMImplementationSource
+PASS Historical DOM features must be removed: DOMLocator
+PASS Historical DOM features must be removed: DOMObject
+PASS Historical DOM features must be removed: DOMUserData
+FAIL Historical DOM features must be removed: Entity assert_equals: expected (undefined) undefined but got (object) object "[object EntityConstructor]"
+FAIL Historical DOM features must be removed: EntityReference assert_equals: expected (undefined) undefined but got (object) object "[object EntityReferenceConstructor]"
+FAIL Historical DOM features must be removed: EventException assert_equals: expected (undefined) undefined but got (object) object "[object EventExceptionConstructor]"
+PASS Historical DOM features must be removed: NameList
+PASS Historical DOM features must be removed: Notation
+PASS Historical DOM features must be removed: TypeInfo
+PASS Historical DOM features must be removed: UserDataHandler
+FAIL Historical DOM features must be removed: RangeException assert_equals: expected (undefined) undefined but got (object) object "[object RangeExceptionConstructor]"
+FAIL Historical DOM features must be removed: createCDATASection assert_equals: expected (undefined) undefined but got (function) function "function createCDATASection() {
+ [native code]
+}"
+FAIL Historical DOM features must be removed: createEntityReference assert_equals: expected (undefined) undefined but got (function) function "function createEntityReference() {
+ [native code]
+}"
+FAIL Historical DOM features must be removed: xmlEncoding assert_equals: expected (undefined) undefined but got (object) null
+FAIL Historical DOM features must be removed: xmlStandalone assert_equals: expected (undefined) undefined but got (boolean) false
+FAIL Historical DOM features must be removed: xmlVersion assert_equals: expected (undefined) undefined but got (object) null
+PASS Historical DOM features must be removed: strictErrorChecking
+PASS Historical DOM features must be removed: domConfig
+PASS Historical DOM features must be removed: normalizeDocument
+PASS Historical DOM features must be removed: renameNode
+FAIL Historical DOM features must be removed: charset assert_equals: expected (undefined) undefined but got (string) "ISO-8859-1"
+FAIL Historical DOM features must be removed: defaultCharset assert_equals: expected (undefined) undefined but got (string) "ISO-8859-1"
+FAIL Historical DOM features must be removed: height assert_equals: expected (undefined) undefined but got (number) 600
+FAIL Historical DOM features must be removed: width assert_equals: expected (undefined) undefined but got (number) 800
+PASS DOMImplementation.getFeature() must be nuked.
+PASS Historical DOM features must be removed: schemaTypeInfo
+PASS Historical DOM features must be removed: setIdAttribute
+PASS Historical DOM features must be removed: setIdAttributeNS
+PASS Historical DOM features must be removed: setIdAttributeNode
+FAIL DocumentType member must be nuked: entities assert_equals: expected (undefined) undefined but got (object) null
+FAIL DocumentType member must be nuked: notations assert_equals: expected (undefined) undefined but got (object) null
+FAIL DocumentType member must be nuked: internalSubset assert_equals: expected (undefined) undefined but got (object) null
+PASS Text member must be nuked: isElementContentWhitespace
+FAIL Text member must be nuked: replaceWholeText assert_equals: expected (undefined) undefined but got (function) function "function replaceWholeText() {
+ [native code]
+}"
+PASS Node member must be nuked: hasAttributes
+PASS Node member must be nuked: attributes
+FAIL Node member must be nuked: namespaceURI assert_equals: expected (undefined) undefined but got (object) null
+FAIL Node member must be nuked: prefix assert_equals: expected (undefined) undefined but got (object) null
+FAIL Node member must be nuked: localName assert_equals: expected (undefined) undefined but got (object) null
+FAIL Node member must be nuked: isSupported assert_equals: expected (undefined) undefined but got (function) function "function isSupported() {
+ [native code]
+}"
+PASS Node member must be nuked: getFeature
+PASS Node member must be nuked: getUserData
+PASS Node member must be nuked: setUserData
+PASS Window member must be nuked: attachEvent
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomhistoricalhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/historical.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/historical.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/historical.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,133 @@
</span><ins>+<!DOCTYPE html>
+<title>Historical DOM features must be removed</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+function isInterfaceNuked(name) {
+ test(function() {
+ assert_equals(window[name], undefined)
+ }, "Historical DOM features must be removed: " + name)
+}
+var nukedInterfaces = [
+ "CDATASection",
+ "DOMConfiguration",
+ "DOMError",
+ "DOMErrorHandler",
+ "DOMImplementationList",
+ "DOMImplementationSource",
+ "DOMLocator",
+ "DOMObject",
+ "DOMUserData",
+ "Entity",
+ "EntityReference",
+ "EventException", // DOM Events
+ "NameList",
+ "Notation",
+ "TypeInfo",
+ "UserDataHandler",
+ "RangeException" // DOM Range
+]
+nukedInterfaces.forEach(isInterfaceNuked)
+
+function isNukedFromDocument(name) {
+ test(function() {
+ var doc = document.implementation.createDocument(null,null,null)
+ assert_equals(document[name], undefined)
+ assert_equals(doc[name], undefined)
+ }, "Historical DOM features must be removed: " + name)
+}
+var documentNuked = [
+ "createCDATASection",
+ "createEntityReference",
+ "xmlEncoding",
+ "xmlStandalone",
+ "xmlVersion",
+ "strictErrorChecking",
+ "domConfig",
+ "normalizeDocument",
+ "renameNode",
+ "charset",
+ "defaultCharset",
+ "height",
+ "width"
+]
+documentNuked.forEach(isNukedFromDocument)
+
+test(function() {
+ assert_equals(document.implementation["getFeature"], undefined)
+}, "DOMImplementation.getFeature() must be nuked.")
+
+function isNukedFromElement(name) {
+ test(function() {
+ var ele = document.createElementNS("test", "test")
+ assert_equals(document.body[name], undefined)
+ assert_equals(ele[name], undefined)
+ }, "Historical DOM features must be removed: " + name)
+}
+var elementNuked = [
+ "schemaTypeInfo",
+ "setIdAttribute",
+ "setIdAttributeNS",
+ "setIdAttributeNode"
+]
+elementNuked.forEach(isNukedFromElement)
+
+function isNukedFromDoctype(name) {
+ test(function() {
+ var doctype = document.implementation.createDocumentType("test", "", "")
+ assert_equals(doctype[name], undefined)
+ }, "DocumentType member must be nuked: " + name)
+}
+var doctypeNuked = [
+ "entities",
+ "notations",
+ "internalSubset"
+]
+doctypeNuked.forEach(isNukedFromDoctype)
+
+function isNukedFromText(name) {
+ test(function() {
+ var text = document.createTextNode("test")
+ assert_equals(text[name], undefined)
+ }, "Text member must be nuked: " + name)
+}
+var textNuked = [
+ "isElementContentWhitespace",
+ "replaceWholeText"
+]
+textNuked.forEach(isNukedFromText)
+
+function isNukedFromNode(name) {
+ test(function() {
+ var doc = document.implementation.createDocument(null,null,null)
+ var doctype = document.implementation.createDocumentType("test", "", "")
+ var text = document.createTextNode("test")
+ assert_equals(doc[name], undefined)
+ assert_equals(doctype[name], undefined)
+ assert_equals(text[name], undefined)
+ }, "Node member must be nuked: " + name)
+}
+var nodeNuked = [
+ "hasAttributes",
+ "attributes",
+ "namespaceURI",
+ "prefix",
+ "localName",
+ "isSupported",
+ "getFeature",
+ "getUserData",
+ "setUserData"
+]
+nodeNuked.forEach(isNukedFromNode)
+
+function isNukedFromWindow(name) {
+ test(function() {
+ assert_equals(window[name], undefined)
+ }, "Window member must be nuked: " + name)
+}
+var windowNuked = [
+ "attachEvent"
+]
+windowNuked.forEach(isNukedFromWindow)
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdominterfaceobjectsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/interface-objects-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/interface-objects-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/interface-objects-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,25 @@
</span><ins>+
+PASS Interface objects properties should not be Enumerable
+PASS Should be able to delete Event.
+PASS Should be able to delete CustomEvent.
+FAIL Should be able to delete EventTarget. assert_true: Interface should exist. expected true got false
+PASS Should be able to delete Node.
+PASS Should be able to delete Document.
+PASS Should be able to delete DOMImplementation.
+PASS Should be able to delete DocumentFragment.
+PASS Should be able to delete ProcessingInstruction.
+PASS Should be able to delete DocumentType.
+PASS Should be able to delete Element.
+PASS Should be able to delete Attr.
+PASS Should be able to delete CharacterData.
+PASS Should be able to delete Text.
+PASS Should be able to delete Comment.
+PASS Should be able to delete NodeIterator.
+PASS Should be able to delete TreeWalker.
+PASS Should be able to delete NodeFilter.
+PASS Should be able to delete NodeList.
+PASS Should be able to delete HTMLCollection.
+PASS Should be able to delete DOMStringList.
+PASS Should be able to delete DOMTokenList.
+PASS Should be able to delete DOMSettableTokenList.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdominterfaceobjectshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/interface-objects.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/interface-objects.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/interface-objects.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,46 @@
</span><ins>+<!DOCTYPE html>
+<title>Interfaces</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+function testInterfaceDeletable(iface) {
+ test(function() {
+ assert_true(!!window[iface], "Interface should exist.")
+ assert_true(delete window[iface], "The delete operator should return true.")
+ assert_equals(window[iface], undefined, "Interface should be gone.")
+ }, "Should be able to delete " + iface + ".")
+}
+var interfaces = [
+ "Event",
+ "CustomEvent",
+ "EventTarget",
+ "Node",
+ "Document",
+ "DOMImplementation",
+ "DocumentFragment",
+ "ProcessingInstruction",
+ "DocumentType",
+ "Element",
+ "Attr",
+ "CharacterData",
+ "Text",
+ "Comment",
+ "NodeIterator",
+ "TreeWalker",
+ "NodeFilter",
+ "NodeList",
+ "HTMLCollection",
+ "DOMStringList",
+ "DOMTokenList",
+ "DOMSettableTokenList"
+];
+test(function() {
+ for (var p in window) {
+ interfaces.forEach(function(i) {
+ assert_not_equals(p, i)
+ })
+ }
+}, "Interface objects properties should not be Enumerable")
+interfaces.forEach(testInterfaceDeletable);
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdominterfacesexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/interfaces-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/interfaces-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/interfaces-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,1957 @@
</span><ins>+CONSOLE MESSAGE: line 198: callback not yet supported
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'type' on a non-Event object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'target' on a non-Event object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'currentTarget' on a non-Event object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'eventPhase' on a non-Event object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'bubbles' on a non-Event object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'cancelable' on a non-Event object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'defaultPrevented' on a non-Event object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'timeStamp' on a non-Event object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'type' on a non-MutationRecord object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'target' on a non-MutationRecord object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'addedNodes' on a non-MutationRecord object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'removedNodes' on a non-MutationRecord object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'previousSibling' on a non-MutationRecord object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'nextSibling' on a non-MutationRecord object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'attributeName' on a non-MutationRecord object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'attributeNamespace' on a non-MutationRecord object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'oldValue' on a non-MutationRecord object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'nodeType' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'nodeName' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'baseURI' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'ownerDocument' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'parentNode' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'parentElement' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'childNodes' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'firstChild' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'lastChild' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'previousSibling' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'nextSibling' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'nodeValue' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'textContent' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'implementation' on a non-Document object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'URL' on a non-Document object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'documentURI' on a non-Document object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'origin' on a non-Document object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'compatMode' on a non-Document object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'characterSet' on a non-Document object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'inputEncoding' on a non-Document object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'contentType' on a non-Document object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'doctype' on a non-Document object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'documentElement' on a non-Document object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'children' on a non-Document object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'firstElementChild' on a non-Document object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'lastElementChild' on a non-Document object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'childElementCount' on a non-Document object.
+CONSOLE MESSAGE: line 793: Deprecated attempt to access property 'nodeType' on a non-Node object.
+CONSOLE MESSAGE: line 2475: Deprecated attempt to access property 'nodeType' on a non-Node object.
+CONSOLE MESSAGE: line 793: Deprecated attempt to access property 'nodeType' on a non-Node object.
+CONSOLE MESSAGE: line 2475: Deprecated attempt to access property 'nodeType' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'children' on a non-DocumentFragment object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'firstElementChild' on a non-DocumentFragment object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'lastElementChild' on a non-DocumentFragment object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'childElementCount' on a non-DocumentFragment object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'name' on a non-DocumentType object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'publicId' on a non-DocumentType object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'systemId' on a non-DocumentType object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'namespaceURI' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'prefix' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'localName' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'tagName' on a non-Element object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'id' on a non-Element object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'className' on a non-Element object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'classList' on a non-Element object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'attributes' on a non-Element object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'children' on a non-Element object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'firstElementChild' on a non-Element object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'lastElementChild' on a non-Element object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'childElementCount' on a non-Element object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'previousElementSibling' on a non-Element object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'nextElementSibling' on a non-Element object.
+CONSOLE MESSAGE: line 793: Deprecated attempt to access property 'nodeType' on a non-Node object.
+CONSOLE MESSAGE: line 2475: Deprecated attempt to access property 'nodeType' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'namespaceURI' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'prefix' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'localName' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'name' on a non-Attr object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'value' on a non-Attr object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'nodeValue' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'textContent' on a non-Node object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'ownerElement' on a non-Attr object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'specified' on a non-Attr object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'data' on a non-CharacterData object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'length' on a non-CharacterData object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'previousElementSibling' on a non-CharacterData object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'nextElementSibling' on a non-CharacterData object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'wholeText' on a non-Text object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'target' on a non-ProcessingInstruction object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'startContainer' on a non-Range object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'startOffset' on a non-Range object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'endContainer' on a non-Range object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'endOffset' on a non-Range object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'collapsed' on a non-Range object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'commonAncestorContainer' on a non-Range object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'root' on a non-NodeIterator object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'referenceNode' on a non-NodeIterator object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'pointerBeforeReferenceNode' on a non-NodeIterator object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'whatToShow' on a non-NodeIterator object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'filter' on a non-NodeIterator object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'root' on a non-TreeWalker object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'whatToShow' on a non-TreeWalker object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'filter' on a non-TreeWalker object.
+CONSOLE MESSAGE: line 1151: Deprecated attempt to access property 'currentNode' on a non-TreeWalker object.
+DOM IDL tests
+
+
+FAIL Event interface: existence and properties of interface object assert_equals: class string of Event expected "[object Function]" but got "[object EventConstructor]"
+PASS Event interface object length
+PASS Event interface: existence and properties of interface prototype object
+FAIL Event interface: existence and properties of interface prototype object's "constructor" property assert_true: Event.prototype.constructor is not writable expected true got false
+FAIL Event interface: attribute type assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Event interface: attribute target assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Event interface: attribute currentTarget assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+PASS Event interface: constant NONE on interface object
+PASS Event interface: constant NONE on interface prototype object
+PASS Event interface: constant CAPTURING_PHASE on interface object
+PASS Event interface: constant CAPTURING_PHASE on interface prototype object
+PASS Event interface: constant AT_TARGET on interface object
+PASS Event interface: constant AT_TARGET on interface prototype object
+PASS Event interface: constant BUBBLING_PHASE on interface object
+PASS Event interface: constant BUBBLING_PHASE on interface prototype object
+FAIL Event interface: attribute eventPhase assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+PASS Event interface: operation stopPropagation()
+PASS Event interface: operation stopImmediatePropagation()
+FAIL Event interface: attribute bubbles assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Event interface: attribute cancelable assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+PASS Event interface: operation preventDefault()
+FAIL Event interface: attribute defaultPrevented assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Event interface: attribute timeStamp assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Event interface: operation initEvent(DOMString,boolean,boolean) assert_equals: property has wrong .length expected 3 but got 0
+PASS Event must be primary interface of document.createEvent("Event")
+PASS Stringification of document.createEvent("Event")
+PASS Event interface: document.createEvent("Event") must inherit property "type" with the proper type (0)
+PASS Event interface: document.createEvent("Event") must inherit property "target" with the proper type (1)
+PASS Event interface: document.createEvent("Event") must inherit property "currentTarget" with the proper type (2)
+PASS Event interface: document.createEvent("Event") must inherit property "NONE" with the proper type (3)
+PASS Event interface: document.createEvent("Event") must inherit property "CAPTURING_PHASE" with the proper type (4)
+PASS Event interface: document.createEvent("Event") must inherit property "AT_TARGET" with the proper type (5)
+PASS Event interface: document.createEvent("Event") must inherit property "BUBBLING_PHASE" with the proper type (6)
+PASS Event interface: document.createEvent("Event") must inherit property "eventPhase" with the proper type (7)
+PASS Event interface: document.createEvent("Event") must inherit property "stopPropagation" with the proper type (8)
+PASS Event interface: document.createEvent("Event") must inherit property "stopImmediatePropagation" with the proper type (9)
+PASS Event interface: document.createEvent("Event") must inherit property "bubbles" with the proper type (10)
+PASS Event interface: document.createEvent("Event") must inherit property "cancelable" with the proper type (11)
+PASS Event interface: document.createEvent("Event") must inherit property "preventDefault" with the proper type (12)
+PASS Event interface: document.createEvent("Event") must inherit property "defaultPrevented" with the proper type (13)
+FAIL Event interface: document.createEvent("Event") must have own property "isTrusted" assert_own_property: expected property "isTrusted" missing
+PASS Event interface: document.createEvent("Event") must inherit property "timeStamp" with the proper type (15)
+PASS Event interface: document.createEvent("Event") must inherit property "initEvent" with the proper type (16)
+FAIL Event interface: calling initEvent(DOMString,boolean,boolean) on document.createEvent("Event") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Event must be primary interface of new Event("foo")
+PASS Stringification of new Event("foo")
+PASS Event interface: new Event("foo") must inherit property "type" with the proper type (0)
+PASS Event interface: new Event("foo") must inherit property "target" with the proper type (1)
+PASS Event interface: new Event("foo") must inherit property "currentTarget" with the proper type (2)
+PASS Event interface: new Event("foo") must inherit property "NONE" with the proper type (3)
+PASS Event interface: new Event("foo") must inherit property "CAPTURING_PHASE" with the proper type (4)
+PASS Event interface: new Event("foo") must inherit property "AT_TARGET" with the proper type (5)
+PASS Event interface: new Event("foo") must inherit property "BUBBLING_PHASE" with the proper type (6)
+PASS Event interface: new Event("foo") must inherit property "eventPhase" with the proper type (7)
+PASS Event interface: new Event("foo") must inherit property "stopPropagation" with the proper type (8)
+PASS Event interface: new Event("foo") must inherit property "stopImmediatePropagation" with the proper type (9)
+PASS Event interface: new Event("foo") must inherit property "bubbles" with the proper type (10)
+PASS Event interface: new Event("foo") must inherit property "cancelable" with the proper type (11)
+PASS Event interface: new Event("foo") must inherit property "preventDefault" with the proper type (12)
+PASS Event interface: new Event("foo") must inherit property "defaultPrevented" with the proper type (13)
+FAIL Event interface: new Event("foo") must have own property "isTrusted" assert_own_property: expected property "isTrusted" missing
+PASS Event interface: new Event("foo") must inherit property "timeStamp" with the proper type (15)
+PASS Event interface: new Event("foo") must inherit property "initEvent" with the proper type (16)
+FAIL Event interface: calling initEvent(DOMString,boolean,boolean) on new Event("foo") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+FAIL CustomEvent interface: existence and properties of interface object assert_equals: class string of CustomEvent expected "[object Function]" but got "[object CustomEventConstructor]"
+PASS CustomEvent interface object length
+PASS CustomEvent interface: existence and properties of interface prototype object
+FAIL CustomEvent interface: existence and properties of interface prototype object's "constructor" property assert_true: CustomEvent.prototype.constructor is not writable expected true got false
+FAIL CustomEvent interface: attribute detail assert_true: The prototype object must have a property "detail" expected true got false
+FAIL CustomEvent interface: operation initCustomEvent(DOMString,boolean,boolean,any) assert_equals: property has wrong .length expected 4 but got 0
+PASS CustomEvent must be primary interface of new CustomEvent("foo")
+PASS Stringification of new CustomEvent("foo")
+FAIL CustomEvent interface: new CustomEvent("foo") must inherit property "detail" with the proper type (0) assert_inherits: property "detail" found on object expected in prototype chain
+PASS CustomEvent interface: new CustomEvent("foo") must inherit property "initCustomEvent" with the proper type (1)
+FAIL CustomEvent interface: calling initCustomEvent(DOMString,boolean,boolean,any) on new CustomEvent("foo") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Event interface: new CustomEvent("foo") must inherit property "type" with the proper type (0)
+PASS Event interface: new CustomEvent("foo") must inherit property "target" with the proper type (1)
+PASS Event interface: new CustomEvent("foo") must inherit property "currentTarget" with the proper type (2)
+PASS Event interface: new CustomEvent("foo") must inherit property "NONE" with the proper type (3)
+PASS Event interface: new CustomEvent("foo") must inherit property "CAPTURING_PHASE" with the proper type (4)
+PASS Event interface: new CustomEvent("foo") must inherit property "AT_TARGET" with the proper type (5)
+PASS Event interface: new CustomEvent("foo") must inherit property "BUBBLING_PHASE" with the proper type (6)
+PASS Event interface: new CustomEvent("foo") must inherit property "eventPhase" with the proper type (7)
+PASS Event interface: new CustomEvent("foo") must inherit property "stopPropagation" with the proper type (8)
+PASS Event interface: new CustomEvent("foo") must inherit property "stopImmediatePropagation" with the proper type (9)
+PASS Event interface: new CustomEvent("foo") must inherit property "bubbles" with the proper type (10)
+PASS Event interface: new CustomEvent("foo") must inherit property "cancelable" with the proper type (11)
+PASS Event interface: new CustomEvent("foo") must inherit property "preventDefault" with the proper type (12)
+PASS Event interface: new CustomEvent("foo") must inherit property "defaultPrevented" with the proper type (13)
+FAIL Event interface: new CustomEvent("foo") must have own property "isTrusted" assert_own_property: expected property "isTrusted" missing
+PASS Event interface: new CustomEvent("foo") must inherit property "timeStamp" with the proper type (15)
+PASS Event interface: new CustomEvent("foo") must inherit property "initEvent" with the proper type (16)
+FAIL Event interface: calling initEvent(DOMString,boolean,boolean) on new CustomEvent("foo") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+FAIL EventTarget interface: existence and properties of interface object assert_own_property: self does not have own property "EventTarget" expected property "EventTarget" missing
+FAIL EventTarget interface object length assert_own_property: self does not have own property "EventTarget" expected property "EventTarget" missing
+FAIL EventTarget interface: existence and properties of interface prototype object assert_own_property: self does not have own property "EventTarget" expected property "EventTarget" missing
+FAIL EventTarget interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "EventTarget" expected property "EventTarget" missing
+FAIL EventTarget interface: operation addEventListener(DOMString,EventListener,boolean) assert_own_property: self does not have own property "EventTarget" expected property "EventTarget" missing
+FAIL EventTarget interface: operation removeEventListener(DOMString,EventListener,boolean) assert_own_property: self does not have own property "EventTarget" expected property "EventTarget" missing
+FAIL EventTarget interface: operation dispatchEvent(Event) assert_own_property: self does not have own property "EventTarget" expected property "EventTarget" missing
+PASS EventListener interface: existence and properties of interface object
+PASS EventListener interface: existence and properties of interface prototype object
+PASS EventListener interface: existence and properties of interface prototype object's "constructor" property
+PASS EventListener interface: operation handleEvent(Event)
+FAIL NodeList interface: existence and properties of interface object assert_equals: class string of NodeList expected "[object Function]" but got "[object NodeListConstructor]"
+PASS NodeList interface object length
+PASS NodeList interface: existence and properties of interface prototype object
+FAIL NodeList interface: existence and properties of interface prototype object's "constructor" property assert_own_property: NodeList.prototype does not have own property "constructor" expected property "constructor" missing
+PASS NodeList interface: operation item(unsigned long)
+FAIL NodeList interface: attribute length assert_true: The prototype object must have a property "length" expected true got false
+PASS NodeList must be primary interface of document.querySelectorAll("script")
+PASS Stringification of document.querySelectorAll("script")
+PASS NodeList interface: document.querySelectorAll("script") must inherit property "item" with the proper type (0)
+PASS NodeList interface: calling item(unsigned long) on document.querySelectorAll("script") with too few arguments must throw TypeError
+FAIL NodeList interface: document.querySelectorAll("script") must inherit property "length" with the proper type (1) assert_inherits: property "length" found on object expected in prototype chain
+FAIL HTMLCollection interface: existence and properties of interface object assert_equals: class string of HTMLCollection expected "[object Function]" but got "[object HTMLCollectionConstructor]"
+PASS HTMLCollection interface object length
+PASS HTMLCollection interface: existence and properties of interface prototype object
+FAIL HTMLCollection interface: existence and properties of interface prototype object's "constructor" property assert_own_property: HTMLCollection.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL HTMLCollection interface: attribute length assert_true: The prototype object must have a property "length" expected true got false
+FAIL HTMLCollection interface: operation item(unsigned long) assert_equals: property has wrong .length expected 1 but got 0
+FAIL HTMLCollection interface: operation namedItem(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+PASS HTMLCollection must be primary interface of document.body.children
+PASS Stringification of document.body.children
+FAIL HTMLCollection interface: document.body.children must inherit property "length" with the proper type (0) assert_inherits: property "length" found on object expected in prototype chain
+PASS HTMLCollection interface: document.body.children must inherit property "item" with the proper type (1)
+FAIL HTMLCollection interface: calling item(unsigned long) on document.body.children with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS HTMLCollection interface: document.body.children must inherit property "namedItem" with the proper type (2)
+FAIL HTMLCollection interface: calling namedItem(DOMString) on document.body.children with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+FAIL MutationObserver interface: existence and properties of interface object assert_equals: class string of MutationObserver expected "[object Function]" but got "[object MutationObserverConstructor]"
+PASS MutationObserver interface object length
+PASS MutationObserver interface: existence and properties of interface prototype object
+FAIL MutationObserver interface: existence and properties of interface prototype object's "constructor" property assert_true: MutationObserver.prototype.constructor is not writable expected true got false
+PASS MutationObserver interface: operation observe(Node,MutationObserverInit)
+PASS MutationObserver interface: operation disconnect()
+PASS MutationObserver interface: operation takeRecords()
+FAIL MutationRecord interface: existence and properties of interface object assert_equals: class string of MutationRecord expected "[object Function]" but got "[object MutationRecordConstructor]"
+PASS MutationRecord interface object length
+PASS MutationRecord interface: existence and properties of interface prototype object
+FAIL MutationRecord interface: existence and properties of interface prototype object's "constructor" property assert_true: MutationRecord.prototype.constructor is not writable expected true got false
+FAIL MutationRecord interface: attribute type assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL MutationRecord interface: attribute target assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL MutationRecord interface: attribute addedNodes assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL MutationRecord interface: attribute removedNodes assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL MutationRecord interface: attribute previousSibling assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL MutationRecord interface: attribute nextSibling assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL MutationRecord interface: attribute attributeName assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL MutationRecord interface: attribute attributeNamespace assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL MutationRecord interface: attribute oldValue assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Node interface: existence and properties of interface object assert_equals: class string of Node expected "[object Function]" but got "[object NodeConstructor]"
+PASS Node interface object length
+FAIL Node interface: existence and properties of interface prototype object assert_own_property: should inherit from EventTarget, but self has no such property expected property "EventTarget" missing
+FAIL Node interface: existence and properties of interface prototype object's "constructor" property assert_true: Node.prototype.constructor is not writable expected true got false
+PASS Node interface: constant ELEMENT_NODE on interface object
+PASS Node interface: constant ELEMENT_NODE on interface prototype object
+PASS Node interface: constant ATTRIBUTE_NODE on interface object
+PASS Node interface: constant ATTRIBUTE_NODE on interface prototype object
+PASS Node interface: constant TEXT_NODE on interface object
+PASS Node interface: constant TEXT_NODE on interface prototype object
+PASS Node interface: constant CDATA_SECTION_NODE on interface object
+PASS Node interface: constant CDATA_SECTION_NODE on interface prototype object
+PASS Node interface: constant ENTITY_REFERENCE_NODE on interface object
+PASS Node interface: constant ENTITY_REFERENCE_NODE on interface prototype object
+PASS Node interface: constant ENTITY_NODE on interface object
+PASS Node interface: constant ENTITY_NODE on interface prototype object
+PASS Node interface: constant PROCESSING_INSTRUCTION_NODE on interface object
+PASS Node interface: constant PROCESSING_INSTRUCTION_NODE on interface prototype object
+PASS Node interface: constant COMMENT_NODE on interface object
+PASS Node interface: constant COMMENT_NODE on interface prototype object
+PASS Node interface: constant DOCUMENT_NODE on interface object
+PASS Node interface: constant DOCUMENT_NODE on interface prototype object
+PASS Node interface: constant DOCUMENT_TYPE_NODE on interface object
+PASS Node interface: constant DOCUMENT_TYPE_NODE on interface prototype object
+PASS Node interface: constant DOCUMENT_FRAGMENT_NODE on interface object
+PASS Node interface: constant DOCUMENT_FRAGMENT_NODE on interface prototype object
+PASS Node interface: constant NOTATION_NODE on interface object
+PASS Node interface: constant NOTATION_NODE on interface prototype object
+FAIL Node interface: attribute nodeType assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Node interface: attribute nodeName assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Node interface: attribute baseURI assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Node interface: attribute ownerDocument assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Node interface: attribute parentNode assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Node interface: attribute parentElement assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: operation hasChildNodes()
+FAIL Node interface: attribute childNodes assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Node interface: attribute firstChild assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Node interface: attribute lastChild assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Node interface: attribute previousSibling assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Node interface: attribute nextSibling assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Node interface: attribute nodeValue assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Node interface: attribute textContent assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: operation normalize()
+PASS Node interface: operation cloneNode(boolean)
+FAIL Node interface: operation isEqualNode(Node) assert_equals: property has wrong .length expected 1 but got 0
+PASS Node interface: constant DOCUMENT_POSITION_DISCONNECTED on interface object
+PASS Node interface: constant DOCUMENT_POSITION_DISCONNECTED on interface prototype object
+PASS Node interface: constant DOCUMENT_POSITION_PRECEDING on interface object
+PASS Node interface: constant DOCUMENT_POSITION_PRECEDING on interface prototype object
+PASS Node interface: constant DOCUMENT_POSITION_FOLLOWING on interface object
+PASS Node interface: constant DOCUMENT_POSITION_FOLLOWING on interface prototype object
+PASS Node interface: constant DOCUMENT_POSITION_CONTAINS on interface object
+PASS Node interface: constant DOCUMENT_POSITION_CONTAINS on interface prototype object
+PASS Node interface: constant DOCUMENT_POSITION_CONTAINED_BY on interface object
+PASS Node interface: constant DOCUMENT_POSITION_CONTAINED_BY on interface prototype object
+PASS Node interface: constant DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC on interface object
+PASS Node interface: constant DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC on interface prototype object
+FAIL Node interface: operation compareDocumentPosition(Node) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Node interface: operation contains(Node) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Node interface: operation lookupPrefix(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Node interface: operation lookupNamespaceURI(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Node interface: operation isDefaultNamespace(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+PASS Node interface: operation insertBefore(Node,Node)
+PASS Node interface: operation appendChild(Node)
+PASS Node interface: operation replaceChild(Node,Node)
+PASS Node interface: operation removeChild(Node)
+FAIL Document interface: existence and properties of interface object assert_equals: class string of Document expected "[object Function]" but got "[object DocumentConstructor]"
+PASS Document interface object length
+PASS Document interface: existence and properties of interface prototype object
+FAIL Document interface: existence and properties of interface prototype object's "constructor" property assert_true: Document.prototype.constructor is not writable expected true got false
+FAIL Document interface: attribute implementation assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Document interface: attribute URL assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Document interface: attribute documentURI assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Document interface: attribute origin assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Document interface: attribute compatMode assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Document interface: attribute characterSet assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Document interface: attribute inputEncoding assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Document interface: attribute contentType assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Document interface: attribute doctype assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Document interface: attribute documentElement assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Document interface: operation getElementsByTagName(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Document interface: operation getElementsByTagNameNS(DOMString,DOMString) assert_equals: property has wrong .length expected 2 but got 0
+FAIL Document interface: operation getElementsByClassName(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Document interface: operation createElement(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Document interface: operation createElementNS(DOMString,DOMString) assert_equals: property has wrong .length expected 2 but got 0
+PASS Document interface: operation createDocumentFragment()
+FAIL Document interface: operation createTextNode(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Document interface: operation createComment(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Document interface: operation createProcessingInstruction(DOMString,DOMString) assert_equals: property has wrong .length expected 2 but got 0
+FAIL Document interface: operation importNode(Node,boolean) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Document interface: operation adoptNode(Node) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Document interface: operation createAttribute(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Document interface: operation createAttributeNS(DOMString,DOMString) assert_equals: property has wrong .length expected 2 but got 0
+FAIL Document interface: operation createEvent(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+PASS Document interface: operation createRange()
+PASS Document interface: operation createNodeIterator(Node,unsigned long,NodeFilter)
+PASS Document interface: operation createTreeWalker(Node,unsigned long,NodeFilter)
+FAIL Document interface: operation getElementById(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Document interface: attribute children assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Document interface: attribute firstElementChild assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Document interface: attribute lastElementChild assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Document interface: attribute childElementCount assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Document interface: operation prepend([object Object],[object Object]) assert_equals: property has wrong .length expected 0 but got 1
+FAIL Document interface: operation append([object Object],[object Object]) assert_equals: property has wrong .length expected 0 but got 1
+FAIL Document interface: operation query(DOMString) assert_own_property: interface prototype object missing non-static operation expected property "query" missing
+FAIL Document interface: operation queryAll(DOMString) assert_own_property: interface prototype object missing non-static operation expected property "queryAll" missing
+PASS Document interface: operation querySelector(DOMString)
+PASS Document interface: operation querySelectorAll(DOMString)
+FAIL XMLDocument interface: existence and properties of interface object assert_equals: class string of XMLDocument expected "[object Function]" but got "[object DocumentConstructor]"
+PASS XMLDocument interface object length
+FAIL XMLDocument interface: existence and properties of interface prototype object assert_equals: prototype of XMLDocument.prototype is not Document.prototype expected Node object of unknown type but got Node object of unknown type
+FAIL XMLDocument interface: existence and properties of interface prototype object's "constructor" property assert_true: XMLDocument.prototype.constructor is not writable expected true got false
+PASS XMLDocument must be primary interface of xmlDoc
+FAIL Stringification of xmlDoc assert_equals: class string of xmlDoc expected "[object XMLDocument]" but got "[object Document]"
+PASS Document interface: xmlDoc must inherit property "implementation" with the proper type (0)
+PASS Document interface: xmlDoc must inherit property "URL" with the proper type (1)
+FAIL Document interface: xmlDoc must inherit property "documentURI" with the proper type (2) assert_equals: expected "string" but got "object"
+PASS Document interface: xmlDoc must inherit property "origin" with the proper type (3)
+PASS Document interface: xmlDoc must inherit property "compatMode" with the proper type (4)
+FAIL Document interface: xmlDoc must inherit property "characterSet" with the proper type (5) assert_equals: expected "string" but got "object"
+FAIL Document interface: xmlDoc must inherit property "inputEncoding" with the proper type (6) assert_equals: expected "string" but got "object"
+PASS Document interface: xmlDoc must inherit property "contentType" with the proper type (7)
+PASS Document interface: xmlDoc must inherit property "doctype" with the proper type (8)
+PASS Document interface: xmlDoc must inherit property "documentElement" with the proper type (9)
+PASS Document interface: xmlDoc must inherit property "getElementsByTagName" with the proper type (10)
+FAIL Document interface: calling getElementsByTagName(DOMString) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Document interface: xmlDoc must inherit property "getElementsByTagNameNS" with the proper type (11)
+FAIL Document interface: calling getElementsByTagNameNS(DOMString,DOMString) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Document interface: xmlDoc must inherit property "getElementsByClassName" with the proper type (12)
+FAIL Document interface: calling getElementsByClassName(DOMString) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Document interface: xmlDoc must inherit property "createElement" with the proper type (13)
+FAIL Document interface: calling createElement(DOMString) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Document interface: xmlDoc must inherit property "createElementNS" with the proper type (14)
+FAIL Document interface: calling createElementNS(DOMString,DOMString) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Document interface: xmlDoc must inherit property "createDocumentFragment" with the proper type (15)
+PASS Document interface: xmlDoc must inherit property "createTextNode" with the proper type (16)
+FAIL Document interface: calling createTextNode(DOMString) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Document interface: xmlDoc must inherit property "createComment" with the proper type (17)
+FAIL Document interface: calling createComment(DOMString) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Document interface: xmlDoc must inherit property "createProcessingInstruction" with the proper type (18)
+FAIL Document interface: calling createProcessingInstruction(DOMString,DOMString) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Document interface: xmlDoc must inherit property "importNode" with the proper type (19)
+FAIL Document interface: calling importNode(Node,boolean) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotSupportedError: DOM Exception 9" ("NotSupportedError") expected object "TypeError" ("TypeError")
+PASS Document interface: xmlDoc must inherit property "adoptNode" with the proper type (20)
+FAIL Document interface: calling adoptNode(Node) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotSupportedError: DOM Exception 9" ("NotSupportedError") expected object "TypeError" ("TypeError")
+PASS Document interface: xmlDoc must inherit property "createAttribute" with the proper type (21)
+FAIL Document interface: calling createAttribute(DOMString) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Document interface: xmlDoc must inherit property "createAttributeNS" with the proper type (22)
+FAIL Document interface: calling createAttributeNS(DOMString,DOMString) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Document interface: xmlDoc must inherit property "createEvent" with the proper type (23)
+FAIL Document interface: calling createEvent(DOMString) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotSupportedError: DOM Exception 9" ("NotSupportedError") expected object "TypeError" ("TypeError")
+PASS Document interface: xmlDoc must inherit property "createRange" with the proper type (24)
+PASS Document interface: xmlDoc must inherit property "createNodeIterator" with the proper type (25)
+PASS Document interface: calling createNodeIterator(Node,unsigned long,NodeFilter) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "createTreeWalker" with the proper type (26)
+PASS Document interface: calling createTreeWalker(Node,unsigned long,NodeFilter) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "getElementById" with the proper type (27)
+FAIL Document interface: calling getElementById(DOMString) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Document interface: xmlDoc must inherit property "children" with the proper type (28)
+PASS Document interface: xmlDoc must inherit property "firstElementChild" with the proper type (29)
+PASS Document interface: xmlDoc must inherit property "lastElementChild" with the proper type (30)
+PASS Document interface: xmlDoc must inherit property "childElementCount" with the proper type (31)
+PASS Document interface: xmlDoc must inherit property "prepend" with the proper type (32)
+PASS Document interface: calling prepend([object Object],[object Object]) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "append" with the proper type (33)
+PASS Document interface: calling append([object Object],[object Object]) on xmlDoc with too few arguments must throw TypeError
+FAIL Document interface: xmlDoc must inherit property "query" with the proper type (34) assert_inherits: property "query" not found in prototype chain
+FAIL Document interface: calling query(DOMString) on xmlDoc with too few arguments must throw TypeError assert_inherits: property "query" not found in prototype chain
+FAIL Document interface: xmlDoc must inherit property "queryAll" with the proper type (35) assert_inherits: property "queryAll" not found in prototype chain
+FAIL Document interface: calling queryAll(DOMString) on xmlDoc with too few arguments must throw TypeError assert_inherits: property "queryAll" not found in prototype chain
+PASS Document interface: xmlDoc must inherit property "querySelector" with the proper type (36)
+PASS Document interface: calling querySelector(DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Document interface: xmlDoc must inherit property "querySelectorAll" with the proper type (37)
+PASS Document interface: calling querySelectorAll(DOMString) on xmlDoc with too few arguments must throw TypeError
+PASS Node interface: xmlDoc must inherit property "ELEMENT_NODE" with the proper type (0)
+PASS Node interface: xmlDoc must inherit property "ATTRIBUTE_NODE" with the proper type (1)
+PASS Node interface: xmlDoc must inherit property "TEXT_NODE" with the proper type (2)
+PASS Node interface: xmlDoc must inherit property "CDATA_SECTION_NODE" with the proper type (3)
+PASS Node interface: xmlDoc must inherit property "ENTITY_REFERENCE_NODE" with the proper type (4)
+PASS Node interface: xmlDoc must inherit property "ENTITY_NODE" with the proper type (5)
+PASS Node interface: xmlDoc must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type (6)
+PASS Node interface: xmlDoc must inherit property "COMMENT_NODE" with the proper type (7)
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_NODE" with the proper type (8)
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_TYPE_NODE" with the proper type (9)
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type (10)
+PASS Node interface: xmlDoc must inherit property "NOTATION_NODE" with the proper type (11)
+PASS Node interface: xmlDoc must inherit property "nodeType" with the proper type (12)
+PASS Node interface: xmlDoc must inherit property "nodeName" with the proper type (13)
+PASS Node interface: xmlDoc must inherit property "baseURI" with the proper type (14)
+PASS Node interface: xmlDoc must inherit property "ownerDocument" with the proper type (15)
+PASS Node interface: xmlDoc must inherit property "parentNode" with the proper type (16)
+PASS Node interface: xmlDoc must inherit property "parentElement" with the proper type (17)
+PASS Node interface: xmlDoc must inherit property "hasChildNodes" with the proper type (18)
+PASS Node interface: xmlDoc must inherit property "childNodes" with the proper type (19)
+PASS Node interface: xmlDoc must inherit property "firstChild" with the proper type (20)
+PASS Node interface: xmlDoc must inherit property "lastChild" with the proper type (21)
+PASS Node interface: xmlDoc must inherit property "previousSibling" with the proper type (22)
+PASS Node interface: xmlDoc must inherit property "nextSibling" with the proper type (23)
+PASS Node interface: xmlDoc must inherit property "nodeValue" with the proper type (24)
+PASS Node interface: xmlDoc must inherit property "textContent" with the proper type (25)
+PASS Node interface: xmlDoc must inherit property "normalize" with the proper type (26)
+PASS Node interface: xmlDoc must inherit property "cloneNode" with the proper type (27)
+PASS Node interface: calling cloneNode(boolean) on xmlDoc with too few arguments must throw TypeError
+PASS Node interface: xmlDoc must inherit property "isEqualNode" with the proper type (28)
+FAIL Node interface: calling isEqualNode(Node) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (29)
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (30)
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (31)
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (32)
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (33)
+PASS Node interface: xmlDoc must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (34)
+PASS Node interface: xmlDoc must inherit property "compareDocumentPosition" with the proper type (35)
+FAIL Node interface: calling compareDocumentPosition(Node) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: xmlDoc must inherit property "contains" with the proper type (36)
+FAIL Node interface: calling contains(Node) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: xmlDoc must inherit property "lookupPrefix" with the proper type (37)
+FAIL Node interface: calling lookupPrefix(DOMString) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: xmlDoc must inherit property "lookupNamespaceURI" with the proper type (38)
+FAIL Node interface: calling lookupNamespaceURI(DOMString) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: xmlDoc must inherit property "isDefaultNamespace" with the proper type (39)
+FAIL Node interface: calling isDefaultNamespace(DOMString) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: xmlDoc must inherit property "insertBefore" with the proper type (40)
+FAIL Node interface: calling insertBefore(Node,Node) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Node interface: xmlDoc must inherit property "appendChild" with the proper type (41)
+FAIL Node interface: calling appendChild(Node) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Node interface: xmlDoc must inherit property "replaceChild" with the proper type (42)
+FAIL Node interface: calling replaceChild(Node,Node) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: xmlDoc must inherit property "removeChild" with the proper type (43)
+FAIL Node interface: calling removeChild(Node) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS EventTarget interface: xmlDoc must inherit property "addEventListener" with the proper type (0)
+FAIL EventTarget interface: calling addEventListener(DOMString,EventListener,boolean) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS EventTarget interface: xmlDoc must inherit property "removeEventListener" with the proper type (1)
+FAIL EventTarget interface: calling removeEventListener(DOMString,EventListener,boolean) on xmlDoc with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS EventTarget interface: xmlDoc must inherit property "dispatchEvent" with the proper type (2)
+PASS EventTarget interface: calling dispatchEvent(Event) on xmlDoc with too few arguments must throw TypeError
+FAIL DOMImplementation interface: existence and properties of interface object assert_equals: class string of DOMImplementation expected "[object Function]" but got "[object DOMImplementationConstructor]"
+PASS DOMImplementation interface object length
+PASS DOMImplementation interface: existence and properties of interface prototype object
+FAIL DOMImplementation interface: existence and properties of interface prototype object's "constructor" property assert_true: DOMImplementation.prototype.constructor is not writable expected true got false
+FAIL DOMImplementation interface: operation createDocumentType(DOMString,DOMString,DOMString) assert_equals: property has wrong .length expected 3 but got 0
+FAIL DOMImplementation interface: operation createDocument(DOMString,DOMString,DocumentType) assert_equals: property has wrong .length expected 2 but got 0
+PASS DOMImplementation interface: operation createHTMLDocument(DOMString)
+PASS DOMImplementation interface: operation hasFeature()
+PASS DOMImplementation must be primary interface of document.implementation
+PASS Stringification of document.implementation
+PASS DOMImplementation interface: document.implementation must inherit property "createDocumentType" with the proper type (0)
+FAIL DOMImplementation interface: calling createDocumentType(DOMString,DOMString,DOMString) on document.implementation with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: InvalidCharacterError: DOM Exception 5" ("InvalidCharacterError") expected object "TypeError" ("TypeError")
+PASS DOMImplementation interface: document.implementation must inherit property "createDocument" with the proper type (1)
+FAIL DOMImplementation interface: calling createDocument(DOMString,DOMString,DocumentType) on document.implementation with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS DOMImplementation interface: document.implementation must inherit property "createHTMLDocument" with the proper type (2)
+PASS DOMImplementation interface: calling createHTMLDocument(DOMString) on document.implementation with too few arguments must throw TypeError
+PASS DOMImplementation interface: document.implementation must inherit property "hasFeature" with the proper type (3)
+FAIL DocumentFragment interface: existence and properties of interface object assert_equals: class string of DocumentFragment expected "[object Function]" but got "[object DocumentFragmentConstructor]"
+PASS DocumentFragment interface object length
+PASS DocumentFragment interface: existence and properties of interface prototype object
+FAIL DocumentFragment interface: existence and properties of interface prototype object's "constructor" property assert_true: DocumentFragment.prototype.constructor is not writable expected true got false
+FAIL DocumentFragment interface: operation getElementById(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL DocumentFragment interface: attribute children assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL DocumentFragment interface: attribute firstElementChild assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL DocumentFragment interface: attribute lastElementChild assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL DocumentFragment interface: attribute childElementCount assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL DocumentFragment interface: operation prepend([object Object],[object Object]) assert_equals: property has wrong .length expected 0 but got 1
+FAIL DocumentFragment interface: operation append([object Object],[object Object]) assert_equals: property has wrong .length expected 0 but got 1
+FAIL DocumentFragment interface: operation query(DOMString) assert_own_property: interface prototype object missing non-static operation expected property "query" missing
+FAIL DocumentFragment interface: operation queryAll(DOMString) assert_own_property: interface prototype object missing non-static operation expected property "queryAll" missing
+PASS DocumentFragment interface: operation querySelector(DOMString)
+PASS DocumentFragment interface: operation querySelectorAll(DOMString)
+PASS DocumentFragment must be primary interface of document.createDocumentFragment()
+PASS Stringification of document.createDocumentFragment()
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "getElementById" with the proper type (0)
+FAIL DocumentFragment interface: calling getElementById(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "children" with the proper type (1)
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "firstElementChild" with the proper type (2)
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "lastElementChild" with the proper type (3)
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "childElementCount" with the proper type (4)
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "prepend" with the proper type (5)
+PASS DocumentFragment interface: calling prepend([object Object],[object Object]) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "append" with the proper type (6)
+PASS DocumentFragment interface: calling append([object Object],[object Object]) on document.createDocumentFragment() with too few arguments must throw TypeError
+FAIL DocumentFragment interface: document.createDocumentFragment() must inherit property "query" with the proper type (7) assert_inherits: property "query" not found in prototype chain
+FAIL DocumentFragment interface: calling query(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError assert_inherits: property "query" not found in prototype chain
+FAIL DocumentFragment interface: document.createDocumentFragment() must inherit property "queryAll" with the proper type (8) assert_inherits: property "queryAll" not found in prototype chain
+FAIL DocumentFragment interface: calling queryAll(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError assert_inherits: property "queryAll" not found in prototype chain
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "querySelector" with the proper type (9)
+PASS DocumentFragment interface: calling querySelector(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS DocumentFragment interface: document.createDocumentFragment() must inherit property "querySelectorAll" with the proper type (10)
+PASS DocumentFragment interface: calling querySelectorAll(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS Node interface: document.createDocumentFragment() must inherit property "ELEMENT_NODE" with the proper type (0)
+PASS Node interface: document.createDocumentFragment() must inherit property "ATTRIBUTE_NODE" with the proper type (1)
+PASS Node interface: document.createDocumentFragment() must inherit property "TEXT_NODE" with the proper type (2)
+PASS Node interface: document.createDocumentFragment() must inherit property "CDATA_SECTION_NODE" with the proper type (3)
+PASS Node interface: document.createDocumentFragment() must inherit property "ENTITY_REFERENCE_NODE" with the proper type (4)
+PASS Node interface: document.createDocumentFragment() must inherit property "ENTITY_NODE" with the proper type (5)
+PASS Node interface: document.createDocumentFragment() must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type (6)
+PASS Node interface: document.createDocumentFragment() must inherit property "COMMENT_NODE" with the proper type (7)
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_NODE" with the proper type (8)
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_TYPE_NODE" with the proper type (9)
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type (10)
+PASS Node interface: document.createDocumentFragment() must inherit property "NOTATION_NODE" with the proper type (11)
+PASS Node interface: document.createDocumentFragment() must inherit property "nodeType" with the proper type (12)
+PASS Node interface: document.createDocumentFragment() must inherit property "nodeName" with the proper type (13)
+PASS Node interface: document.createDocumentFragment() must inherit property "baseURI" with the proper type (14)
+PASS Node interface: document.createDocumentFragment() must inherit property "ownerDocument" with the proper type (15)
+PASS Node interface: document.createDocumentFragment() must inherit property "parentNode" with the proper type (16)
+PASS Node interface: document.createDocumentFragment() must inherit property "parentElement" with the proper type (17)
+PASS Node interface: document.createDocumentFragment() must inherit property "hasChildNodes" with the proper type (18)
+PASS Node interface: document.createDocumentFragment() must inherit property "childNodes" with the proper type (19)
+PASS Node interface: document.createDocumentFragment() must inherit property "firstChild" with the proper type (20)
+PASS Node interface: document.createDocumentFragment() must inherit property "lastChild" with the proper type (21)
+PASS Node interface: document.createDocumentFragment() must inherit property "previousSibling" with the proper type (22)
+PASS Node interface: document.createDocumentFragment() must inherit property "nextSibling" with the proper type (23)
+PASS Node interface: document.createDocumentFragment() must inherit property "nodeValue" with the proper type (24)
+PASS Node interface: document.createDocumentFragment() must inherit property "textContent" with the proper type (25)
+PASS Node interface: document.createDocumentFragment() must inherit property "normalize" with the proper type (26)
+PASS Node interface: document.createDocumentFragment() must inherit property "cloneNode" with the proper type (27)
+PASS Node interface: calling cloneNode(boolean) on document.createDocumentFragment() with too few arguments must throw TypeError
+PASS Node interface: document.createDocumentFragment() must inherit property "isEqualNode" with the proper type (28)
+FAIL Node interface: calling isEqualNode(Node) on document.createDocumentFragment() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (29)
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (30)
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (31)
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (32)
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (33)
+PASS Node interface: document.createDocumentFragment() must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (34)
+PASS Node interface: document.createDocumentFragment() must inherit property "compareDocumentPosition" with the proper type (35)
+FAIL Node interface: calling compareDocumentPosition(Node) on document.createDocumentFragment() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createDocumentFragment() must inherit property "contains" with the proper type (36)
+FAIL Node interface: calling contains(Node) on document.createDocumentFragment() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createDocumentFragment() must inherit property "lookupPrefix" with the proper type (37)
+FAIL Node interface: calling lookupPrefix(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createDocumentFragment() must inherit property "lookupNamespaceURI" with the proper type (38)
+FAIL Node interface: calling lookupNamespaceURI(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createDocumentFragment() must inherit property "isDefaultNamespace" with the proper type (39)
+FAIL Node interface: calling isDefaultNamespace(DOMString) on document.createDocumentFragment() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createDocumentFragment() must inherit property "insertBefore" with the proper type (40)
+FAIL Node interface: calling insertBefore(Node,Node) on document.createDocumentFragment() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Node interface: document.createDocumentFragment() must inherit property "appendChild" with the proper type (41)
+FAIL Node interface: calling appendChild(Node) on document.createDocumentFragment() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Node interface: document.createDocumentFragment() must inherit property "replaceChild" with the proper type (42)
+FAIL Node interface: calling replaceChild(Node,Node) on document.createDocumentFragment() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createDocumentFragment() must inherit property "removeChild" with the proper type (43)
+FAIL Node interface: calling removeChild(Node) on document.createDocumentFragment() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS EventTarget interface: document.createDocumentFragment() must inherit property "addEventListener" with the proper type (0)
+FAIL EventTarget interface: calling addEventListener(DOMString,EventListener,boolean) on document.createDocumentFragment() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS EventTarget interface: document.createDocumentFragment() must inherit property "removeEventListener" with the proper type (1)
+FAIL EventTarget interface: calling removeEventListener(DOMString,EventListener,boolean) on document.createDocumentFragment() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS EventTarget interface: document.createDocumentFragment() must inherit property "dispatchEvent" with the proper type (2)
+PASS EventTarget interface: calling dispatchEvent(Event) on document.createDocumentFragment() with too few arguments must throw TypeError
+FAIL DocumentType interface: existence and properties of interface object assert_equals: class string of DocumentType expected "[object Function]" but got "[object DocumentTypeConstructor]"
+PASS DocumentType interface object length
+PASS DocumentType interface: existence and properties of interface prototype object
+FAIL DocumentType interface: existence and properties of interface prototype object's "constructor" property assert_true: DocumentType.prototype.constructor is not writable expected true got false
+FAIL DocumentType interface: attribute name assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL DocumentType interface: attribute publicId assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL DocumentType interface: attribute systemId assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL DocumentType interface: operation before([object Object],[object Object]) assert_equals: property has wrong .length expected 0 but got 1
+FAIL DocumentType interface: operation after([object Object],[object Object]) assert_equals: property has wrong .length expected 0 but got 1
+FAIL DocumentType interface: operation replaceWith([object Object],[object Object]) assert_equals: property has wrong .length expected 0 but got 1
+PASS DocumentType interface: operation remove()
+PASS DocumentType must be primary interface of document.doctype
+PASS Stringification of document.doctype
+PASS DocumentType interface: document.doctype must inherit property "name" with the proper type (0)
+FAIL DocumentType interface: document.doctype must inherit property "publicId" with the proper type (1) assert_equals: expected "string" but got "object"
+FAIL DocumentType interface: document.doctype must inherit property "systemId" with the proper type (2) assert_equals: expected "string" but got "object"
+PASS DocumentType interface: document.doctype must inherit property "before" with the proper type (3)
+PASS DocumentType interface: calling before([object Object],[object Object]) on document.doctype with too few arguments must throw TypeError
+PASS DocumentType interface: document.doctype must inherit property "after" with the proper type (4)
+PASS DocumentType interface: calling after([object Object],[object Object]) on document.doctype with too few arguments must throw TypeError
+PASS DocumentType interface: document.doctype must inherit property "replaceWith" with the proper type (5)
+PASS DocumentType interface: calling replaceWith([object Object],[object Object]) on document.doctype with too few arguments must throw TypeError
+PASS DocumentType interface: document.doctype must inherit property "remove" with the proper type (6)
+PASS Node interface: document.doctype must inherit property "ELEMENT_NODE" with the proper type (0)
+PASS Node interface: document.doctype must inherit property "ATTRIBUTE_NODE" with the proper type (1)
+PASS Node interface: document.doctype must inherit property "TEXT_NODE" with the proper type (2)
+PASS Node interface: document.doctype must inherit property "CDATA_SECTION_NODE" with the proper type (3)
+PASS Node interface: document.doctype must inherit property "ENTITY_REFERENCE_NODE" with the proper type (4)
+PASS Node interface: document.doctype must inherit property "ENTITY_NODE" with the proper type (5)
+PASS Node interface: document.doctype must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type (6)
+PASS Node interface: document.doctype must inherit property "COMMENT_NODE" with the proper type (7)
+PASS Node interface: document.doctype must inherit property "DOCUMENT_NODE" with the proper type (8)
+PASS Node interface: document.doctype must inherit property "DOCUMENT_TYPE_NODE" with the proper type (9)
+PASS Node interface: document.doctype must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type (10)
+PASS Node interface: document.doctype must inherit property "NOTATION_NODE" with the proper type (11)
+PASS Node interface: document.doctype must inherit property "nodeType" with the proper type (12)
+PASS Node interface: document.doctype must inherit property "nodeName" with the proper type (13)
+PASS Node interface: document.doctype must inherit property "baseURI" with the proper type (14)
+PASS Node interface: document.doctype must inherit property "ownerDocument" with the proper type (15)
+PASS Node interface: document.doctype must inherit property "parentNode" with the proper type (16)
+PASS Node interface: document.doctype must inherit property "parentElement" with the proper type (17)
+PASS Node interface: document.doctype must inherit property "hasChildNodes" with the proper type (18)
+PASS Node interface: document.doctype must inherit property "childNodes" with the proper type (19)
+PASS Node interface: document.doctype must inherit property "firstChild" with the proper type (20)
+PASS Node interface: document.doctype must inherit property "lastChild" with the proper type (21)
+PASS Node interface: document.doctype must inherit property "previousSibling" with the proper type (22)
+PASS Node interface: document.doctype must inherit property "nextSibling" with the proper type (23)
+PASS Node interface: document.doctype must inherit property "nodeValue" with the proper type (24)
+PASS Node interface: document.doctype must inherit property "textContent" with the proper type (25)
+PASS Node interface: document.doctype must inherit property "normalize" with the proper type (26)
+PASS Node interface: document.doctype must inherit property "cloneNode" with the proper type (27)
+PASS Node interface: calling cloneNode(boolean) on document.doctype with too few arguments must throw TypeError
+PASS Node interface: document.doctype must inherit property "isEqualNode" with the proper type (28)
+FAIL Node interface: calling isEqualNode(Node) on document.doctype with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (29)
+PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (30)
+PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (31)
+PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (32)
+PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (33)
+PASS Node interface: document.doctype must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (34)
+PASS Node interface: document.doctype must inherit property "compareDocumentPosition" with the proper type (35)
+FAIL Node interface: calling compareDocumentPosition(Node) on document.doctype with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.doctype must inherit property "contains" with the proper type (36)
+FAIL Node interface: calling contains(Node) on document.doctype with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.doctype must inherit property "lookupPrefix" with the proper type (37)
+FAIL Node interface: calling lookupPrefix(DOMString) on document.doctype with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.doctype must inherit property "lookupNamespaceURI" with the proper type (38)
+FAIL Node interface: calling lookupNamespaceURI(DOMString) on document.doctype with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.doctype must inherit property "isDefaultNamespace" with the proper type (39)
+FAIL Node interface: calling isDefaultNamespace(DOMString) on document.doctype with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.doctype must inherit property "insertBefore" with the proper type (40)
+FAIL Node interface: calling insertBefore(Node,Node) on document.doctype with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Node interface: document.doctype must inherit property "appendChild" with the proper type (41)
+FAIL Node interface: calling appendChild(Node) on document.doctype with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Node interface: document.doctype must inherit property "replaceChild" with the proper type (42)
+FAIL Node interface: calling replaceChild(Node,Node) on document.doctype with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Node interface: document.doctype must inherit property "removeChild" with the proper type (43)
+FAIL Node interface: calling removeChild(Node) on document.doctype with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS EventTarget interface: document.doctype must inherit property "addEventListener" with the proper type (0)
+FAIL EventTarget interface: calling addEventListener(DOMString,EventListener,boolean) on document.doctype with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS EventTarget interface: document.doctype must inherit property "removeEventListener" with the proper type (1)
+FAIL EventTarget interface: calling removeEventListener(DOMString,EventListener,boolean) on document.doctype with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS EventTarget interface: document.doctype must inherit property "dispatchEvent" with the proper type (2)
+PASS EventTarget interface: calling dispatchEvent(Event) on document.doctype with too few arguments must throw TypeError
+FAIL Element interface: existence and properties of interface object assert_equals: class string of Element expected "[object Function]" but got "[object ElementConstructor]"
+PASS Element interface object length
+PASS Element interface: existence and properties of interface prototype object
+FAIL Element interface: existence and properties of interface prototype object's "constructor" property assert_true: Element.prototype.constructor is not writable expected true got false
+FAIL Element interface: attribute namespaceURI assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Element interface: attribute prefix assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Element interface: attribute localName assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Element interface: attribute tagName assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Element interface: attribute id assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Element interface: attribute className assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Element interface: attribute classList assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+PASS Element interface: operation hasAttributes()
+FAIL Element interface: attribute attributes assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Element interface: operation getAttribute(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Element interface: operation getAttributeNS(DOMString,DOMString) assert_equals: property has wrong .length expected 2 but got 0
+FAIL Element interface: operation setAttribute(DOMString,DOMString) assert_equals: property has wrong .length expected 2 but got 0
+FAIL Element interface: operation setAttributeNS(DOMString,DOMString,DOMString) assert_equals: property has wrong .length expected 3 but got 0
+FAIL Element interface: operation removeAttribute(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+PASS Element interface: operation removeAttributeNS(DOMString,DOMString)
+PASS Element interface: operation hasAttribute(DOMString)
+FAIL Element interface: operation hasAttributeNS(DOMString,DOMString) assert_equals: property has wrong .length expected 2 but got 0
+FAIL Element interface: operation getAttributeNode(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Element interface: operation getAttributeNodeNS(DOMString,DOMString) assert_equals: property has wrong .length expected 2 but got 0
+FAIL Element interface: operation setAttributeNode(Attr) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Element interface: operation setAttributeNodeNS(Attr) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Element interface: operation removeAttributeNode(Attr) assert_equals: property has wrong .length expected 1 but got 0
+PASS Element interface: operation closest(DOMString)
+PASS Element interface: operation matches(DOMString)
+FAIL Element interface: operation getElementsByTagName(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Element interface: operation getElementsByTagNameNS(DOMString,DOMString) assert_equals: property has wrong .length expected 2 but got 0
+FAIL Element interface: operation getElementsByClassName(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Element interface: attribute children assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Element interface: attribute firstElementChild assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Element interface: attribute lastElementChild assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Element interface: attribute childElementCount assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Element interface: operation prepend([object Object],[object Object]) assert_equals: property has wrong .length expected 0 but got 1
+FAIL Element interface: operation append([object Object],[object Object]) assert_equals: property has wrong .length expected 0 but got 1
+FAIL Element interface: operation query(DOMString) assert_own_property: interface prototype object missing non-static operation expected property "query" missing
+FAIL Element interface: operation queryAll(DOMString) assert_own_property: interface prototype object missing non-static operation expected property "queryAll" missing
+PASS Element interface: operation querySelector(DOMString)
+PASS Element interface: operation querySelectorAll(DOMString)
+FAIL Element interface: attribute previousElementSibling assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Element interface: attribute nextElementSibling assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Element interface: operation before([object Object],[object Object]) assert_equals: property has wrong .length expected 0 but got 1
+FAIL Element interface: operation after([object Object],[object Object]) assert_equals: property has wrong .length expected 0 but got 1
+FAIL Element interface: operation replaceWith([object Object],[object Object]) assert_equals: property has wrong .length expected 0 but got 1
+PASS Element interface: operation remove()
+PASS Element must be primary interface of element
+PASS Stringification of element
+PASS Element interface: element must inherit property "namespaceURI" with the proper type (0)
+PASS Element interface: element must inherit property "prefix" with the proper type (1)
+PASS Element interface: element must inherit property "localName" with the proper type (2)
+PASS Element interface: element must inherit property "tagName" with the proper type (3)
+PASS Element interface: element must inherit property "id" with the proper type (4)
+PASS Element interface: element must inherit property "className" with the proper type (5)
+PASS Element interface: element must inherit property "classList" with the proper type (6)
+PASS Element interface: element must inherit property "hasAttributes" with the proper type (7)
+PASS Element interface: element must inherit property "attributes" with the proper type (8)
+PASS Element interface: element must inherit property "getAttribute" with the proper type (9)
+FAIL Element interface: calling getAttribute(DOMString) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Element interface: element must inherit property "getAttributeNS" with the proper type (10)
+FAIL Element interface: calling getAttributeNS(DOMString,DOMString) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Element interface: element must inherit property "setAttribute" with the proper type (11)
+FAIL Element interface: calling setAttribute(DOMString,DOMString) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Element interface: element must inherit property "setAttributeNS" with the proper type (12)
+FAIL Element interface: calling setAttributeNS(DOMString,DOMString,DOMString) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Element interface: element must inherit property "removeAttribute" with the proper type (13)
+FAIL Element interface: calling removeAttribute(DOMString) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Element interface: element must inherit property "removeAttributeNS" with the proper type (14)
+PASS Element interface: calling removeAttributeNS(DOMString,DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "hasAttribute" with the proper type (15)
+PASS Element interface: calling hasAttribute(DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "hasAttributeNS" with the proper type (16)
+FAIL Element interface: calling hasAttributeNS(DOMString,DOMString) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Element interface: element must inherit property "getAttributeNode" with the proper type (17)
+FAIL Element interface: calling getAttributeNode(DOMString) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Element interface: element must inherit property "getAttributeNodeNS" with the proper type (18)
+FAIL Element interface: calling getAttributeNodeNS(DOMString,DOMString) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Element interface: element must inherit property "setAttributeNode" with the proper type (19)
+FAIL Element interface: calling setAttributeNode(Attr) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: TypeMismatchError: DOM Exception 17" ("TypeMismatchError") expected object "TypeError" ("TypeError")
+PASS Element interface: element must inherit property "setAttributeNodeNS" with the proper type (20)
+FAIL Element interface: calling setAttributeNodeNS(Attr) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: TypeMismatchError: DOM Exception 17" ("TypeMismatchError") expected object "TypeError" ("TypeError")
+PASS Element interface: element must inherit property "removeAttributeNode" with the proper type (21)
+FAIL Element interface: calling removeAttributeNode(Attr) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: TypeMismatchError: DOM Exception 17" ("TypeMismatchError") expected object "TypeError" ("TypeError")
+PASS Element interface: element must inherit property "closest" with the proper type (22)
+PASS Element interface: calling closest(DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "matches" with the proper type (23)
+PASS Element interface: calling matches(DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "getElementsByTagName" with the proper type (24)
+FAIL Element interface: calling getElementsByTagName(DOMString) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Element interface: element must inherit property "getElementsByTagNameNS" with the proper type (25)
+FAIL Element interface: calling getElementsByTagNameNS(DOMString,DOMString) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Element interface: element must inherit property "getElementsByClassName" with the proper type (26)
+FAIL Element interface: calling getElementsByClassName(DOMString) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Element interface: element must inherit property "children" with the proper type (27)
+PASS Element interface: element must inherit property "firstElementChild" with the proper type (28)
+PASS Element interface: element must inherit property "lastElementChild" with the proper type (29)
+PASS Element interface: element must inherit property "childElementCount" with the proper type (30)
+PASS Element interface: element must inherit property "prepend" with the proper type (31)
+PASS Element interface: calling prepend([object Object],[object Object]) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "append" with the proper type (32)
+PASS Element interface: calling append([object Object],[object Object]) on element with too few arguments must throw TypeError
+FAIL Element interface: element must inherit property "query" with the proper type (33) assert_inherits: property "query" not found in prototype chain
+FAIL Element interface: calling query(DOMString) on element with too few arguments must throw TypeError assert_inherits: property "query" not found in prototype chain
+FAIL Element interface: element must inherit property "queryAll" with the proper type (34) assert_inherits: property "queryAll" not found in prototype chain
+FAIL Element interface: calling queryAll(DOMString) on element with too few arguments must throw TypeError assert_inherits: property "queryAll" not found in prototype chain
+PASS Element interface: element must inherit property "querySelector" with the proper type (35)
+PASS Element interface: calling querySelector(DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "querySelectorAll" with the proper type (36)
+PASS Element interface: calling querySelectorAll(DOMString) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "previousElementSibling" with the proper type (37)
+PASS Element interface: element must inherit property "nextElementSibling" with the proper type (38)
+PASS Element interface: element must inherit property "before" with the proper type (39)
+PASS Element interface: calling before([object Object],[object Object]) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "after" with the proper type (40)
+PASS Element interface: calling after([object Object],[object Object]) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "replaceWith" with the proper type (41)
+PASS Element interface: calling replaceWith([object Object],[object Object]) on element with too few arguments must throw TypeError
+PASS Element interface: element must inherit property "remove" with the proper type (42)
+PASS Node interface: element must inherit property "ELEMENT_NODE" with the proper type (0)
+PASS Node interface: element must inherit property "ATTRIBUTE_NODE" with the proper type (1)
+PASS Node interface: element must inherit property "TEXT_NODE" with the proper type (2)
+PASS Node interface: element must inherit property "CDATA_SECTION_NODE" with the proper type (3)
+PASS Node interface: element must inherit property "ENTITY_REFERENCE_NODE" with the proper type (4)
+PASS Node interface: element must inherit property "ENTITY_NODE" with the proper type (5)
+PASS Node interface: element must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type (6)
+PASS Node interface: element must inherit property "COMMENT_NODE" with the proper type (7)
+PASS Node interface: element must inherit property "DOCUMENT_NODE" with the proper type (8)
+PASS Node interface: element must inherit property "DOCUMENT_TYPE_NODE" with the proper type (9)
+PASS Node interface: element must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type (10)
+PASS Node interface: element must inherit property "NOTATION_NODE" with the proper type (11)
+PASS Node interface: element must inherit property "nodeType" with the proper type (12)
+PASS Node interface: element must inherit property "nodeName" with the proper type (13)
+PASS Node interface: element must inherit property "baseURI" with the proper type (14)
+PASS Node interface: element must inherit property "ownerDocument" with the proper type (15)
+PASS Node interface: element must inherit property "parentNode" with the proper type (16)
+PASS Node interface: element must inherit property "parentElement" with the proper type (17)
+PASS Node interface: element must inherit property "hasChildNodes" with the proper type (18)
+PASS Node interface: element must inherit property "childNodes" with the proper type (19)
+PASS Node interface: element must inherit property "firstChild" with the proper type (20)
+PASS Node interface: element must inherit property "lastChild" with the proper type (21)
+PASS Node interface: element must inherit property "previousSibling" with the proper type (22)
+PASS Node interface: element must inherit property "nextSibling" with the proper type (23)
+PASS Node interface: element must inherit property "nodeValue" with the proper type (24)
+PASS Node interface: element must inherit property "textContent" with the proper type (25)
+PASS Node interface: element must inherit property "normalize" with the proper type (26)
+PASS Node interface: element must inherit property "cloneNode" with the proper type (27)
+PASS Node interface: calling cloneNode(boolean) on element with too few arguments must throw TypeError
+PASS Node interface: element must inherit property "isEqualNode" with the proper type (28)
+FAIL Node interface: calling isEqualNode(Node) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: element must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (29)
+PASS Node interface: element must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (30)
+PASS Node interface: element must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (31)
+PASS Node interface: element must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (32)
+PASS Node interface: element must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (33)
+PASS Node interface: element must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (34)
+PASS Node interface: element must inherit property "compareDocumentPosition" with the proper type (35)
+FAIL Node interface: calling compareDocumentPosition(Node) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: element must inherit property "contains" with the proper type (36)
+FAIL Node interface: calling contains(Node) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: element must inherit property "lookupPrefix" with the proper type (37)
+FAIL Node interface: calling lookupPrefix(DOMString) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: element must inherit property "lookupNamespaceURI" with the proper type (38)
+FAIL Node interface: calling lookupNamespaceURI(DOMString) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: element must inherit property "isDefaultNamespace" with the proper type (39)
+FAIL Node interface: calling isDefaultNamespace(DOMString) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: element must inherit property "insertBefore" with the proper type (40)
+FAIL Node interface: calling insertBefore(Node,Node) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Node interface: element must inherit property "appendChild" with the proper type (41)
+FAIL Node interface: calling appendChild(Node) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Node interface: element must inherit property "replaceChild" with the proper type (42)
+FAIL Node interface: calling replaceChild(Node,Node) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: element must inherit property "removeChild" with the proper type (43)
+FAIL Node interface: calling removeChild(Node) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS EventTarget interface: element must inherit property "addEventListener" with the proper type (0)
+FAIL EventTarget interface: calling addEventListener(DOMString,EventListener,boolean) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS EventTarget interface: element must inherit property "removeEventListener" with the proper type (1)
+FAIL EventTarget interface: calling removeEventListener(DOMString,EventListener,boolean) on element with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS EventTarget interface: element must inherit property "dispatchEvent" with the proper type (2)
+PASS EventTarget interface: calling dispatchEvent(Event) on element with too few arguments must throw TypeError
+FAIL NamedNodeMap interface: existence and properties of interface object assert_equals: class string of NamedNodeMap expected "[object Function]" but got "[object NamedNodeMapConstructor]"
+PASS NamedNodeMap interface object length
+PASS NamedNodeMap interface: existence and properties of interface prototype object
+FAIL NamedNodeMap interface: existence and properties of interface prototype object's "constructor" property assert_own_property: NamedNodeMap.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL NamedNodeMap interface: attribute length assert_true: The prototype object must have a property "length" expected true got false
+FAIL NamedNodeMap interface: operation item(unsigned long) assert_equals: property has wrong .length expected 1 but got 0
+FAIL NamedNodeMap interface: operation getNamedItem(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL NamedNodeMap interface: operation getNamedItemNS(DOMString,DOMString) assert_equals: property has wrong .length expected 2 but got 0
+FAIL NamedNodeMap interface: operation setNamedItem(Attr) assert_equals: property has wrong .length expected 1 but got 0
+FAIL NamedNodeMap interface: operation setNamedItemNS(Attr) assert_equals: property has wrong .length expected 1 but got 0
+FAIL NamedNodeMap interface: operation removeNamedItem(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL NamedNodeMap interface: operation removeNamedItemNS(DOMString,DOMString) assert_equals: property has wrong .length expected 2 but got 0
+FAIL Attr interface: existence and properties of interface object assert_equals: class string of Attr expected "[object Function]" but got "[object AttrConstructor]"
+PASS Attr interface object length
+FAIL Attr interface: existence and properties of interface prototype object assert_equals: prototype of Attr.prototype is not Object.prototype expected object "[object Object]" but got Node object of unknown type
+FAIL Attr interface: existence and properties of interface prototype object's "constructor" property assert_true: Attr.prototype.constructor is not writable expected true got false
+FAIL Attr interface: attribute namespaceURI assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Attr interface: attribute prefix assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Attr interface: attribute localName assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Attr interface: attribute name assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Attr interface: attribute value assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Attr interface: attribute nodeValue assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Attr interface: attribute textContent assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Attr interface: attribute ownerElement assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Attr interface: attribute specified assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+PASS Attr must be primary interface of document.querySelector("[id]").attributes[0]
+PASS Stringification of document.querySelector("[id]").attributes[0]
+PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "namespaceURI" with the proper type (0)
+PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "prefix" with the proper type (1)
+PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "localName" with the proper type (2)
+PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "name" with the proper type (3)
+PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "value" with the proper type (4)
+PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "nodeValue" with the proper type (5)
+PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "textContent" with the proper type (6)
+PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "ownerElement" with the proper type (7)
+PASS Attr interface: document.querySelector("[id]").attributes[0] must inherit property "specified" with the proper type (8)
+FAIL CharacterData interface: existence and properties of interface object assert_equals: class string of CharacterData expected "[object Function]" but got "[object CharacterDataConstructor]"
+PASS CharacterData interface object length
+PASS CharacterData interface: existence and properties of interface prototype object
+FAIL CharacterData interface: existence and properties of interface prototype object's "constructor" property assert_true: CharacterData.prototype.constructor is not writable expected true got false
+FAIL CharacterData interface: attribute data assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL CharacterData interface: attribute length assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL CharacterData interface: operation substringData(unsigned long,unsigned long) assert_equals: property has wrong .length expected 2 but got 0
+FAIL CharacterData interface: operation appendData(DOMString) assert_equals: property has wrong .length expected 1 but got 0
+FAIL CharacterData interface: operation insertData(unsigned long,DOMString) assert_equals: property has wrong .length expected 2 but got 0
+FAIL CharacterData interface: operation deleteData(unsigned long,unsigned long) assert_equals: property has wrong .length expected 2 but got 0
+FAIL CharacterData interface: operation replaceData(unsigned long,unsigned long,DOMString) assert_equals: property has wrong .length expected 3 but got 0
+FAIL CharacterData interface: attribute previousElementSibling assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL CharacterData interface: attribute nextElementSibling assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL CharacterData interface: operation before([object Object],[object Object]) assert_equals: property has wrong .length expected 0 but got 1
+FAIL CharacterData interface: operation after([object Object],[object Object]) assert_equals: property has wrong .length expected 0 but got 1
+FAIL CharacterData interface: operation replaceWith([object Object],[object Object]) assert_equals: property has wrong .length expected 0 but got 1
+PASS CharacterData interface: operation remove()
+FAIL Text interface: existence and properties of interface object assert_equals: class string of Text expected "[object Function]" but got "[object TextConstructor]"
+PASS Text interface object length
+PASS Text interface: existence and properties of interface prototype object
+FAIL Text interface: existence and properties of interface prototype object's "constructor" property assert_true: Text.prototype.constructor is not writable expected true got false
+PASS Text interface: operation splitText(unsigned long)
+FAIL Text interface: attribute wholeText assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+PASS Text must be primary interface of document.createTextNode("abc")
+PASS Stringification of document.createTextNode("abc")
+PASS Text interface: document.createTextNode("abc") must inherit property "splitText" with the proper type (0)
+PASS Text interface: calling splitText(unsigned long) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS Text interface: document.createTextNode("abc") must inherit property "wholeText" with the proper type (1)
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "data" with the proper type (0)
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "length" with the proper type (1)
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "substringData" with the proper type (2)
+FAIL CharacterData interface: calling substringData(unsigned long,unsigned long) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "appendData" with the proper type (3)
+FAIL CharacterData interface: calling appendData(DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "insertData" with the proper type (4)
+FAIL CharacterData interface: calling insertData(unsigned long,DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "deleteData" with the proper type (5)
+FAIL CharacterData interface: calling deleteData(unsigned long,unsigned long) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "replaceData" with the proper type (6)
+FAIL CharacterData interface: calling replaceData(unsigned long,unsigned long,DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "previousElementSibling" with the proper type (7)
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "nextElementSibling" with the proper type (8)
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "before" with the proper type (9)
+PASS CharacterData interface: calling before([object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "after" with the proper type (10)
+PASS CharacterData interface: calling after([object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "replaceWith" with the proper type (11)
+PASS CharacterData interface: calling replaceWith([object Object],[object Object]) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createTextNode("abc") must inherit property "remove" with the proper type (12)
+PASS Node interface: document.createTextNode("abc") must inherit property "ELEMENT_NODE" with the proper type (0)
+PASS Node interface: document.createTextNode("abc") must inherit property "ATTRIBUTE_NODE" with the proper type (1)
+PASS Node interface: document.createTextNode("abc") must inherit property "TEXT_NODE" with the proper type (2)
+PASS Node interface: document.createTextNode("abc") must inherit property "CDATA_SECTION_NODE" with the proper type (3)
+PASS Node interface: document.createTextNode("abc") must inherit property "ENTITY_REFERENCE_NODE" with the proper type (4)
+PASS Node interface: document.createTextNode("abc") must inherit property "ENTITY_NODE" with the proper type (5)
+PASS Node interface: document.createTextNode("abc") must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type (6)
+PASS Node interface: document.createTextNode("abc") must inherit property "COMMENT_NODE" with the proper type (7)
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_NODE" with the proper type (8)
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_TYPE_NODE" with the proper type (9)
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type (10)
+PASS Node interface: document.createTextNode("abc") must inherit property "NOTATION_NODE" with the proper type (11)
+PASS Node interface: document.createTextNode("abc") must inherit property "nodeType" with the proper type (12)
+PASS Node interface: document.createTextNode("abc") must inherit property "nodeName" with the proper type (13)
+PASS Node interface: document.createTextNode("abc") must inherit property "baseURI" with the proper type (14)
+PASS Node interface: document.createTextNode("abc") must inherit property "ownerDocument" with the proper type (15)
+PASS Node interface: document.createTextNode("abc") must inherit property "parentNode" with the proper type (16)
+PASS Node interface: document.createTextNode("abc") must inherit property "parentElement" with the proper type (17)
+PASS Node interface: document.createTextNode("abc") must inherit property "hasChildNodes" with the proper type (18)
+PASS Node interface: document.createTextNode("abc") must inherit property "childNodes" with the proper type (19)
+PASS Node interface: document.createTextNode("abc") must inherit property "firstChild" with the proper type (20)
+PASS Node interface: document.createTextNode("abc") must inherit property "lastChild" with the proper type (21)
+PASS Node interface: document.createTextNode("abc") must inherit property "previousSibling" with the proper type (22)
+PASS Node interface: document.createTextNode("abc") must inherit property "nextSibling" with the proper type (23)
+PASS Node interface: document.createTextNode("abc") must inherit property "nodeValue" with the proper type (24)
+PASS Node interface: document.createTextNode("abc") must inherit property "textContent" with the proper type (25)
+PASS Node interface: document.createTextNode("abc") must inherit property "normalize" with the proper type (26)
+PASS Node interface: document.createTextNode("abc") must inherit property "cloneNode" with the proper type (27)
+PASS Node interface: calling cloneNode(boolean) on document.createTextNode("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createTextNode("abc") must inherit property "isEqualNode" with the proper type (28)
+FAIL Node interface: calling isEqualNode(Node) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (29)
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (30)
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (31)
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (32)
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (33)
+PASS Node interface: document.createTextNode("abc") must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (34)
+PASS Node interface: document.createTextNode("abc") must inherit property "compareDocumentPosition" with the proper type (35)
+FAIL Node interface: calling compareDocumentPosition(Node) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createTextNode("abc") must inherit property "contains" with the proper type (36)
+FAIL Node interface: calling contains(Node) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createTextNode("abc") must inherit property "lookupPrefix" with the proper type (37)
+FAIL Node interface: calling lookupPrefix(DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createTextNode("abc") must inherit property "lookupNamespaceURI" with the proper type (38)
+FAIL Node interface: calling lookupNamespaceURI(DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createTextNode("abc") must inherit property "isDefaultNamespace" with the proper type (39)
+FAIL Node interface: calling isDefaultNamespace(DOMString) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createTextNode("abc") must inherit property "insertBefore" with the proper type (40)
+FAIL Node interface: calling insertBefore(Node,Node) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Node interface: document.createTextNode("abc") must inherit property "appendChild" with the proper type (41)
+FAIL Node interface: calling appendChild(Node) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Node interface: document.createTextNode("abc") must inherit property "replaceChild" with the proper type (42)
+FAIL Node interface: calling replaceChild(Node,Node) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Node interface: document.createTextNode("abc") must inherit property "removeChild" with the proper type (43)
+FAIL Node interface: calling removeChild(Node) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS EventTarget interface: document.createTextNode("abc") must inherit property "addEventListener" with the proper type (0)
+FAIL EventTarget interface: calling addEventListener(DOMString,EventListener,boolean) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS EventTarget interface: document.createTextNode("abc") must inherit property "removeEventListener" with the proper type (1)
+FAIL EventTarget interface: calling removeEventListener(DOMString,EventListener,boolean) on document.createTextNode("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS EventTarget interface: document.createTextNode("abc") must inherit property "dispatchEvent" with the proper type (2)
+PASS EventTarget interface: calling dispatchEvent(Event) on document.createTextNode("abc") with too few arguments must throw TypeError
+FAIL ProcessingInstruction interface: existence and properties of interface object assert_equals: class string of ProcessingInstruction expected "[object Function]" but got "[object ProcessingInstructionConstructor]"
+PASS ProcessingInstruction interface object length
+PASS ProcessingInstruction interface: existence and properties of interface prototype object
+FAIL ProcessingInstruction interface: existence and properties of interface prototype object's "constructor" property assert_true: ProcessingInstruction.prototype.constructor is not writable expected true got false
+FAIL ProcessingInstruction interface: attribute target assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+PASS ProcessingInstruction must be primary interface of xmlDoc.createProcessingInstruction("abc", "def")
+PASS Stringification of xmlDoc.createProcessingInstruction("abc", "def")
+PASS ProcessingInstruction interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "target" with the proper type (0)
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "data" with the proper type (0)
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "length" with the proper type (1)
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "substringData" with the proper type (2)
+FAIL CharacterData interface: calling substringData(unsigned long,unsigned long) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "appendData" with the proper type (3)
+FAIL CharacterData interface: calling appendData(DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "insertData" with the proper type (4)
+FAIL CharacterData interface: calling insertData(unsigned long,DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "deleteData" with the proper type (5)
+FAIL CharacterData interface: calling deleteData(unsigned long,unsigned long) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "replaceData" with the proper type (6)
+FAIL CharacterData interface: calling replaceData(unsigned long,unsigned long,DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "previousElementSibling" with the proper type (7)
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nextElementSibling" with the proper type (8)
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "before" with the proper type (9)
+PASS CharacterData interface: calling before([object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "after" with the proper type (10)
+PASS CharacterData interface: calling after([object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "replaceWith" with the proper type (11)
+PASS CharacterData interface: calling replaceWith([object Object],[object Object]) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS CharacterData interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "remove" with the proper type (12)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ELEMENT_NODE" with the proper type (0)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ATTRIBUTE_NODE" with the proper type (1)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "TEXT_NODE" with the proper type (2)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "CDATA_SECTION_NODE" with the proper type (3)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ENTITY_REFERENCE_NODE" with the proper type (4)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ENTITY_NODE" with the proper type (5)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type (6)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "COMMENT_NODE" with the proper type (7)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_NODE" with the proper type (8)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_TYPE_NODE" with the proper type (9)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type (10)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "NOTATION_NODE" with the proper type (11)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nodeType" with the proper type (12)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nodeName" with the proper type (13)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "baseURI" with the proper type (14)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "ownerDocument" with the proper type (15)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "parentNode" with the proper type (16)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "parentElement" with the proper type (17)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "hasChildNodes" with the proper type (18)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "childNodes" with the proper type (19)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "firstChild" with the proper type (20)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "lastChild" with the proper type (21)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "previousSibling" with the proper type (22)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nextSibling" with the proper type (23)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "nodeValue" with the proper type (24)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "textContent" with the proper type (25)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "normalize" with the proper type (26)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "cloneNode" with the proper type (27)
+PASS Node interface: calling cloneNode(boolean) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "isEqualNode" with the proper type (28)
+FAIL Node interface: calling isEqualNode(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (29)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (30)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (31)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (32)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (33)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (34)
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "compareDocumentPosition" with the proper type (35)
+FAIL Node interface: calling compareDocumentPosition(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "contains" with the proper type (36)
+FAIL Node interface: calling contains(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "lookupPrefix" with the proper type (37)
+FAIL Node interface: calling lookupPrefix(DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "lookupNamespaceURI" with the proper type (38)
+FAIL Node interface: calling lookupNamespaceURI(DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "isDefaultNamespace" with the proper type (39)
+FAIL Node interface: calling isDefaultNamespace(DOMString) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "insertBefore" with the proper type (40)
+FAIL Node interface: calling insertBefore(Node,Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "appendChild" with the proper type (41)
+FAIL Node interface: calling appendChild(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "replaceChild" with the proper type (42)
+FAIL Node interface: calling replaceChild(Node,Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Node interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "removeChild" with the proper type (43)
+FAIL Node interface: calling removeChild(Node) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS EventTarget interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "addEventListener" with the proper type (0)
+FAIL EventTarget interface: calling addEventListener(DOMString,EventListener,boolean) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS EventTarget interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "removeEventListener" with the proper type (1)
+FAIL EventTarget interface: calling removeEventListener(DOMString,EventListener,boolean) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS EventTarget interface: xmlDoc.createProcessingInstruction("abc", "def") must inherit property "dispatchEvent" with the proper type (2)
+PASS EventTarget interface: calling dispatchEvent(Event) on xmlDoc.createProcessingInstruction("abc", "def") with too few arguments must throw TypeError
+FAIL Comment interface: existence and properties of interface object assert_equals: class string of Comment expected "[object Function]" but got "[object CommentConstructor]"
+PASS Comment interface object length
+PASS Comment interface: existence and properties of interface prototype object
+FAIL Comment interface: existence and properties of interface prototype object's "constructor" property assert_true: Comment.prototype.constructor is not writable expected true got false
+PASS Comment must be primary interface of document.createComment("abc")
+PASS Stringification of document.createComment("abc")
+PASS CharacterData interface: document.createComment("abc") must inherit property "data" with the proper type (0)
+PASS CharacterData interface: document.createComment("abc") must inherit property "length" with the proper type (1)
+PASS CharacterData interface: document.createComment("abc") must inherit property "substringData" with the proper type (2)
+FAIL CharacterData interface: calling substringData(unsigned long,unsigned long) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS CharacterData interface: document.createComment("abc") must inherit property "appendData" with the proper type (3)
+FAIL CharacterData interface: calling appendData(DOMString) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS CharacterData interface: document.createComment("abc") must inherit property "insertData" with the proper type (4)
+FAIL CharacterData interface: calling insertData(unsigned long,DOMString) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS CharacterData interface: document.createComment("abc") must inherit property "deleteData" with the proper type (5)
+FAIL CharacterData interface: calling deleteData(unsigned long,unsigned long) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS CharacterData interface: document.createComment("abc") must inherit property "replaceData" with the proper type (6)
+FAIL CharacterData interface: calling replaceData(unsigned long,unsigned long,DOMString) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS CharacterData interface: document.createComment("abc") must inherit property "previousElementSibling" with the proper type (7)
+PASS CharacterData interface: document.createComment("abc") must inherit property "nextElementSibling" with the proper type (8)
+PASS CharacterData interface: document.createComment("abc") must inherit property "before" with the proper type (9)
+PASS CharacterData interface: calling before([object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createComment("abc") must inherit property "after" with the proper type (10)
+PASS CharacterData interface: calling after([object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createComment("abc") must inherit property "replaceWith" with the proper type (11)
+PASS CharacterData interface: calling replaceWith([object Object],[object Object]) on document.createComment("abc") with too few arguments must throw TypeError
+PASS CharacterData interface: document.createComment("abc") must inherit property "remove" with the proper type (12)
+PASS Node interface: document.createComment("abc") must inherit property "ELEMENT_NODE" with the proper type (0)
+PASS Node interface: document.createComment("abc") must inherit property "ATTRIBUTE_NODE" with the proper type (1)
+PASS Node interface: document.createComment("abc") must inherit property "TEXT_NODE" with the proper type (2)
+PASS Node interface: document.createComment("abc") must inherit property "CDATA_SECTION_NODE" with the proper type (3)
+PASS Node interface: document.createComment("abc") must inherit property "ENTITY_REFERENCE_NODE" with the proper type (4)
+PASS Node interface: document.createComment("abc") must inherit property "ENTITY_NODE" with the proper type (5)
+PASS Node interface: document.createComment("abc") must inherit property "PROCESSING_INSTRUCTION_NODE" with the proper type (6)
+PASS Node interface: document.createComment("abc") must inherit property "COMMENT_NODE" with the proper type (7)
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_NODE" with the proper type (8)
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_TYPE_NODE" with the proper type (9)
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_FRAGMENT_NODE" with the proper type (10)
+PASS Node interface: document.createComment("abc") must inherit property "NOTATION_NODE" with the proper type (11)
+PASS Node interface: document.createComment("abc") must inherit property "nodeType" with the proper type (12)
+PASS Node interface: document.createComment("abc") must inherit property "nodeName" with the proper type (13)
+PASS Node interface: document.createComment("abc") must inherit property "baseURI" with the proper type (14)
+PASS Node interface: document.createComment("abc") must inherit property "ownerDocument" with the proper type (15)
+PASS Node interface: document.createComment("abc") must inherit property "parentNode" with the proper type (16)
+PASS Node interface: document.createComment("abc") must inherit property "parentElement" with the proper type (17)
+PASS Node interface: document.createComment("abc") must inherit property "hasChildNodes" with the proper type (18)
+PASS Node interface: document.createComment("abc") must inherit property "childNodes" with the proper type (19)
+PASS Node interface: document.createComment("abc") must inherit property "firstChild" with the proper type (20)
+PASS Node interface: document.createComment("abc") must inherit property "lastChild" with the proper type (21)
+PASS Node interface: document.createComment("abc") must inherit property "previousSibling" with the proper type (22)
+PASS Node interface: document.createComment("abc") must inherit property "nextSibling" with the proper type (23)
+PASS Node interface: document.createComment("abc") must inherit property "nodeValue" with the proper type (24)
+PASS Node interface: document.createComment("abc") must inherit property "textContent" with the proper type (25)
+PASS Node interface: document.createComment("abc") must inherit property "normalize" with the proper type (26)
+PASS Node interface: document.createComment("abc") must inherit property "cloneNode" with the proper type (27)
+PASS Node interface: calling cloneNode(boolean) on document.createComment("abc") with too few arguments must throw TypeError
+PASS Node interface: document.createComment("abc") must inherit property "isEqualNode" with the proper type (28)
+FAIL Node interface: calling isEqualNode(Node) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_DISCONNECTED" with the proper type (29)
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_PRECEDING" with the proper type (30)
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_FOLLOWING" with the proper type (31)
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_CONTAINS" with the proper type (32)
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_CONTAINED_BY" with the proper type (33)
+PASS Node interface: document.createComment("abc") must inherit property "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC" with the proper type (34)
+PASS Node interface: document.createComment("abc") must inherit property "compareDocumentPosition" with the proper type (35)
+FAIL Node interface: calling compareDocumentPosition(Node) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createComment("abc") must inherit property "contains" with the proper type (36)
+FAIL Node interface: calling contains(Node) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createComment("abc") must inherit property "lookupPrefix" with the proper type (37)
+FAIL Node interface: calling lookupPrefix(DOMString) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createComment("abc") must inherit property "lookupNamespaceURI" with the proper type (38)
+FAIL Node interface: calling lookupNamespaceURI(DOMString) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createComment("abc") must inherit property "isDefaultNamespace" with the proper type (39)
+FAIL Node interface: calling isDefaultNamespace(DOMString) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS Node interface: document.createComment("abc") must inherit property "insertBefore" with the proper type (40)
+FAIL Node interface: calling insertBefore(Node,Node) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Node interface: document.createComment("abc") must inherit property "appendChild" with the proper type (41)
+FAIL Node interface: calling appendChild(Node) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Node interface: document.createComment("abc") must inherit property "replaceChild" with the proper type (42)
+FAIL Node interface: calling replaceChild(Node,Node) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Node interface: document.createComment("abc") must inherit property "removeChild" with the proper type (43)
+FAIL Node interface: calling removeChild(Node) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS EventTarget interface: document.createComment("abc") must inherit property "addEventListener" with the proper type (0)
+FAIL EventTarget interface: calling addEventListener(DOMString,EventListener,boolean) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS EventTarget interface: document.createComment("abc") must inherit property "removeEventListener" with the proper type (1)
+FAIL EventTarget interface: calling removeEventListener(DOMString,EventListener,boolean) on document.createComment("abc") with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" did not throw
+PASS EventTarget interface: document.createComment("abc") must inherit property "dispatchEvent" with the proper type (2)
+PASS EventTarget interface: calling dispatchEvent(Event) on document.createComment("abc") with too few arguments must throw TypeError
+FAIL Range interface: existence and properties of interface object assert_equals: class string of Range expected "[object Function]" but got "[object RangeConstructor]"
+PASS Range interface object length
+PASS Range interface: existence and properties of interface prototype object
+FAIL Range interface: existence and properties of interface prototype object's "constructor" property assert_true: Range.prototype.constructor is not writable expected true got false
+FAIL Range interface: attribute startContainer assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Range interface: attribute startOffset assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Range interface: attribute endContainer assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Range interface: attribute endOffset assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Range interface: attribute collapsed assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Range interface: attribute commonAncestorContainer assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL Range interface: operation setStart(Node,unsigned long) assert_equals: property has wrong .length expected 2 but got 0
+FAIL Range interface: operation setEnd(Node,unsigned long) assert_equals: property has wrong .length expected 2 but got 0
+FAIL Range interface: operation setStartBefore(Node) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Range interface: operation setStartAfter(Node) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Range interface: operation setEndBefore(Node) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Range interface: operation setEndAfter(Node) assert_equals: property has wrong .length expected 1 but got 0
+PASS Range interface: operation collapse(boolean)
+FAIL Range interface: operation selectNode(Node) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Range interface: operation selectNodeContents(Node) assert_equals: property has wrong .length expected 1 but got 0
+PASS Range interface: constant START_TO_START on interface object
+PASS Range interface: constant START_TO_START on interface prototype object
+PASS Range interface: constant START_TO_END on interface object
+PASS Range interface: constant START_TO_END on interface prototype object
+PASS Range interface: constant END_TO_END on interface object
+PASS Range interface: constant END_TO_END on interface prototype object
+PASS Range interface: constant END_TO_START on interface object
+PASS Range interface: constant END_TO_START on interface prototype object
+FAIL Range interface: operation compareBoundaryPoints(unsigned short,Range) assert_equals: property has wrong .length expected 2 but got 0
+PASS Range interface: operation deleteContents()
+PASS Range interface: operation extractContents()
+PASS Range interface: operation cloneContents()
+FAIL Range interface: operation insertNode(Node) assert_equals: property has wrong .length expected 1 but got 0
+FAIL Range interface: operation surroundContents(Node) assert_equals: property has wrong .length expected 1 but got 0
+PASS Range interface: operation cloneRange()
+PASS Range interface: operation detach()
+FAIL Range interface: operation isPointInRange(Node,unsigned long) assert_equals: property has wrong .length expected 2 but got 0
+FAIL Range interface: operation comparePoint(Node,unsigned long) assert_equals: property has wrong .length expected 2 but got 0
+FAIL Range interface: operation intersectsNode(Node) assert_equals: property has wrong .length expected 1 but got 0
+PASS Range interface: stringifier
+PASS Range must be primary interface of document.createRange()
+PASS Stringification of document.createRange()
+PASS Range interface: document.createRange() must inherit property "startContainer" with the proper type (0)
+PASS Range interface: document.createRange() must inherit property "startOffset" with the proper type (1)
+PASS Range interface: document.createRange() must inherit property "endContainer" with the proper type (2)
+PASS Range interface: document.createRange() must inherit property "endOffset" with the proper type (3)
+PASS Range interface: document.createRange() must inherit property "collapsed" with the proper type (4)
+PASS Range interface: document.createRange() must inherit property "commonAncestorContainer" with the proper type (5)
+PASS Range interface: document.createRange() must inherit property "setStart" with the proper type (6)
+FAIL Range interface: calling setStart(Node,unsigned long) on document.createRange() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Range interface: document.createRange() must inherit property "setEnd" with the proper type (7)
+FAIL Range interface: calling setEnd(Node,unsigned long) on document.createRange() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Range interface: document.createRange() must inherit property "setStartBefore" with the proper type (8)
+FAIL Range interface: calling setStartBefore(Node) on document.createRange() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Range interface: document.createRange() must inherit property "setStartAfter" with the proper type (9)
+FAIL Range interface: calling setStartAfter(Node) on document.createRange() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Range interface: document.createRange() must inherit property "setEndBefore" with the proper type (10)
+FAIL Range interface: calling setEndBefore(Node) on document.createRange() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Range interface: document.createRange() must inherit property "setEndAfter" with the proper type (11)
+FAIL Range interface: calling setEndAfter(Node) on document.createRange() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Range interface: document.createRange() must inherit property "collapse" with the proper type (12)
+PASS Range interface: calling collapse(boolean) on document.createRange() with too few arguments must throw TypeError
+PASS Range interface: document.createRange() must inherit property "selectNode" with the proper type (13)
+FAIL Range interface: calling selectNode(Node) on document.createRange() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Range interface: document.createRange() must inherit property "selectNodeContents" with the proper type (14)
+FAIL Range interface: calling selectNodeContents(Node) on document.createRange() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Range interface: document.createRange() must inherit property "START_TO_START" with the proper type (15)
+PASS Range interface: document.createRange() must inherit property "START_TO_END" with the proper type (16)
+PASS Range interface: document.createRange() must inherit property "END_TO_END" with the proper type (17)
+PASS Range interface: document.createRange() must inherit property "END_TO_START" with the proper type (18)
+PASS Range interface: document.createRange() must inherit property "compareBoundaryPoints" with the proper type (19)
+FAIL Range interface: calling compareBoundaryPoints(unsigned short,Range) on document.createRange() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Range interface: document.createRange() must inherit property "deleteContents" with the proper type (20)
+PASS Range interface: document.createRange() must inherit property "extractContents" with the proper type (21)
+PASS Range interface: document.createRange() must inherit property "cloneContents" with the proper type (22)
+PASS Range interface: document.createRange() must inherit property "insertNode" with the proper type (23)
+FAIL Range interface: calling insertNode(Node) on document.createRange() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Range interface: document.createRange() must inherit property "surroundContents" with the proper type (24)
+FAIL Range interface: calling surroundContents(Node) on document.createRange() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Range interface: document.createRange() must inherit property "cloneRange" with the proper type (25)
+PASS Range interface: document.createRange() must inherit property "detach" with the proper type (26)
+PASS Range interface: document.createRange() must inherit property "isPointInRange" with the proper type (27)
+FAIL Range interface: calling isPointInRange(Node,unsigned long) on document.createRange() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Range interface: document.createRange() must inherit property "comparePoint" with the proper type (28)
+FAIL Range interface: calling comparePoint(Node,unsigned long) on document.createRange() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Range interface: document.createRange() must inherit property "intersectsNode" with the proper type (29)
+FAIL Range interface: calling intersectsNode(Node) on document.createRange() with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Range must be primary interface of detachedRange
+PASS Stringification of detachedRange
+PASS Range interface: detachedRange must inherit property "startContainer" with the proper type (0)
+PASS Range interface: detachedRange must inherit property "startOffset" with the proper type (1)
+PASS Range interface: detachedRange must inherit property "endContainer" with the proper type (2)
+PASS Range interface: detachedRange must inherit property "endOffset" with the proper type (3)
+PASS Range interface: detachedRange must inherit property "collapsed" with the proper type (4)
+PASS Range interface: detachedRange must inherit property "commonAncestorContainer" with the proper type (5)
+PASS Range interface: detachedRange must inherit property "setStart" with the proper type (6)
+FAIL Range interface: calling setStart(Node,unsigned long) on detachedRange with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: InvalidStateError: DOM Exception 11" ("InvalidStateError") expected object "TypeError" ("TypeError")
+PASS Range interface: detachedRange must inherit property "setEnd" with the proper type (7)
+FAIL Range interface: calling setEnd(Node,unsigned long) on detachedRange with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: InvalidStateError: DOM Exception 11" ("InvalidStateError") expected object "TypeError" ("TypeError")
+PASS Range interface: detachedRange must inherit property "setStartBefore" with the proper type (8)
+FAIL Range interface: calling setStartBefore(Node) on detachedRange with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: InvalidStateError: DOM Exception 11" ("InvalidStateError") expected object "TypeError" ("TypeError")
+PASS Range interface: detachedRange must inherit property "setStartAfter" with the proper type (9)
+FAIL Range interface: calling setStartAfter(Node) on detachedRange with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: InvalidStateError: DOM Exception 11" ("InvalidStateError") expected object "TypeError" ("TypeError")
+PASS Range interface: detachedRange must inherit property "setEndBefore" with the proper type (10)
+FAIL Range interface: calling setEndBefore(Node) on detachedRange with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: InvalidStateError: DOM Exception 11" ("InvalidStateError") expected object "TypeError" ("TypeError")
+PASS Range interface: detachedRange must inherit property "setEndAfter" with the proper type (11)
+FAIL Range interface: calling setEndAfter(Node) on detachedRange with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: InvalidStateError: DOM Exception 11" ("InvalidStateError") expected object "TypeError" ("TypeError")
+PASS Range interface: detachedRange must inherit property "collapse" with the proper type (12)
+PASS Range interface: calling collapse(boolean) on detachedRange with too few arguments must throw TypeError
+PASS Range interface: detachedRange must inherit property "selectNode" with the proper type (13)
+FAIL Range interface: calling selectNode(Node) on detachedRange with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: InvalidStateError: DOM Exception 11" ("InvalidStateError") expected object "TypeError" ("TypeError")
+PASS Range interface: detachedRange must inherit property "selectNodeContents" with the proper type (14)
+FAIL Range interface: calling selectNodeContents(Node) on detachedRange with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: InvalidStateError: DOM Exception 11" ("InvalidStateError") expected object "TypeError" ("TypeError")
+PASS Range interface: detachedRange must inherit property "START_TO_START" with the proper type (15)
+PASS Range interface: detachedRange must inherit property "START_TO_END" with the proper type (16)
+PASS Range interface: detachedRange must inherit property "END_TO_END" with the proper type (17)
+PASS Range interface: detachedRange must inherit property "END_TO_START" with the proper type (18)
+PASS Range interface: detachedRange must inherit property "compareBoundaryPoints" with the proper type (19)
+FAIL Range interface: calling compareBoundaryPoints(unsigned short,Range) on detachedRange with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: InvalidStateError: DOM Exception 11" ("InvalidStateError") expected object "TypeError" ("TypeError")
+PASS Range interface: detachedRange must inherit property "deleteContents" with the proper type (20)
+PASS Range interface: detachedRange must inherit property "extractContents" with the proper type (21)
+PASS Range interface: detachedRange must inherit property "cloneContents" with the proper type (22)
+PASS Range interface: detachedRange must inherit property "insertNode" with the proper type (23)
+FAIL Range interface: calling insertNode(Node) on detachedRange with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: InvalidStateError: DOM Exception 11" ("InvalidStateError") expected object "TypeError" ("TypeError")
+PASS Range interface: detachedRange must inherit property "surroundContents" with the proper type (24)
+FAIL Range interface: calling surroundContents(Node) on detachedRange with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: InvalidStateError: DOM Exception 11" ("InvalidStateError") expected object "TypeError" ("TypeError")
+PASS Range interface: detachedRange must inherit property "cloneRange" with the proper type (25)
+PASS Range interface: detachedRange must inherit property "detach" with the proper type (26)
+PASS Range interface: detachedRange must inherit property "isPointInRange" with the proper type (27)
+FAIL Range interface: calling isPointInRange(Node,unsigned long) on detachedRange with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: InvalidStateError: DOM Exception 11" ("InvalidStateError") expected object "TypeError" ("TypeError")
+PASS Range interface: detachedRange must inherit property "comparePoint" with the proper type (28)
+FAIL Range interface: calling comparePoint(Node,unsigned long) on detachedRange with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: InvalidStateError: DOM Exception 11" ("InvalidStateError") expected object "TypeError" ("TypeError")
+PASS Range interface: detachedRange must inherit property "intersectsNode" with the proper type (29)
+FAIL Range interface: calling intersectsNode(Node) on detachedRange with too few arguments must throw TypeError assert_throws: Called with 0 arguments function "function () {
+ [native code]
+}" threw object "Error: InvalidStateError: DOM Exception 11" ("InvalidStateError") expected object "TypeError" ("TypeError")
+FAIL NodeIterator interface: existence and properties of interface object assert_equals: class string of NodeIterator expected "[object Function]" but got "[object NodeIteratorConstructor]"
+PASS NodeIterator interface object length
+PASS NodeIterator interface: existence and properties of interface prototype object
+FAIL NodeIterator interface: existence and properties of interface prototype object's "constructor" property assert_true: NodeIterator.prototype.constructor is not writable expected true got false
+FAIL NodeIterator interface: attribute root assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL NodeIterator interface: attribute referenceNode assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL NodeIterator interface: attribute pointerBeforeReferenceNode assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL NodeIterator interface: attribute whatToShow assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL NodeIterator interface: attribute filter assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+PASS NodeIterator interface: operation nextNode()
+PASS NodeIterator interface: operation previousNode()
+PASS NodeIterator interface: operation detach()
+PASS NodeIterator must be primary interface of document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false)
+PASS Stringification of document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false)
+PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "root" with the proper type (0)
+PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "referenceNode" with the proper type (1)
+PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "pointerBeforeReferenceNode" with the proper type (2)
+PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "whatToShow" with the proper type (3)
+PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "filter" with the proper type (4)
+PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "nextNode" with the proper type (5)
+PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "previousNode" with the proper type (6)
+PASS NodeIterator interface: document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "detach" with the proper type (7)
+FAIL TreeWalker interface: existence and properties of interface object assert_equals: class string of TreeWalker expected "[object Function]" but got "[object TreeWalkerConstructor]"
+PASS TreeWalker interface object length
+PASS TreeWalker interface: existence and properties of interface prototype object
+FAIL TreeWalker interface: existence and properties of interface prototype object's "constructor" property assert_true: TreeWalker.prototype.constructor is not writable expected true got false
+FAIL TreeWalker interface: attribute root assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL TreeWalker interface: attribute whatToShow assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL TreeWalker interface: attribute filter assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+FAIL TreeWalker interface: attribute currentNode assert_throws: getting property on prototype object must throw TypeError function "function () {
+ [native code]
+}" did not throw
+PASS TreeWalker interface: operation parentNode()
+PASS TreeWalker interface: operation firstChild()
+PASS TreeWalker interface: operation lastChild()
+PASS TreeWalker interface: operation previousSibling()
+PASS TreeWalker interface: operation nextSibling()
+PASS TreeWalker interface: operation previousNode()
+PASS TreeWalker interface: operation nextNode()
+PASS TreeWalker must be primary interface of document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false)
+PASS Stringification of document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false)
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "root" with the proper type (0)
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "whatToShow" with the proper type (1)
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "filter" with the proper type (2)
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "currentNode" with the proper type (3)
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "parentNode" with the proper type (4)
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "firstChild" with the proper type (5)
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "lastChild" with the proper type (6)
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "previousSibling" with the proper type (7)
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "nextSibling" with the proper type (8)
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "previousNode" with the proper type (9)
+PASS TreeWalker interface: document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false) must inherit property "nextNode" with the proper type (10)
+PASS NodeFilter interface: existence and properties of interface object
+FAIL NodeFilter interface: existence and properties of interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+FAIL NodeFilter interface: existence and properties of interface prototype object's "constructor" property assert_false: NodeFilter should not have a "prototype" property expected false got true
+PASS NodeFilter interface: constant FILTER_ACCEPT on interface object
+FAIL NodeFilter interface: constant FILTER_ACCEPT on interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+PASS NodeFilter interface: constant FILTER_REJECT on interface object
+FAIL NodeFilter interface: constant FILTER_REJECT on interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+PASS NodeFilter interface: constant FILTER_SKIP on interface object
+FAIL NodeFilter interface: constant FILTER_SKIP on interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+PASS NodeFilter interface: constant SHOW_ALL on interface object
+FAIL NodeFilter interface: constant SHOW_ALL on interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+PASS NodeFilter interface: constant SHOW_ELEMENT on interface object
+FAIL NodeFilter interface: constant SHOW_ELEMENT on interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+PASS NodeFilter interface: constant SHOW_ATTRIBUTE on interface object
+FAIL NodeFilter interface: constant SHOW_ATTRIBUTE on interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+PASS NodeFilter interface: constant SHOW_TEXT on interface object
+FAIL NodeFilter interface: constant SHOW_TEXT on interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+PASS NodeFilter interface: constant SHOW_CDATA_SECTION on interface object
+FAIL NodeFilter interface: constant SHOW_CDATA_SECTION on interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+PASS NodeFilter interface: constant SHOW_ENTITY_REFERENCE on interface object
+FAIL NodeFilter interface: constant SHOW_ENTITY_REFERENCE on interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+PASS NodeFilter interface: constant SHOW_ENTITY on interface object
+FAIL NodeFilter interface: constant SHOW_ENTITY on interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+PASS NodeFilter interface: constant SHOW_PROCESSING_INSTRUCTION on interface object
+FAIL NodeFilter interface: constant SHOW_PROCESSING_INSTRUCTION on interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+PASS NodeFilter interface: constant SHOW_COMMENT on interface object
+FAIL NodeFilter interface: constant SHOW_COMMENT on interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+PASS NodeFilter interface: constant SHOW_DOCUMENT on interface object
+FAIL NodeFilter interface: constant SHOW_DOCUMENT on interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+PASS NodeFilter interface: constant SHOW_DOCUMENT_TYPE on interface object
+FAIL NodeFilter interface: constant SHOW_DOCUMENT_TYPE on interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+PASS NodeFilter interface: constant SHOW_DOCUMENT_FRAGMENT on interface object
+FAIL NodeFilter interface: constant SHOW_DOCUMENT_FRAGMENT on interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+PASS NodeFilter interface: constant SHOW_NOTATION on interface object
+FAIL NodeFilter interface: constant SHOW_NOTATION on interface prototype object assert_false: NodeFilter should not have a "prototype" property expected false got true
+FAIL NodeFilter interface: operation acceptNode(Node) assert_false: NodeFilter should not have a "prototype" property expected false got true
+FAIL DOMTokenList interface: existence and properties of interface object assert_equals: class string of DOMTokenList expected "[object Function]" but got "[object DOMTokenListConstructor]"
+PASS DOMTokenList interface object length
+PASS DOMTokenList interface: existence and properties of interface prototype object
+FAIL DOMTokenList interface: existence and properties of interface prototype object's "constructor" property assert_own_property: DOMTokenList.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL DOMTokenList interface: attribute length assert_true: The prototype object must have a property "length" expected true got false
+PASS DOMTokenList interface: operation item(unsigned long)
+PASS DOMTokenList interface: operation contains(DOMString)
+FAIL DOMTokenList interface: operation add(DOMString) assert_equals: property has wrong .length expected 0 but got 1
+FAIL DOMTokenList interface: operation remove(DOMString) assert_equals: property has wrong .length expected 0 but got 1
+PASS DOMTokenList interface: operation toggle(DOMString,boolean)
+FAIL DOMTokenList interface: stringifier assert_true: property is not enumerable expected true got false
+PASS DOMTokenList must be primary interface of document.body.classList
+PASS Stringification of document.body.classList
+FAIL DOMTokenList interface: document.body.classList must inherit property "length" with the proper type (0) assert_inherits: property "length" found on object expected in prototype chain
+PASS DOMTokenList interface: document.body.classList must inherit property "item" with the proper type (1)
+PASS DOMTokenList interface: calling item(unsigned long) on document.body.classList with too few arguments must throw TypeError
+PASS DOMTokenList interface: document.body.classList must inherit property "contains" with the proper type (2)
+PASS DOMTokenList interface: calling contains(DOMString) on document.body.classList with too few arguments must throw TypeError
+PASS DOMTokenList interface: document.body.classList must inherit property "add" with the proper type (3)
+PASS DOMTokenList interface: calling add(DOMString) on document.body.classList with too few arguments must throw TypeError
+PASS DOMTokenList interface: document.body.classList must inherit property "remove" with the proper type (4)
+PASS DOMTokenList interface: calling remove(DOMString) on document.body.classList with too few arguments must throw TypeError
+PASS DOMTokenList interface: document.body.classList must inherit property "toggle" with the proper type (5)
+PASS DOMTokenList interface: calling toggle(DOMString,boolean) on document.body.classList with too few arguments must throw TypeError
+FAIL DOMSettableTokenList interface: existence and properties of interface object assert_equals: class string of DOMSettableTokenList expected "[object Function]" but got "[object DOMSettableTokenListConstructor]"
+PASS DOMSettableTokenList interface object length
+PASS DOMSettableTokenList interface: existence and properties of interface prototype object
+FAIL DOMSettableTokenList interface: existence and properties of interface prototype object's "constructor" property assert_own_property: DOMSettableTokenList.prototype does not have own property "constructor" expected property "constructor" missing
+FAIL DOMSettableTokenList interface: attribute value assert_true: The prototype object must have a property "value" expected true got false
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdominterfaceshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/interfaces.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/interfaces.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/interfaces.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,504 @@
</span><ins>+<!doctype html>
+<meta charset=utf-8>
+<title>DOM IDL tests</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/resources/WebIDLParser.js></script>
+<script src=/resources/idlharness.js></script>
+
+<h1>DOM IDL tests</h1>
+<div id=log></div>
+
+<script type=text/plain>
+[Constructor(DOMString type, optional EventInit eventInitDict)/*,
+ Exposed=(Window,Worker)*/]
+interface Event {
+ readonly attribute DOMString type;
+ readonly attribute EventTarget? target;
+ readonly attribute EventTarget? currentTarget;
+
+ const unsigned short NONE = 0;
+ const unsigned short CAPTURING_PHASE = 1;
+ const unsigned short AT_TARGET = 2;
+ const unsigned short BUBBLING_PHASE = 3;
+ readonly attribute unsigned short eventPhase;
+
+ void stopPropagation();
+ void stopImmediatePropagation();
+
+ readonly attribute boolean bubbles;
+ readonly attribute boolean cancelable;
+ void preventDefault();
+ readonly attribute boolean defaultPrevented;
+
+ [Unforgeable] readonly attribute boolean isTrusted;
+ readonly attribute DOMTimeStamp timeStamp;
+
+ void initEvent(DOMString type, boolean bubbles, boolean cancelable);
+};
+
+dictionary EventInit {
+ boolean bubbles = false;
+ boolean cancelable = false;
+};
+
+[Constructor(DOMString type, optional CustomEventInit eventInitDict)/*,
+ Exposed=(Window,Worker)*/]
+interface CustomEvent : Event {
+ readonly attribute any detail;
+
+ void initCustomEvent(DOMString type, boolean bubbles, boolean cancelable, any detail);
+};
+
+dictionary CustomEventInit : EventInit {
+ any detail = null;
+};
+
+//[Exposed=(Window,Worker)]
+interface EventTarget {
+ void addEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
+ void removeEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
+ boolean dispatchEvent(Event event);
+};
+
+callback interface EventListener {
+ void handleEvent(Event event);
+};
+
+[NoInterfaceObject]
+interface NonElementParentNode {
+ Element? getElementById(DOMString elementId);
+};
+Document implements NonElementParentNode;
+DocumentFragment implements NonElementParentNode;
+
+[NoInterfaceObject]
+interface ParentNode {
+ [SameObject] readonly attribute HTMLCollection children;
+ readonly attribute Element? firstElementChild;
+ readonly attribute Element? lastElementChild;
+ readonly attribute unsigned long childElementCount;
+
+ [Unscopeable] void prepend((Node or DOMString)... nodes);
+ [Unscopeable] void append((Node or DOMString)... nodes);
+
+ [Unscopeable] Element? query(DOMString relativeSelectors);
+ [NewObject, Unscopeable] Elements queryAll(DOMString relativeSelectors);
+ Element? querySelector(DOMString selectors);
+ [NewObject] NodeList querySelectorAll(DOMString selectors);
+};
+Document implements ParentNode;
+DocumentFragment implements ParentNode;
+Element implements ParentNode;
+
+[NoInterfaceObject]
+interface NonDocumentTypeChildNode {
+ readonly attribute Element? previousElementSibling;
+ readonly attribute Element? nextElementSibling;
+};
+Element implements NonDocumentTypeChildNode;
+CharacterData implements NonDocumentTypeChildNode;
+
+[NoInterfaceObject]
+interface ChildNode {
+ [Unscopeable] void before((Node or DOMString)... nodes);
+ [Unscopeable] void after((Node or DOMString)... nodes);
+ [Unscopeable] void replaceWith((Node or DOMString)... nodes);
+ [Unscopeable] void remove();
+};
+DocumentType implements ChildNode;
+Element implements ChildNode;
+CharacterData implements ChildNode;
+
+// XXX unrecognized tokens "class", "extends"
+// https://www.w3.org/Bugs/Public/show_bug.cgi?id=20020
+// https://www.w3.org/Bugs/Public/show_bug.cgi?id=23225
+//class Elements extends Array {
+// Element? query(DOMString relativeSelectors);
+// Elements queryAll(DOMString relativeSelectors);
+//};
+
+interface NodeList {
+ getter Node? item(unsigned long index);
+ readonly attribute unsigned long length;
+// iterable<Node>;
+};
+
+interface HTMLCollection {
+ readonly attribute unsigned long length;
+ getter Element? item(unsigned long index);
+ getter Element? namedItem(DOMString name);
+};
+
+[Constructor(MutationCallback callback)]
+interface MutationObserver {
+ void observe(Node target, MutationObserverInit options);
+ void disconnect();
+ sequence<MutationRecord> takeRecords();
+};
+
+callback MutationCallback = void (sequence<MutationRecord> mutations, MutationObserver observer);
+
+dictionary MutationObserverInit {
+ boolean childList = false;
+ boolean attributes;
+ boolean characterData;
+ boolean subtree = false;
+ boolean attributeOldValue;
+ boolean characterDataOldValue;
+ sequence<DOMString> attributeFilter;
+};
+
+interface MutationRecord {
+ readonly attribute DOMString type;
+ readonly attribute Node target;
+ [SameObject] readonly attribute NodeList addedNodes;
+ [SameObject] readonly attribute NodeList removedNodes;
+ readonly attribute Node? previousSibling;
+ readonly attribute Node? nextSibling;
+ readonly attribute DOMString? attributeName;
+ readonly attribute DOMString? attributeNamespace;
+ readonly attribute DOMString? oldValue;
+};
+
+interface Node : EventTarget {
+ const unsigned short ELEMENT_NODE = 1;
+ const unsigned short ATTRIBUTE_NODE = 2; // historical
+ const unsigned short TEXT_NODE = 3;
+ const unsigned short CDATA_SECTION_NODE = 4; // historical
+ const unsigned short ENTITY_REFERENCE_NODE = 5; // historical
+ const unsigned short ENTITY_NODE = 6; // historical
+ const unsigned short PROCESSING_INSTRUCTION_NODE = 7;
+ const unsigned short COMMENT_NODE = 8;
+ const unsigned short DOCUMENT_NODE = 9;
+ const unsigned short DOCUMENT_TYPE_NODE = 10;
+ const unsigned short DOCUMENT_FRAGMENT_NODE = 11;
+ const unsigned short NOTATION_NODE = 12; // historical
+ readonly attribute unsigned short nodeType;
+ readonly attribute DOMString nodeName;
+
+ readonly attribute DOMString? baseURI;
+
+ readonly attribute Document? ownerDocument;
+ readonly attribute Node? parentNode;
+ readonly attribute Element? parentElement;
+ boolean hasChildNodes();
+ [SameObject] readonly attribute NodeList childNodes;
+ readonly attribute Node? firstChild;
+ readonly attribute Node? lastChild;
+ readonly attribute Node? previousSibling;
+ readonly attribute Node? nextSibling;
+
+ attribute DOMString? nodeValue;
+ attribute DOMString? textContent;
+ void normalize();
+
+ [NewObject] Node cloneNode(optional boolean deep = false);
+ boolean isEqualNode(Node? node);
+
+ const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01;
+ const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02;
+ const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x04;
+ const unsigned short DOCUMENT_POSITION_CONTAINS = 0x08;
+ const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 0x10;
+ const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
+ unsigned short compareDocumentPosition(Node other);
+ boolean contains(Node? other);
+
+ DOMString? lookupPrefix(DOMString? namespace);
+ DOMString? lookupNamespaceURI(DOMString? prefix);
+ boolean isDefaultNamespace(DOMString? namespace);
+
+ Node insertBefore(Node node, Node? child);
+ Node appendChild(Node node);
+ Node replaceChild(Node node, Node child);
+ Node removeChild(Node child);
+};
+
+[Constructor]
+interface Document : Node {
+ [SameObject] readonly attribute DOMImplementation implementation;
+ readonly attribute DOMString URL;
+ readonly attribute DOMString documentURI;
+ readonly attribute DOMString origin;
+ readonly attribute DOMString compatMode;
+ readonly attribute DOMString characterSet;
+ readonly attribute DOMString inputEncoding; // legacy alias of .characterSet
+ readonly attribute DOMString contentType;
+
+ readonly attribute DocumentType? doctype;
+ readonly attribute Element? documentElement;
+ HTMLCollection getElementsByTagName(DOMString localName);
+ HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
+ HTMLCollection getElementsByClassName(DOMString classNames);
+
+ [NewObject] Element createElement(DOMString localName);
+ [NewObject] Element createElementNS(DOMString? namespace, DOMString qualifiedName);
+ [NewObject] DocumentFragment createDocumentFragment();
+ [NewObject] Text createTextNode(DOMString data);
+ [NewObject] Comment createComment(DOMString data);
+ [NewObject] ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data);
+
+ [NewObject] Node importNode(Node node, optional boolean deep = false);
+ Node adoptNode(Node node);
+
+ [NewObject] Attr createAttribute(DOMString localName);
+ [NewObject] Attr createAttributeNS(DOMString? namespace, DOMString name);
+
+ [NewObject] Event createEvent(DOMString interface);
+
+ [NewObject] Range createRange();
+
+ // NodeFilter.SHOW_ALL = 0xFFFFFFFF
+ [NewObject] NodeIterator createNodeIterator(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
+ [NewObject] TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
+};
+
+interface XMLDocument : Document {};
+
+interface DOMImplementation {
+ [NewObject] DocumentType createDocumentType(DOMString qualifiedName, DOMString publicId, DOMString systemId);
+ [NewObject] XMLDocument createDocument(DOMString? namespace, [TreatNullAs=EmptyString] DOMString qualifiedName, optional DocumentType? doctype = null);
+ [NewObject] Document createHTMLDocument(optional DOMString title);
+
+ boolean hasFeature(); // useless; always returns true
+};
+
+[Constructor]
+interface DocumentFragment : Node {
+};
+
+interface DocumentType : Node {
+ readonly attribute DOMString name;
+ readonly attribute DOMString publicId;
+ readonly attribute DOMString systemId;
+};
+
+interface Element : Node {
+ readonly attribute DOMString? namespaceURI;
+ readonly attribute DOMString? prefix;
+ readonly attribute DOMString localName;
+ readonly attribute DOMString tagName;
+
+ attribute DOMString id;
+ attribute DOMString className;
+ [SameObject] readonly attribute DOMTokenList classList;
+
+ boolean hasAttributes();
+ [SameObject] readonly attribute NamedNodeMap attributes;
+ DOMString? getAttribute(DOMString name);
+ DOMString? getAttributeNS(DOMString? namespace, DOMString localName);
+ void setAttribute(DOMString name, DOMString value);
+ void setAttributeNS(DOMString? namespace, DOMString name, DOMString value);
+ void removeAttribute(DOMString name);
+ void removeAttributeNS(DOMString? namespace, DOMString localName);
+ boolean hasAttribute(DOMString name);
+ boolean hasAttributeNS(DOMString? namespace, DOMString localName);
+
+ Attr? getAttributeNode(DOMString name);
+ Attr? getAttributeNodeNS(DOMString? namespace, DOMString localName);
+ Attr? setAttributeNode(Attr attr);
+ Attr? setAttributeNodeNS(Attr attr);
+ Attr removeAttributeNode(Attr attr);
+
+ Element? closest(DOMString selectors);
+ boolean matches(DOMString selectors);
+
+ HTMLCollection getElementsByTagName(DOMString localName);
+ HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
+ HTMLCollection getElementsByClassName(DOMString classNames);
+};
+
+interface NamedNodeMap {
+ readonly attribute unsigned long length;
+ getter Attr? item(unsigned long index);
+ getter Attr? getNamedItem(DOMString name);
+ Attr? getNamedItemNS(DOMString? namespace, DOMString localName);
+ Attr? setNamedItem(Attr attr);
+ Attr? setNamedItemNS(Attr attr);
+ Attr removeNamedItem(DOMString name);
+ Attr removeNamedItemNS(DOMString? namespace, DOMString localName);
+};
+
+interface Attr {
+ readonly attribute DOMString? namespaceURI;
+ readonly attribute DOMString? prefix;
+ readonly attribute DOMString localName;
+ readonly attribute DOMString name;
+ attribute DOMString value;
+ attribute DOMString nodeValue; // legacy alias of .value
+ attribute DOMString textContent; // legacy alias of .value
+
+ readonly attribute Element? ownerElement;
+
+ readonly attribute boolean specified; // useless; always returns true
+};
+
+interface CharacterData : Node {
+ [TreatNullAs=EmptyString] attribute DOMString data;
+ readonly attribute unsigned long length;
+ DOMString substringData(unsigned long offset, unsigned long count);
+ void appendData(DOMString data);
+ void insertData(unsigned long offset, DOMString data);
+ void deleteData(unsigned long offset, unsigned long count);
+ void replaceData(unsigned long offset, unsigned long count, DOMString data);
+};
+
+[Constructor(optional DOMString data = "")]
+interface Text : CharacterData {
+ [NewObject] Text splitText(unsigned long offset);
+ readonly attribute DOMString wholeText;
+};
+
+interface ProcessingInstruction : CharacterData {
+ readonly attribute DOMString target;
+};
+
+[Constructor(optional DOMString data = "")]
+interface Comment : CharacterData {
+};
+
+[Constructor]
+interface Range {
+ readonly attribute Node startContainer;
+ readonly attribute unsigned long startOffset;
+ readonly attribute Node endContainer;
+ readonly attribute unsigned long endOffset;
+ readonly attribute boolean collapsed;
+ readonly attribute Node commonAncestorContainer;
+
+ void setStart(Node node, unsigned long offset);
+ void setEnd(Node node, unsigned long offset);
+ void setStartBefore(Node node);
+ void setStartAfter(Node node);
+ void setEndBefore(Node node);
+ void setEndAfter(Node node);
+ void collapse(optional boolean toStart = false);
+ void selectNode(Node node);
+ void selectNodeContents(Node node);
+
+ const unsigned short START_TO_START = 0;
+ const unsigned short START_TO_END = 1;
+ const unsigned short END_TO_END = 2;
+ const unsigned short END_TO_START = 3;
+ short compareBoundaryPoints(unsigned short how, Range sourceRange);
+
+ void deleteContents();
+ [NewObject] DocumentFragment extractContents();
+ [NewObject] DocumentFragment cloneContents();
+ void insertNode(Node node);
+ void surroundContents(Node newParent);
+
+ [NewObject] Range cloneRange();
+ void detach();
+
+ boolean isPointInRange(Node node, unsigned long offset);
+ short comparePoint(Node node, unsigned long offset);
+
+ boolean intersectsNode(Node node);
+
+ stringifier;
+};
+
+interface NodeIterator {
+ [SameObject] readonly attribute Node root;
+ readonly attribute Node referenceNode;
+ readonly attribute boolean pointerBeforeReferenceNode;
+ readonly attribute unsigned long whatToShow;
+ readonly attribute NodeFilter? filter;
+
+ Node? nextNode();
+ Node? previousNode();
+
+ void detach();
+};
+
+interface TreeWalker {
+ [SameObject] readonly attribute Node root;
+ readonly attribute unsigned long whatToShow;
+ readonly attribute NodeFilter? filter;
+ attribute Node currentNode;
+
+ Node? parentNode();
+ Node? firstChild();
+ Node? lastChild();
+ Node? previousSibling();
+ Node? nextSibling();
+ Node? previousNode();
+ Node? nextNode();
+};
+
+callback interface NodeFilter {
+ // Constants for acceptNode()
+ const unsigned short FILTER_ACCEPT = 1;
+ const unsigned short FILTER_REJECT = 2;
+ const unsigned short FILTER_SKIP = 3;
+
+ // Constants for whatToShow
+ const unsigned long SHOW_ALL = 0xFFFFFFFF;
+ const unsigned long SHOW_ELEMENT = 0x1;
+ const unsigned long SHOW_ATTRIBUTE = 0x2; // historical
+ const unsigned long SHOW_TEXT = 0x4;
+ const unsigned long SHOW_CDATA_SECTION = 0x8; // historical
+ const unsigned long SHOW_ENTITY_REFERENCE = 0x10; // historical
+ const unsigned long SHOW_ENTITY = 0x20; // historical
+ const unsigned long SHOW_PROCESSING_INSTRUCTION = 0x40;
+ const unsigned long SHOW_COMMENT = 0x80;
+ const unsigned long SHOW_DOCUMENT = 0x100;
+ const unsigned long SHOW_DOCUMENT_TYPE = 0x200;
+ const unsigned long SHOW_DOCUMENT_FRAGMENT = 0x400;
+ const unsigned long SHOW_NOTATION = 0x800; // historical
+
+ unsigned short acceptNode(Node node);
+};
+
+interface DOMTokenList {
+ readonly attribute unsigned long length;
+ getter DOMString? item(unsigned long index);
+ boolean contains(DOMString token);
+ void add(DOMString... tokens);
+ void remove(DOMString... tokens);
+ boolean toggle(DOMString token, optional boolean force);
+ stringifier;
+// iterable<DOMString>;
+};
+
+interface DOMSettableTokenList : DOMTokenList {
+ attribute DOMString value;
+};
+</script>
+<script>
+"use strict";
+var xmlDoc, detachedRange, element;
+var idlArray;
+setup(function() {
+ xmlDoc = document.implementation.createDocument(null, "", null);
+ detachedRange = document.createRange();
+ detachedRange.detach();
+ element = xmlDoc.createElementNS(null, "test");
+ element.setAttribute("bar", "baz");
+
+ idlArray = new IdlArray();
+ idlArray.add_idls(document.querySelector("script[type=text\\/plain]").textContent);
+ idlArray.add_objects({
+ Event: ['document.createEvent("Event")', 'new Event("foo")'],
+ CustomEvent: ['new CustomEvent("foo")'],
+ XMLDocument: ['xmlDoc'],
+ DOMImplementation: ['document.implementation'],
+ DocumentFragment: ['document.createDocumentFragment()'],
+ DocumentType: ['document.doctype'],
+ Element: ['element'],
+ Attr: ['document.querySelector("[id]").attributes[0]'],
+ Text: ['document.createTextNode("abc")'],
+ ProcessingInstruction: ['xmlDoc.createProcessingInstruction("abc", "def")'],
+ Comment: ['document.createComment("abc")'],
+ Range: ['document.createRange()', 'detachedRange'],
+ NodeIterator: ['document.createNodeIterator(document.body, NodeFilter.SHOW_ALL, null, false)'],
+ TreeWalker: ['document.createTreeWalker(document.body, NodeFilter.SHOW_ALL, null, false)'],
+ NodeList: ['document.querySelectorAll("script")'],
+ HTMLCollection: ['document.body.children'],
+ DOMTokenList: ['document.body.classList'],
+ });
+});
+idlArray.test();
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomlistsDOMTokenListstringifierexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/lists/DOMTokenList-stringifier-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/lists/DOMTokenList-stringifier-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/lists/DOMTokenList-stringifier-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+FAIL DOMTokenList stringifier assert_equals: String(classList) should compress whitespace expected "a b" but got " a a b"
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomlistsDOMTokenListstringifierhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/lists/DOMTokenList-stringifier.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/lists/DOMTokenList-stringifier.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/lists/DOMTokenList-stringifier.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>DOMTokenList stringifier</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-domtokenlist-stringifier">
+<link rel=author title=Ms2ger href="mailto:Ms2ger@gmail.com">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<span class=" a a b"></span>
+<script>
+test(function() {
+ var span = document.querySelector("span");
+ assert_equals(span.getAttribute("class"), " a a b",
+ "getAttribute should return the literal value");
+ assert_equals(span.className, " a a b",
+ "className should return the literal value");
+ assert_equals(String(span.classList), "a b",
+ "String(classList) should compress whitespace");
+ assert_equals(span.classList.toString(), "a b",
+ "classList.toString() should compress whitespace");
+ assert_class_string(span.classList, "DOMTokenList");
+});
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomlistsw3cimportlog"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/lists/w3c-import.log (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/lists/w3c-import.log         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/lists/w3c-import.log        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+The tests in this directory were imported from the W3C repository.
+Do NOT modify these tests directly in Webkit.
+Instead, create a pull request on the W3C CSS or WPT github:
+        https://github.com/w3c/csswg-test
+        https://github.com/w3c/web-platform-tests
+
+Then run the Tools/Scripts/import-w3c-tests in Webkit to reimport
+
+Do NOT modify or remove this file
+
+------------------------------------------------------------------------
+Properties requiring vendor prefixes:
+None
+Property values requiring vendor prefixes:
+None
+------------------------------------------------------------------------
+List of files:
+/LayoutTests/http/tests/w3c/dom/lists/DOMTokenList-stringifier.html
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCharacterDataappendDataexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-appendData-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-appendData-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-appendData-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+
+PASS Text.appendData('bar')
+PASS Text.appendData('')
+PASS Text.appendData(non-ASCII)
+PASS Text.appendData(null)
+PASS Text.appendData(undefined)
+PASS Text.appendData('', 'bar')
+FAIL Text.appendData() assert_throws: function "function () { node.appendData() }" did not throw
+PASS Comment.appendData('bar')
+PASS Comment.appendData('')
+PASS Comment.appendData(non-ASCII)
+PASS Comment.appendData(null)
+PASS Comment.appendData(undefined)
+PASS Comment.appendData('', 'bar')
+FAIL Comment.appendData() assert_throws: function "function () { node.appendData() }" did not throw
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCharacterDataappendDatahtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-appendData.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-appendData.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-appendData.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,70 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CharacterData.appendData</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-appenddata">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-data">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+function testNode(create, type) {
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.appendData("bar")
+ assert_equals(node.data, "testbar")
+ }, type + ".appendData('bar')")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.appendData("")
+ assert_equals(node.data, "test")
+ }, type + ".appendData('')")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+ node.appendData(", append more 資料,測試資料");
+ assert_equals(node.data, "test, append more 資料,測試資料");
+ assert_equals(node.length, 25);
+ }, type + ".appendData(non-ASCII)")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.appendData(null)
+ assert_equals(node.data, "testnull")
+ }, type + ".appendData(null)")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.appendData(undefined)
+ assert_equals(node.data, "testundefined")
+ }, type + ".appendData(undefined)")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.appendData("", "bar")
+ assert_equals(node.data, "test")
+ }, type + ".appendData('', 'bar')")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_throws(new TypeError(), function() { node.appendData() });
+ assert_equals(node.data, "test")
+ }, type + ".appendData()")
+}
+
+testNode(function() { return document.createTextNode("test") }, "Text")
+testNode(function() { return document.createComment("test") }, "Comment")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCharacterDatadataexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-data-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-data-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-data-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+
+PASS Text.data initial value
+PASS Text.data = null
+PASS Text.data = undefined
+PASS Text.data = 0
+PASS Text.data = ''
+PASS Text.data = '--'
+PASS Text.data = '資料'
+PASS Comment.data initial value
+PASS Comment.data = null
+PASS Comment.data = undefined
+PASS Comment.data = 0
+PASS Comment.data = ''
+PASS Comment.data = '--'
+PASS Comment.data = '資料'
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCharacterDatadatahtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-data.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-data.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-data.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,73 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CharacterData.data</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-data">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+function testNode(create, type) {
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+ assert_equals(node.length, 4)
+ }, type + ".data initial value")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.data = null;
+ assert_equals(node.data, "")
+ assert_equals(node.length, 0)
+ }, type + ".data = null")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.data = undefined;
+ assert_equals(node.data, "undefined")
+ assert_equals(node.length, 9)
+ }, type + ".data = undefined")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.data = 0;
+ assert_equals(node.data, "0")
+ assert_equals(node.length, 1)
+ }, type + ".data = 0")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.data = "";
+ assert_equals(node.data, "")
+ assert_equals(node.length, 0)
+ }, type + ".data = ''")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.data = "--";
+ assert_equals(node.data, "--")
+ assert_equals(node.length, 2)
+ }, type + ".data = '--'")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.data = "資料";
+ assert_equals(node.data, "資料")
+ assert_equals(node.length, 2)
+ }, type + ".data = '資料'")
+}
+
+testNode(function() { return document.createTextNode("test") }, "Text")
+testNode(function() { return document.createComment("test") }, "Comment")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCharacterDatadeleteDataexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-deleteData-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-deleteData-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-deleteData-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+
+PASS Text.deleteData() out of bounds
+PASS Text.deleteData() at the start
+PASS Text.deleteData() at the end
+PASS Text.deleteData() in the middle
+PASS Text.deleteData() with zero count
+FAIL Text.deleteData() with small negative count IndexSizeError: DOM Exception 1
+PASS Text.deleteData() with large negative count
+PASS Text.deleteData() with non-ascii data
+PASS Comment.deleteData() out of bounds
+PASS Comment.deleteData() at the start
+PASS Comment.deleteData() at the end
+PASS Comment.deleteData() in the middle
+PASS Comment.deleteData() with zero count
+FAIL Comment.deleteData() with small negative count IndexSizeError: DOM Exception 1
+PASS Comment.deleteData() with large negative count
+PASS Comment.deleteData() with non-ascii data
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCharacterDatadeleteDatahtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-deleteData.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-deleteData.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-deleteData.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,85 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CharacterData.deleteData</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-deletedata">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-data">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+function testNode(create, type) {
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_throws("INDEX_SIZE_ERR", function() { node.deleteData(5, 10) })
+ assert_throws("INDEX_SIZE_ERR", function() { node.deleteData(5, 0) })
+ assert_throws("INDEX_SIZE_ERR", function() { node.deleteData(-1, 10) })
+ assert_throws("INDEX_SIZE_ERR", function() { node.deleteData(-1, 0) })
+ }, type + ".deleteData() out of bounds")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.deleteData(0, 2)
+ assert_equals(node.data, "st")
+ }, type + ".deleteData() at the start")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.deleteData(2, 10)
+ assert_equals(node.data, "te")
+ }, type + ".deleteData() at the end")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.deleteData(1, 1)
+ assert_equals(node.data, "tst")
+ }, type + ".deleteData() in the middle")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.deleteData(2, 0)
+ assert_equals(node.data, "test")
+
+ node.deleteData(0, 0)
+ assert_equals(node.data, "test")
+ }, type + ".deleteData() with zero count")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.deleteData(2, -1)
+ assert_equals(node.data, "te")
+ }, type + ".deleteData() with small negative count")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.deleteData(1, -0x100000000 + 2)
+ assert_equals(node.data, "tt")
+ }, type + ".deleteData() with large negative count")
+
+ test(function() {
+ var node = create()
+ node.data = "This is the character data test, append more 資料,更多測試資料";
+
+ node.deleteData(40, 5);
+ assert_equals(node.data, "This is the character data test, append 資料,更多測試資料");
+ node.deleteData(45, 2);
+ assert_equals(node.data, "This is the character data test, append 資料,更多資料");
+ }, type + ".deleteData() with non-ascii data")
+}
+
+testNode(function() { return document.createTextNode("test") }, "Text")
+testNode(function() { return document.createComment("test") }, "Comment")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCharacterDatainsertDataexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-insertData-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-insertData-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-insertData-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+
+PASS Text.insertData() out of bounds
+PASS Text.insertData() negative out of bounds
+PASS Text.insertData() negative in bounds
+PASS Text.insertData('')
+PASS Text.insertData() at the start
+PASS Text.insertData() in the middle
+PASS Text.insertData() at the end
+PASS Text.insertData() with non-ascii data
+PASS Comment.insertData() out of bounds
+PASS Comment.insertData() negative out of bounds
+PASS Comment.insertData() negative in bounds
+PASS Comment.insertData('')
+PASS Comment.insertData() at the start
+PASS Comment.insertData() in the middle
+PASS Comment.insertData() at the end
+PASS Comment.insertData() with non-ascii data
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCharacterDatainsertDatahtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-insertData.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-insertData.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-insertData.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,80 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CharacterData.insertData</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-insertdata">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-data">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+function testNode(create, type) {
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_throws("INDEX_SIZE_ERR", function() { node.insertData(5, "x") })
+ assert_throws("INDEX_SIZE_ERR", function() { node.insertData(5, "") })
+ }, type + ".insertData() out of bounds")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_throws("INDEX_SIZE_ERR", function() { node.insertData(-1, "x") })
+ assert_throws("INDEX_SIZE_ERR", function() { node.insertData(-0x100000000 + 5, "x") })
+ }, type + ".insertData() negative out of bounds")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.insertData(-0x100000000 + 2, "X")
+ assert_equals(node.data, "teXst")
+ }, type + ".insertData() negative in bounds")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.insertData(0, "")
+ assert_equals(node.data, "test")
+ }, type + ".insertData('')")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.insertData(0, "X")
+ assert_equals(node.data, "Xtest")
+ }, type + ".insertData() at the start")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.insertData(2, "X")
+ assert_equals(node.data, "teXst")
+ }, type + ".insertData() in the middle")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.insertData(4, "ing")
+ assert_equals(node.data, "testing")
+ }, type + ".insertData() at the end")
+
+ test(function() {
+ var node = create()
+ node.data = "This is the character data, append more 資料,測試資料";
+
+ node.insertData(26, " test");
+ assert_equals(node.data, "This is the character data test, append more 資料,測試資料");
+ node.insertData(48, "更多");
+ assert_equals(node.data, "This is the character data test, append more 資料,更多測試資料");
+ }, type + ".insertData() with non-ascii data")
+}
+
+testNode(function() { return document.createTextNode("test") }, "Text")
+testNode(function() { return document.createComment("test") }, "Comment")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCharacterDataremoveexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-remove-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-remove-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-remove-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,2 @@
</span><ins>+
+Harness Error. harness_status.status = 1 , harness_status.message = Error: NotSupportedError: DOM Exception 9
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCharacterDataremovehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-remove.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-remove.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-remove.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,24 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CharacterData.remove</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-childnode-remove">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="ChildNode-remove.js"></script>
+<div id=log></div>
+<script>
+var text, text_parent,
+ comment, comment_parent,
+ pi, pi_parent;
+setup(function() {
+ text = document.createTextNode("text");
+ text_parent = document.createElement("div");
+ comment = document.createComment("comment");
+ comment_parent = document.createElement("div");
+ pi = document.createProcessingInstruction("foo", "bar");
+ pi_parent = document.createElement("div");
+});
+testRemove(text, text_parent, "text");
+testRemove(comment, comment_parent, "comment");
+testRemove(pi, pi_parent, "PI");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCharacterDatareplaceDataexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-replaceData-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-replaceData-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-replaceData-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+
+PASS Text.replaceData() with invalid offset
+PASS Text.replaceData() with clamped count
+FAIL Text.replaceData() with negative clamped count IndexSizeError: DOM Exception 1
+PASS Text.replaceData() before the start
+PASS Text.replaceData() at the start (shorter)
+PASS Text.replaceData() at the start (equal length)
+PASS Text.replaceData() at the start (longer)
+PASS Text.replaceData() in the middle (shorter)
+PASS Text.replaceData() in the middle (equal length)
+PASS Text.replaceData() in the middle (longer)
+PASS Text.replaceData() at the end (shorter)
+PASS Text.replaceData() at the end (same length)
+PASS Text.replaceData() at the end (longer)
+PASS Text.replaceData() the whole string
+PASS Text.replaceData() with the empty string
+PASS Text.replaceData() with non-ASCII data
+PASS Comment.replaceData() with invalid offset
+PASS Comment.replaceData() with clamped count
+FAIL Comment.replaceData() with negative clamped count IndexSizeError: DOM Exception 1
+PASS Comment.replaceData() before the start
+PASS Comment.replaceData() at the start (shorter)
+PASS Comment.replaceData() at the start (equal length)
+PASS Comment.replaceData() at the start (longer)
+PASS Comment.replaceData() in the middle (shorter)
+PASS Comment.replaceData() in the middle (equal length)
+PASS Comment.replaceData() in the middle (longer)
+PASS Comment.replaceData() at the end (shorter)
+PASS Comment.replaceData() at the end (same length)
+PASS Comment.replaceData() at the end (longer)
+PASS Comment.replaceData() the whole string
+PASS Comment.replaceData() with the empty string
+PASS Comment.replaceData() with non-ASCII data
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCharacterDatareplaceDatahtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-replaceData.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-replaceData.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-replaceData.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,153 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CharacterData.replaceData</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-replacedata">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-data">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+function testNode(create, type) {
+ // Step 2.
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_throws("IndexSizeError", function() { node.replaceData(5, 1, "x") })
+ assert_throws("IndexSizeError", function() { node.replaceData(5, 0, "") })
+ assert_throws("IndexSizeError", function() { node.replaceData(-1, 1, "x") })
+ assert_throws("IndexSizeError", function() { node.replaceData(-1, 0, "") })
+ assert_equals(node.data, "test")
+ }, type + ".replaceData() with invalid offset")
+
+ // Step 3.
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.replaceData(2, 10, "yo")
+ assert_equals(node.data, "teyo")
+ }, type + ".replaceData() with clamped count")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.replaceData(2, -1, "yo")
+ assert_equals(node.data, "teyo")
+ }, type + ".replaceData() with negative clamped count")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.replaceData(0, 0, "yo")
+ assert_equals(node.data, "yotest")
+ }, type + ".replaceData() before the start")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.replaceData(0, 2, "y")
+ assert_equals(node.data, "yst")
+ }, type + ".replaceData() at the start (shorter)")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.replaceData(0, 2, "yo")
+ assert_equals(node.data, "yost")
+ }, type + ".replaceData() at the start (equal length)")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.replaceData(0, 2, "yoa")
+ assert_equals(node.data, "yoast")
+ }, type + ".replaceData() at the start (longer)")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.replaceData(1, 2, "o")
+ assert_equals(node.data, "tot")
+ }, type + ".replaceData() in the middle (shorter)")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.replaceData(1, 2, "yo")
+ assert_equals(node.data, "tyot")
+ }, type + ".replaceData() in the middle (equal length)")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.replaceData(1, 1, "waddup")
+ assert_equals(node.data, "twaddupst")
+ node.replaceData(1, 1, "yup")
+ assert_equals(node.data, "tyupaddupst")
+ }, type + ".replaceData() in the middle (longer)")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.replaceData(1, 20, "yo")
+ assert_equals(node.data, "tyo")
+ }, type + ".replaceData() at the end (shorter)")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.replaceData(2, 20, "yo")
+ assert_equals(node.data, "teyo")
+ }, type + ".replaceData() at the end (same length)")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.replaceData(4, 20, "yo")
+ assert_equals(node.data, "testyo")
+ }, type + ".replaceData() at the end (longer)")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.replaceData(0, 4, "quux")
+ assert_equals(node.data, "quux")
+ }, type + ".replaceData() the whole string")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.replaceData(0, 4, "")
+ assert_equals(node.data, "")
+ }, type + ".replaceData() with the empty string")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.data = "This is the character data test, append 資料,更多資料";
+
+ node.replaceData(33, 6, "other");
+ assert_equals(node.data, "This is the character data test, other 資料,更多資料");
+ node.replaceData(44, 2, "文字");
+ assert_equals(node.data, "This is the character data test, other 資料,更多文字");
+ }, type + ".replaceData() with non-ASCII data")
+}
+
+testNode(function() { return document.createTextNode("test") }, "Text")
+testNode(function() { return document.createComment("test") }, "Comment")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCharacterDatasubstringDataexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-substringData-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-substringData-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-substringData-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+
+FAIL Text.substringData() with too few arguments assert_throws: function "function () { node.substringData() }" did not throw
+PASS Text.substringData() with too many arguments
+PASS Text.substringData() with invalid offset
+PASS Text.substringData() with in-bounds offset
+PASS Text.substringData() with zero count
+PASS Text.substringData() with very large offset
+PASS Text.substringData() with negative offset
+PASS Text.substringData() with string offset
+PASS Text.substringData() with in-bounds count
+PASS Text.substringData() with large count
+PASS Text.substringData() with very large count
+FAIL Text.substringData() with negative count IndexSizeError: DOM Exception 1
+PASS Text.substringData() with non-ASCII data
+FAIL Comment.substringData() with too few arguments assert_throws: function "function () { node.substringData() }" did not throw
+PASS Comment.substringData() with too many arguments
+PASS Comment.substringData() with invalid offset
+PASS Comment.substringData() with in-bounds offset
+PASS Comment.substringData() with zero count
+PASS Comment.substringData() with very large offset
+PASS Comment.substringData() with negative offset
+PASS Comment.substringData() with string offset
+PASS Comment.substringData() with in-bounds count
+PASS Comment.substringData() with large count
+PASS Comment.substringData() with very large count
+FAIL Comment.substringData() with negative count IndexSizeError: DOM Exception 1
+PASS Comment.substringData() with non-ASCII data
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCharacterDatasubstringDatahtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-substringData.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-substringData.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-substringData.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,128 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>CharacterData.substringData</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-substringdata">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-data">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+function testNode(create, type) {
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_throws(new TypeError(), function() { node.substringData() })
+ assert_throws(new TypeError(), function() { node.substringData(0) })
+ }, type + ".substringData() with too few arguments")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_equals(node.substringData(0, 1, "test"), "t")
+ }, type + ".substringData() with too many arguments")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_throws("IndexSizeError", function() { node.substringData(5, 0) })
+ assert_throws("IndexSizeError", function() { node.substringData(6, 0) })
+ assert_throws("IndexSizeError", function() { node.substringData(-1, 0) })
+ }, type + ".substringData() with invalid offset")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_equals(node.substringData(0, 1), "t")
+ assert_equals(node.substringData(1, 1), "e")
+ assert_equals(node.substringData(2, 1), "s")
+ assert_equals(node.substringData(3, 1), "t")
+ assert_equals(node.substringData(4, 1), "")
+ }, type + ".substringData() with in-bounds offset")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_equals(node.substringData(0, 0), "")
+ assert_equals(node.substringData(1, 0), "")
+ assert_equals(node.substringData(2, 0), "")
+ assert_equals(node.substringData(3, 0), "")
+ assert_equals(node.substringData(4, 0), "")
+ }, type + ".substringData() with zero count")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_equals(node.substringData(0x100000000 + 0, 1), "t")
+ assert_equals(node.substringData(0x100000000 + 1, 1), "e")
+ assert_equals(node.substringData(0x100000000 + 2, 1), "s")
+ assert_equals(node.substringData(0x100000000 + 3, 1), "t")
+ assert_equals(node.substringData(0x100000000 + 4, 1), "")
+ }, type + ".substringData() with very large offset")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_equals(node.substringData(-0x100000000 + 2, 1), "s")
+ }, type + ".substringData() with negative offset")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_equals(node.substringData("test", 3), "tes")
+ }, type + ".substringData() with string offset")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_equals(node.substringData(0, 1), "t")
+ assert_equals(node.substringData(0, 2), "te")
+ assert_equals(node.substringData(0, 3), "tes")
+ assert_equals(node.substringData(0, 4), "test")
+ }, type + ".substringData() with in-bounds count")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_equals(node.substringData(0, 5), "test")
+ assert_equals(node.substringData(2, 20), "st")
+ }, type + ".substringData() with large count")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_equals(node.substringData(2, 0x100000000 + 1), "s")
+ }, type + ".substringData() with very large count")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ assert_equals(node.substringData(0, -1), "test")
+ assert_equals(node.substringData(0, -0x100000000 + 2), "te")
+ }, type + ".substringData() with negative count")
+
+ test(function() {
+ var node = create()
+ assert_equals(node.data, "test")
+
+ node.data = "This is the character data test, other 資料,更多文字"
+
+ assert_equals(node.substringData(12, 4), "char")
+ assert_equals(node.substringData(39, 2), "資料")
+ }, type + ".substringData() with non-ASCII data")
+}
+
+testNode(function() { return document.createTextNode("test") }, "Text")
+testNode(function() { return document.createComment("test") }, "Comment")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesChildNodeafterexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-after-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-after-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-after-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,47 @@
</span><ins>+
+PASS Comment.after() without any argument.
+PASS Comment.after() with null as an argument.
+PASS Comment.after() with undefined as an argument.
+PASS Comment.after() with the empty string as an argument.
+PASS Comment.after() with only text as an argument.
+PASS Comment.after() with only one element as an argument.
+PASS Comment.after() with one element and text as arguments.
+PASS Comment.after() with context object itself as the argument.
+PASS Comment.after() with context object itself and node as the arguments, switching positions.
+PASS Comment.after() with all siblings of child as arguments.
+PASS Comment.before() with some siblings of child as arguments; no changes in tree; viable sibling is first child.
+PASS Comment.after() with some siblings of child as arguments; no changes in tree.
+PASS Comment.after() when pre-insert behaves like append.
+PASS Comment.after() with one sibling of child and text as arguments.
+PASS Comment.after() on a child without any parent.
+PASS Element.after() without any argument.
+PASS Element.after() with null as an argument.
+PASS Element.after() with undefined as an argument.
+PASS Element.after() with the empty string as an argument.
+PASS Element.after() with only text as an argument.
+PASS Element.after() with only one element as an argument.
+PASS Element.after() with one element and text as arguments.
+PASS Element.after() with context object itself as the argument.
+PASS Element.after() with context object itself and node as the arguments, switching positions.
+PASS Element.after() with all siblings of child as arguments.
+PASS Element.before() with some siblings of child as arguments; no changes in tree; viable sibling is first child.
+PASS Element.after() with some siblings of child as arguments; no changes in tree.
+PASS Element.after() when pre-insert behaves like append.
+PASS Element.after() with one sibling of child and text as arguments.
+PASS Element.after() on a child without any parent.
+PASS Text.after() without any argument.
+PASS Text.after() with null as an argument.
+PASS Text.after() with undefined as an argument.
+PASS Text.after() with the empty string as an argument.
+PASS Text.after() with only text as an argument.
+PASS Text.after() with only one element as an argument.
+PASS Text.after() with one element and text as arguments.
+PASS Text.after() with context object itself as the argument.
+PASS Text.after() with context object itself and node as the arguments, switching positions.
+PASS Text.after() with all siblings of child as arguments.
+PASS Text.before() with some siblings of child as arguments; no changes in tree; viable sibling is first child.
+PASS Text.after() with some siblings of child as arguments; no changes in tree.
+PASS Text.after() when pre-insert behaves like append.
+PASS Text.after() with one sibling of child and text as arguments.
+PASS Text.after() on a child without any parent.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesChildNodeafterhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-after.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-after.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-after.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,166 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>ChildNode.after</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-childnode-after">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+function test_after(child, nodeName, innerHTML) {
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.after();
+ assert_equals(parent.innerHTML, innerHTML);
+ }, nodeName + '.after() without any argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.after(null);
+ var expected = innerHTML + 'null';
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.after() with null as an argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.after(undefined);
+ var expected = innerHTML + 'undefined';
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.after() with undefined as an argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.after('');
+ assert_equals(parent.lastChild.data, '');
+ }, nodeName + '.after() with the empty string as an argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.after('text');
+ var expected = innerHTML + 'text';
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.after() with only text as an argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ var x = document.createElement('x');
+ parent.appendChild(child);
+ child.after(x);
+ var expected = innerHTML + '<x></x>';
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.after() with only one element as an argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ var x = document.createElement('x');
+ parent.appendChild(child);
+ child.after(x, 'text');
+ var expected = innerHTML + '<x></x>text';
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.after() with one element and text as arguments.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.after('text', child);
+ var expected = 'text' + innerHTML;
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.after() with context object itself as the argument.');
+
+ test(function() {
+ var parent = document.createElement('div')
+ var x = document.createElement('x');
+ parent.appendChild(x);
+ parent.appendChild(child);
+ child.after(child, x);
+ var expected = innerHTML + '<x></x>';
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.after() with context object itself and node as the arguments, switching positions.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ var z = document.createElement('z');
+ parent.appendChild(y);
+ parent.appendChild(child);
+ parent.appendChild(x);
+ child.after(x, y, z);
+ var expected = innerHTML + '<x></x><y></y><z></z>';
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.after() with all siblings of child as arguments.');
+
+ test(function() {
+ var parent = document.createElement('div')
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ var z = document.createElement('z');
+ parent.appendChild(child);
+ parent.appendChild(x);
+ parent.appendChild(y);
+ parent.appendChild(z);
+ child.after(x, y);
+ var expected = innerHTML + '<x></x><y></y><z></z>';
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.before() with some siblings of child as arguments; no changes in tree; viable sibling is first child.');
+
+ test(function() {
+ var parent = document.createElement('div')
+ var v = document.createElement('v');
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ var z = document.createElement('z');
+ parent.appendChild(child);
+ parent.appendChild(v);
+ parent.appendChild(x);
+ parent.appendChild(y);
+ parent.appendChild(z);
+ child.after(v, x);
+ var expected = innerHTML + '<v></v><x></x><y></y><z></z>';
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.after() with some siblings of child as arguments; no changes in tree.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ parent.appendChild(child);
+ parent.appendChild(x);
+ parent.appendChild(y);
+ child.after(y, x);
+ var expected = innerHTML + '<y></y><x></x>';
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.after() when pre-insert behaves like append.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ parent.appendChild(child);
+ parent.appendChild(x);
+ parent.appendChild(document.createTextNode('1'));
+ parent.appendChild(y);
+ child.after(x, '2');
+ var expected = innerHTML + '<x></x>21<y></y>';
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.after() with one sibling of child and text as arguments.');
+
+ test(function() {
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ x.after(y);
+ assert_equals(x.nextSibling, null);
+ }, nodeName + '.after() on a child without any parent.');
+}
+
+test_after(document.createComment('test'), 'Comment', '<!--test-->');
+test_after(document.createElement('test'), 'Element', '<test></test>');
+test_after(document.createTextNode('test'), 'Text', 'test');
+
+</script>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesChildNodebeforeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-before-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-before-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-before-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,47 @@
</span><ins>+
+PASS Comment.before() without any argument.
+PASS Comment.before() with null as an argument.
+PASS Comment.before() with undefined as an argument.
+PASS Comment.before() with the empty string as an argument.
+PASS Comment.before() with only text as an argument.
+PASS Comment.before() with only one element as an argument.
+PASS Comment.before() with one element and text as arguments.
+PASS Comment.before() with context object itself as the argument.
+PASS Comment.before() with context object itself and node as the arguments, switching positions.
+PASS Comment.before() with all siblings of child as arguments.
+PASS Comment.before() with some siblings of child as arguments; no changes in tree; viable sibling is first child.
+PASS Comment.before() with some siblings of child as arguments; no changes in tree.
+PASS Comment.before() when pre-insert behaves like prepend.
+PASS Comment.before() with one sibling of child and text as arguments.
+PASS Comment.before() on a child without any parent.
+PASS Element.before() without any argument.
+PASS Element.before() with null as an argument.
+PASS Element.before() with undefined as an argument.
+PASS Element.before() with the empty string as an argument.
+PASS Element.before() with only text as an argument.
+PASS Element.before() with only one element as an argument.
+PASS Element.before() with one element and text as arguments.
+PASS Element.before() with context object itself as the argument.
+PASS Element.before() with context object itself and node as the arguments, switching positions.
+PASS Element.before() with all siblings of child as arguments.
+PASS Element.before() with some siblings of child as arguments; no changes in tree; viable sibling is first child.
+PASS Element.before() with some siblings of child as arguments; no changes in tree.
+PASS Element.before() when pre-insert behaves like prepend.
+PASS Element.before() with one sibling of child and text as arguments.
+PASS Element.before() on a child without any parent.
+PASS Text.before() without any argument.
+PASS Text.before() with null as an argument.
+PASS Text.before() with undefined as an argument.
+PASS Text.before() with the empty string as an argument.
+PASS Text.before() with only text as an argument.
+PASS Text.before() with only one element as an argument.
+PASS Text.before() with one element and text as arguments.
+PASS Text.before() with context object itself as the argument.
+PASS Text.before() with context object itself and node as the arguments, switching positions.
+PASS Text.before() with all siblings of child as arguments.
+PASS Text.before() with some siblings of child as arguments; no changes in tree; viable sibling is first child.
+PASS Text.before() with some siblings of child as arguments; no changes in tree.
+PASS Text.before() when pre-insert behaves like prepend.
+PASS Text.before() with one sibling of child and text as arguments.
+PASS Text.before() on a child without any parent.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesChildNodebeforehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-before.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-before.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-before.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,166 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>ChildNode.before</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-childnode-before">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+function test_before(child, nodeName, innerHTML) {
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.before();
+ assert_equals(parent.innerHTML, innerHTML);
+ }, nodeName + '.before() without any argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.before(null);
+ var expected = 'null' + innerHTML;
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.before() with null as an argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.before(undefined);
+ var expected = 'undefined' + innerHTML;
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.before() with undefined as an argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.before('');
+ assert_equals(parent.firstChild.data, '');
+ }, nodeName + '.before() with the empty string as an argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.before('text');
+ var expected = 'text' + innerHTML;
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.before() with only text as an argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ var x = document.createElement('x');
+ parent.appendChild(child);
+ child.before(x);
+ var expected = '<x></x>' + innerHTML;
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.before() with only one element as an argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ var x = document.createElement('x');
+ parent.appendChild(child);
+ child.before(x, 'text');
+ var expected = '<x></x>text' + innerHTML;
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.before() with one element and text as arguments.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.before('text', child);
+ var expected = 'text' + innerHTML;
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.before() with context object itself as the argument.');
+
+ test(function() {
+ var parent = document.createElement('div')
+ var x = document.createElement('x');
+ parent.appendChild(child);
+ parent.appendChild(x);
+ child.before(x, child);
+ var expected = '<x></x>' + innerHTML;
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.before() with context object itself and node as the arguments, switching positions.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ var z = document.createElement('z');
+ parent.appendChild(y);
+ parent.appendChild(child);
+ parent.appendChild(x);
+ child.before(x, y, z);
+ var expected = '<x></x><y></y><z></z>' + innerHTML;
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.before() with all siblings of child as arguments.');
+
+ test(function() {
+ var parent = document.createElement('div')
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ var z = document.createElement('z');
+ parent.appendChild(x);
+ parent.appendChild(y);
+ parent.appendChild(z);
+ parent.appendChild(child);
+ child.before(y, z);
+ var expected = '<x></x><y></y><z></z>' + innerHTML;
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.before() with some siblings of child as arguments; no changes in tree; viable sibling is first child.');
+
+ test(function() {
+ var parent = document.createElement('div')
+ var v = document.createElement('v');
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ var z = document.createElement('z');
+ parent.appendChild(v);
+ parent.appendChild(x);
+ parent.appendChild(y);
+ parent.appendChild(z);
+ parent.appendChild(child);
+ child.before(y, z);
+ var expected = '<v></v><x></x><y></y><z></z>' + innerHTML;
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.before() with some siblings of child as arguments; no changes in tree.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ parent.appendChild(x);
+ parent.appendChild(y);
+ parent.appendChild(child);
+ child.before(y, x);
+ var expected = '<y></y><x></x>' + innerHTML;
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.before() when pre-insert behaves like prepend.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ var x = document.createElement('x');
+ parent.appendChild(x);
+ parent.appendChild(document.createTextNode('1'));
+ var y = document.createElement('y');
+ parent.appendChild(y);
+ parent.appendChild(child);
+ child.before(x, '2');
+ var expected = '1<y></y><x></x>2' + innerHTML;
+ assert_equals(parent.innerHTML, expected);
+ }, nodeName + '.before() with one sibling of child and text as arguments.');
+
+ test(function() {
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ x.before(y);
+ assert_equals(x.previousSibling, null);
+ }, nodeName + '.before() on a child without any parent.');
+}
+
+test_before(document.createComment('test'), 'Comment', '<!--test-->');
+test_before(document.createElement('test'), 'Element', '<test></test>');
+test_before(document.createTextNode('test'), 'Text', 'test');
+
+</script>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesChildNoderemovejs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-remove.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-remove.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-remove.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,30 @@
</span><ins>+function testRemove(node, parent, type) {
+ test(function() {
+ assert_true("remove" in node);
+ assert_equals(typeof node.remove, "function");
+ assert_equals(node.remove.length, 0);
+ }, type + " should support remove()");
+ test(function() {
+ assert_equals(node.parentNode, null, "Node should not have a parent");
+ assert_equals(node.remove(), undefined);
+ assert_equals(node.parentNode, null, "Removed new node should not have a parent");
+ }, "remove() should work if " + type + " doesn't have a parent");
+ test(function() {
+ assert_equals(node.parentNode, null, "Node should not have a parent");
+ parent.appendChild(node);
+ assert_equals(node.parentNode, parent, "Appended node should have a parent");
+ assert_equals(node.remove(), undefined);
+ assert_equals(node.parentNode, null, "Removed node should not have a parent");
+ assert_array_equals(parent.childNodes, [], "Parent should not have children");
+ }, "remove() should work if " + type + " does have a parent");
+ test(function() {
+ assert_equals(node.parentNode, null, "Node should not have a parent");
+ var before = parent.appendChild(document.createComment("before"));
+ parent.appendChild(node);
+ var after = parent.appendChild(document.createComment("after"));
+ assert_equals(node.parentNode, parent, "Appended node should have a parent");
+ assert_equals(node.remove(), undefined);
+ assert_equals(node.parentNode, null, "Removed node should not have a parent");
+ assert_array_equals(parent.childNodes, [before, after], "Parent should have two children left");
+ }, "remove() should work if " + type + " does have a parent and siblings");
+}
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesChildNodereplaceWithexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-replaceWith-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-replaceWith-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-replaceWith-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+
+FAIL Comment.replaceWith() without any argument. assert_equals: expected "" but got "<!--test-->"
+PASS Comment.replaceWith() with null as an argument.
+PASS Comment.replaceWith() with undefined as an argument.
+PASS Comment.replaceWith() with empty string as an argument.
+PASS Comment.replaceWith() with only text as an argument.
+PASS Comment.replaceWith() with only one element as an argument.
+PASS Comment.replaceWith() with sibling of child as arguments.
+PASS Comment.replaceWith() with one sibling of child and text as arguments.
+PASS Comment.replaceWith() with one sibling of child and child itself as arguments.
+PASS Comment.replaceWith() with one element and text as arguments.
+PASS Comment.replaceWith() on a parentless child with two elements as arguments.
+FAIL Element.replaceWith() without any argument. assert_equals: expected "" but got "<test></test>"
+PASS Element.replaceWith() with null as an argument.
+PASS Element.replaceWith() with undefined as an argument.
+PASS Element.replaceWith() with empty string as an argument.
+PASS Element.replaceWith() with only text as an argument.
+PASS Element.replaceWith() with only one element as an argument.
+PASS Element.replaceWith() with sibling of child as arguments.
+PASS Element.replaceWith() with one sibling of child and text as arguments.
+PASS Element.replaceWith() with one sibling of child and child itself as arguments.
+PASS Element.replaceWith() with one element and text as arguments.
+PASS Element.replaceWith() on a parentless child with two elements as arguments.
+FAIL Text.replaceWith() without any argument. assert_equals: expected "" but got "test"
+PASS Text.replaceWith() with null as an argument.
+PASS Text.replaceWith() with undefined as an argument.
+PASS Text.replaceWith() with empty string as an argument.
+PASS Text.replaceWith() with only text as an argument.
+PASS Text.replaceWith() with only one element as an argument.
+PASS Text.replaceWith() with sibling of child as arguments.
+PASS Text.replaceWith() with one sibling of child and text as arguments.
+PASS Text.replaceWith() with one sibling of child and child itself as arguments.
+PASS Text.replaceWith() with one element and text as arguments.
+PASS Text.replaceWith() on a parentless child with two elements as arguments.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesChildNodereplaceWithhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-replaceWith.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-replaceWith.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-replaceWith.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,110 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>ChildNode.replaceWith</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-childnode-replaceWith">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+function test_replaceWith(child, nodeName, innerHTML) {
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.replaceWith();
+ assert_equals(parent.innerHTML, '');
+ }, nodeName + '.replaceWith() without any argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.replaceWith(null);
+ assert_equals(parent.innerHTML, 'null');
+ }, nodeName + '.replaceWith() with null as an argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.replaceWith(undefined);
+ assert_equals(parent.innerHTML, 'undefined');
+ }, nodeName + '.replaceWith() with undefined as an argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.replaceWith('');
+ assert_equals(parent.innerHTML, '');
+ }, nodeName + '.replaceWith() with empty string as an argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ parent.appendChild(child);
+ child.replaceWith('text');
+ assert_equals(parent.innerHTML, 'text');
+ }, nodeName + '.replaceWith() with only text as an argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ var x = document.createElement('x');
+ parent.appendChild(child);
+ child.replaceWith(x);
+ assert_equals(parent.innerHTML, '<x></x>');
+ }, nodeName + '.replaceWith() with only one element as an argument.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ var z = document.createElement('z');
+ parent.appendChild(y);
+ parent.appendChild(child);
+ parent.appendChild(x);
+ child.replaceWith(x, y, z);
+ assert_equals(parent.innerHTML, '<x></x><y></y><z></z>');
+ }, nodeName + '.replaceWith() with sibling of child as arguments.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ var x = document.createElement('x');
+ parent.appendChild(child);
+ parent.appendChild(x);
+ parent.appendChild(document.createTextNode('1'));
+ child.replaceWith(x, '2');
+ assert_equals(parent.innerHTML, '<x></x>21');
+ }, nodeName + '.replaceWith() with one sibling of child and text as arguments.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ var x = document.createElement('x');
+ parent.appendChild(child);
+ parent.appendChild(x);
+ parent.appendChild(document.createTextNode('text'));
+ child.replaceWith(x, child);
+ assert_equals(parent.innerHTML, '<x></x>' + innerHTML + 'text');
+ }, nodeName + '.replaceWith() with one sibling of child and child itself as arguments.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ var x = document.createElement('x');
+ parent.appendChild(child);
+ child.replaceWith(x, 'text');
+ assert_equals(parent.innerHTML, '<x></x>text');
+ }, nodeName + '.replaceWith() with one element and text as arguments.');
+
+ test(function() {
+ var parent = document.createElement('div');
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ parent.appendChild(x);
+ parent.appendChild(y);
+ child.replaceWith(x, y);
+ assert_equals(parent.innerHTML, '<x></x><y></y>');
+ }, nodeName + '.replaceWith() on a parentless child with two elements as arguments.');
+}
+
+test_replaceWith(document.createComment('test'), 'Comment', '<!--test-->');
+test_replaceWith(document.createElement('test'), 'Element', '<test></test>');
+test_replaceWith(document.createTextNode('test'), 'Text', 'test');
+
+</script>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCommentTextconstructorjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Comment-Text-constructor.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Comment-Text-constructor.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Comment-Text-constructor.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,77 @@
</span><ins>+function test_constructor(ctor) {
+ test(function() {
+ var object = new window[ctor]();
+ assert_equals(Object.getPrototypeOf(object),
+ window[ctor].prototype, "Prototype chain: " + ctor);
+ assert_equals(Object.getPrototypeOf(Object.getPrototypeOf(object)),
+ CharacterData.prototype, "Prototype chain: CharacterData");
+ assert_equals(Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(object))),
+ Node.prototype, "Prototype chain: Node");
+ }, "new " + ctor + "(): prototype chain");
+
+ test(function() {
+ var object = new window[ctor]();
+ assert_true(object instanceof Node, "Should be a Node");
+ assert_true(object instanceof CharacterData, "Should be a CharacterData");
+ assert_true(object instanceof window[ctor], "Should be a " + ctor);
+ }, "new " + ctor + "(): instanceof");
+
+ test(function() {
+ var object = new window[ctor]();
+ assert_equals(object.data, "");
+ assert_equals(object.nodeValue, "");
+ assert_equals(object.ownerDocument, document);
+ }, "new " + ctor + "(): no arguments");
+
+ var arguments = [
+ [undefined, ""],
+ [null, "null"],
+ [42, "42"],
+ ["", ""],
+ ["-", "-"],
+ ["--", "--"],
+ ["-->", "-->"],
+ ["<!--", "<!--"],
+ ["\u0000", "\u0000"],
+ ["\u0000test", "\u0000test"],
+ ["&amp;", "&amp;"],
+ ];
+
+ arguments.forEach(function(a) {
+ var argument = a[0], expected = a[1];
+ test(function() {
+ var object = new window[ctor](argument);
+ assert_equals(object.data, expected);
+ assert_equals(object.nodeValue, expected);
+ assert_equals(object.ownerDocument, document);
+ }, "new " + ctor + "(): " + format_value(argument));
+ });
+
+ test(function() {
+ var called = [];
+ var object = new window[ctor]({
+ toString: function() {
+ called.push("first");
+ return "text";
+ }
+ }, {
+ toString: function() {
+ called.push("second");
+ assert_unreached("Should not look at the second argument.");
+ }
+ });
+ assert_equals(object.data, "text");
+ assert_equals(object.nodeValue, "text");
+ assert_equals(object.ownerDocument, document);
+ assert_array_equals(called, ["first"]);
+ }, "new " + ctor + "(): two arguments")
+
+ async_test("new " + ctor + "() should get the correct ownerDocument across globals").step(function() {
+ var iframe = document.createElement("iframe");
+ iframe.onload = this.step_func_done(function() {
+ var object = new iframe.contentWindow[ctor]();
+ assert_equals(object.ownerDocument, iframe.contentDocument);
+ });
+ document.body.appendChild(iframe);
+ });
+}
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCommentconstructorexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Comment-constructor-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Comment-constructor-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Comment-constructor-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+
+
+PASS new Comment(): prototype chain
+PASS new Comment(): instanceof
+PASS new Comment(): no arguments
+FAIL new Comment(): undefined assert_equals: expected "" but got "undefined"
+PASS new Comment(): null
+PASS new Comment(): 42
+PASS new Comment(): ""
+PASS new Comment(): "-"
+PASS new Comment(): "--"
+PASS new Comment(): "-->"
+PASS new Comment(): "<!--"
+PASS new Comment(): "\0"
+PASS new Comment(): "\0test"
+PASS new Comment(): "&amp;"
+PASS new Comment(): two arguments
+PASS new Comment() should get the correct ownerDocument across globals
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesCommentconstructorhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Comment-constructor.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Comment-constructor.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Comment-constructor.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+<!doctype html>
+<meta charset=utf-8>
+<title>Comment constructor</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-comment">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="Comment-Text-constructor.js"></script>
+<div id="log"></div>
+<script>
+test_constructor("Comment");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDOMImplementationcreateDocumentexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocument-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocument-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocument-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,261 @@
</span><ins>+
+PASS DOMImplementation.createDocument(namespace, qualifiedName, doctype)
+PASS createDocument test 0: null,undefined,null,null
+FAIL createDocument test 0: metadata for null,undefined,null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 1: null,"foo",null,null
+FAIL createDocument test 1: metadata for null,"foo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 2: null,"1foo",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 3: null,"f1oo",null,null
+FAIL createDocument test 3: metadata for null,"f1oo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 4: null,"foo1",null,null
+FAIL createDocument test 4: metadata for null,"foo1",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 5: null,"1foo",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 6: null,"̀foo",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 7: null,"}foo",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 8: null,"f}oo",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 9: null,"foo}",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 10: null,"\x{FFFF}foo",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 11: null,"f\x{FFFF}oo",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 12: null,"foo\x{FFFF}",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 13: null,"<foo",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 14: null,"foo>",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 15: null,"<foo>",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 16: null,"f<oo",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 17: null,"^^",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 18: null,":foo",null,"NAMESPACE_ERR"
+PASS createDocument test 19: null,"f:oo",null,"NAMESPACE_ERR"
+PASS createDocument test 20: null,"foo:",null,"NAMESPACE_ERR"
+PASS createDocument test 21: null,":",null,"NAMESPACE_ERR"
+PASS createDocument test 22: null,"xml",null,null
+FAIL createDocument test 22: metadata for null,"xml",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 23: null,"xmlns",null,"NAMESPACE_ERR"
+PASS createDocument test 24: null,"xmlfoo",null,null
+FAIL createDocument test 24: metadata for null,"xmlfoo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 25: null,"xml:foo",null,"NAMESPACE_ERR"
+PASS createDocument test 26: null,"xmlns:foo",null,"NAMESPACE_ERR"
+PASS createDocument test 27: null,"xmlfoo:bar",null,"NAMESPACE_ERR"
+PASS createDocument test 28: null,"null:xml",null,"NAMESPACE_ERR"
+PASS createDocument test 29: "",":foo",null,"NAMESPACE_ERR"
+PASS createDocument test 30: "","f:oo",null,"NAMESPACE_ERR"
+PASS createDocument test 31: "","foo:",null,"NAMESPACE_ERR"
+FAIL createDocument test 32: undefined,undefined,null,null assert_equals: expected (object) null but got (string) "undefined"
+FAIL createDocument test 32: metadata for undefined,undefined,null assert_equals: expected (string) "UTF-8" but got (object) null
+FAIL createDocument test 33: undefined,"foo",null,null assert_equals: expected (object) null but got (string) "undefined"
+FAIL createDocument test 33: metadata for undefined,"foo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 34: undefined,"1foo",null,"INVALID_CHARACTER_ERR"
+FAIL createDocument test 35: undefined,"f1oo",null,null assert_equals: expected (object) null but got (string) "undefined"
+FAIL createDocument test 35: metadata for undefined,"f1oo",null assert_equals: expected (string) "UTF-8" but got (object) null
+FAIL createDocument test 36: undefined,"foo1",null,null assert_equals: expected (object) null but got (string) "undefined"
+FAIL createDocument test 36: metadata for undefined,"foo1",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 37: undefined,":foo",null,"NAMESPACE_ERR"
+FAIL createDocument test 38: undefined,"f:oo",null,"NAMESPACE_ERR" assert_throws: function "function () { document.implementation.createDocument(name..." did not throw
+PASS createDocument test 39: undefined,"foo:",null,"NAMESPACE_ERR"
+FAIL createDocument test 40: undefined,"xml",null,null assert_equals: expected (object) null but got (string) "undefined"
+FAIL createDocument test 40: metadata for undefined,"xml",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 41: undefined,"xmlns",null,"NAMESPACE_ERR"
+FAIL createDocument test 42: undefined,"xmlfoo",null,null assert_equals: expected (object) null but got (string) "undefined"
+FAIL createDocument test 42: metadata for undefined,"xmlfoo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 43: undefined,"xml:foo",null,"NAMESPACE_ERR"
+PASS createDocument test 44: undefined,"xmlns:foo",null,"NAMESPACE_ERR"
+FAIL createDocument test 45: undefined,"xmlfoo:bar",null,"NAMESPACE_ERR" assert_throws: function "function () { document.implementation.createDocument(name..." did not throw
+PASS createDocument test 46: "http://example.com/","foo",null,null
+FAIL createDocument test 46: metadata for "http://example.com/","foo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 47: "http://example.com/","1foo",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 48: "http://example.com/","f1oo",null,null
+FAIL createDocument test 48: metadata for "http://example.com/","f1oo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 49: "http://example.com/","foo1",null,null
+FAIL createDocument test 49: metadata for "http://example.com/","foo1",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 50: "http://example.com/",":foo",null,"NAMESPACE_ERR"
+PASS createDocument test 51: "http://example.com/","f:oo",null,null
+FAIL createDocument test 51: metadata for "http://example.com/","f:oo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 52: "http://example.com/","foo:",null,"NAMESPACE_ERR"
+PASS createDocument test 53: "http://example.com/","_:_",null,null
+FAIL createDocument test 53: metadata for "http://example.com/","_:_",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 54: "http://example.com/","_:h0",null,null
+FAIL createDocument test 54: metadata for "http://example.com/","_:h0",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 55: "http://example.com/","_:test",null,null
+FAIL createDocument test 55: metadata for "http://example.com/","_:test",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 56: "http://example.com/","l_:_",null,null
+FAIL createDocument test 56: metadata for "http://example.com/","l_:_",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 57: "http://example.com/","ns:_0",null,null
+FAIL createDocument test 57: metadata for "http://example.com/","ns:_0",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 58: "http://example.com/","ns:a0",null,null
+FAIL createDocument test 58: metadata for "http://example.com/","ns:a0",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 59: "http://example.com/","ns0:test",null,null
+FAIL createDocument test 59: metadata for "http://example.com/","ns0:test",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 60: "http://example.com/","a.b:c",null,null
+FAIL createDocument test 60: metadata for "http://example.com/","a.b:c",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 61: "http://example.com/","a-b:c",null,null
+FAIL createDocument test 61: metadata for "http://example.com/","a-b:c",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 62: "http://example.com/","a-b:c",null,null
+FAIL createDocument test 62: metadata for "http://example.com/","a-b:c",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 63: "http://example.com/","xml",null,null
+FAIL createDocument test 63: metadata for "http://example.com/","xml",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 64: "http://example.com/","xmlns",null,"NAMESPACE_ERR"
+PASS createDocument test 65: "http://example.com/","XMLNS",null,null
+FAIL createDocument test 65: metadata for "http://example.com/","XMLNS",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 66: "http://example.com/","xmlfoo",null,null
+FAIL createDocument test 66: metadata for "http://example.com/","xmlfoo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 67: "http://example.com/","xml:foo",null,"NAMESPACE_ERR"
+PASS createDocument test 68: "http://example.com/","XML:foo",null,null
+FAIL createDocument test 68: metadata for "http://example.com/","XML:foo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 69: "http://example.com/","xmlns:foo",null,"NAMESPACE_ERR"
+PASS createDocument test 70: "http://example.com/","XMLNS:foo",null,null
+FAIL createDocument test 70: metadata for "http://example.com/","XMLNS:foo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 71: "http://example.com/","xmlfoo:bar",null,null
+FAIL createDocument test 71: metadata for "http://example.com/","xmlfoo:bar",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 72: "http://example.com/","prefix::local",null,"NAMESPACE_ERR"
+PASS createDocument test 73: "http://example.com/","namespaceURI:{",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 74: "http://example.com/","namespaceURI:}",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 75: "http://example.com/","namespaceURI:~",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 76: "http://example.com/","namespaceURI:'",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 77: "http://example.com/","namespaceURI:!",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 78: "http://example.com/","namespaceURI:@",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 79: "http://example.com/","namespaceURI:#",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 80: "http://example.com/","namespaceURI:$",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 81: "http://example.com/","namespaceURI:%",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 82: "http://example.com/","namespaceURI:^",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 83: "http://example.com/","namespaceURI:&",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 84: "http://example.com/","namespaceURI:*",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 85: "http://example.com/","namespaceURI:(",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 86: "http://example.com/","namespaceURI:)",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 87: "http://example.com/","namespaceURI:+",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 88: "http://example.com/","namespaceURI:=",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 89: "http://example.com/","namespaceURI:[",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 90: "http://example.com/","namespaceURI:]",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 91: "http://example.com/","namespaceURI:\\",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 92: "http://example.com/","namespaceURI:/",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 93: "http://example.com/","namespaceURI:;",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 94: "http://example.com/","namespaceURI:`",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 95: "http://example.com/","namespaceURI:<",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 96: "http://example.com/","namespaceURI:>",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 97: "http://example.com/","namespaceURI:,",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 98: "http://example.com/","namespaceURI:a ",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 99: "http://example.com/","namespaceURI:\"",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 100: "/","foo",null,null
+FAIL createDocument test 100: metadata for "/","foo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 101: "/","1foo",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 102: "/","f1oo",null,null
+FAIL createDocument test 102: metadata for "/","f1oo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 103: "/","foo1",null,null
+FAIL createDocument test 103: metadata for "/","foo1",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 104: "/",":foo",null,"NAMESPACE_ERR"
+PASS createDocument test 105: "/","f:oo",null,null
+FAIL createDocument test 105: metadata for "/","f:oo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 106: "/","foo:",null,"NAMESPACE_ERR"
+PASS createDocument test 107: "/","xml",null,null
+FAIL createDocument test 107: metadata for "/","xml",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 108: "/","xmlns",null,"NAMESPACE_ERR"
+PASS createDocument test 109: "/","xmlfoo",null,null
+FAIL createDocument test 109: metadata for "/","xmlfoo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 110: "/","xml:foo",null,"NAMESPACE_ERR"
+PASS createDocument test 111: "/","xmlns:foo",null,"NAMESPACE_ERR"
+PASS createDocument test 112: "/","xmlfoo:bar",null,null
+FAIL createDocument test 112: metadata for "/","xmlfoo:bar",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 113: "http://www.w3.org/XML/1998/namespace","foo",null,null
+FAIL createDocument test 113: metadata for "http://www.w3.org/XML/1998/namespace","foo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 114: "http://www.w3.org/XML/1998/namespace","1foo",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 115: "http://www.w3.org/XML/1998/namespace","f1oo",null,null
+FAIL createDocument test 115: metadata for "http://www.w3.org/XML/1998/namespace","f1oo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 116: "http://www.w3.org/XML/1998/namespace","foo1",null,null
+FAIL createDocument test 116: metadata for "http://www.w3.org/XML/1998/namespace","foo1",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 117: "http://www.w3.org/XML/1998/namespace",":foo",null,"NAMESPACE_ERR"
+PASS createDocument test 118: "http://www.w3.org/XML/1998/namespace","f:oo",null,null
+FAIL createDocument test 118: metadata for "http://www.w3.org/XML/1998/namespace","f:oo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 119: "http://www.w3.org/XML/1998/namespace","foo:",null,"NAMESPACE_ERR"
+PASS createDocument test 120: "http://www.w3.org/XML/1998/namespace","xml",null,null
+FAIL createDocument test 120: metadata for "http://www.w3.org/XML/1998/namespace","xml",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 121: "http://www.w3.org/XML/1998/namespace","xmlns",null,"NAMESPACE_ERR"
+PASS createDocument test 122: "http://www.w3.org/XML/1998/namespace","xmlfoo",null,null
+FAIL createDocument test 122: metadata for "http://www.w3.org/XML/1998/namespace","xmlfoo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 123: "http://www.w3.org/XML/1998/namespace","xml:foo",null,null
+FAIL createDocument test 123: metadata for "http://www.w3.org/XML/1998/namespace","xml:foo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 124: "http://www.w3.org/XML/1998/namespace","xmlns:foo",null,"NAMESPACE_ERR"
+PASS createDocument test 125: "http://www.w3.org/XML/1998/namespace","xmlfoo:bar",null,null
+FAIL createDocument test 125: metadata for "http://www.w3.org/XML/1998/namespace","xmlfoo:bar",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 126: "http://www.w3.org/XML/1998/namespaces","xml:foo",null,"NAMESPACE_ERR"
+PASS createDocument test 127: "http://www.w3.org/xml/1998/namespace","xml:foo",null,"NAMESPACE_ERR"
+PASS createDocument test 128: "http://www.w3.org/2000/xmlns/","foo",null,"NAMESPACE_ERR"
+PASS createDocument test 129: "http://www.w3.org/2000/xmlns/","1foo",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 130: "http://www.w3.org/2000/xmlns/","f1oo",null,"NAMESPACE_ERR"
+PASS createDocument test 131: "http://www.w3.org/2000/xmlns/","foo1",null,"NAMESPACE_ERR"
+PASS createDocument test 132: "http://www.w3.org/2000/xmlns/",":foo",null,"NAMESPACE_ERR"
+PASS createDocument test 133: "http://www.w3.org/2000/xmlns/","f:oo",null,"NAMESPACE_ERR"
+PASS createDocument test 134: "http://www.w3.org/2000/xmlns/","foo:",null,"NAMESPACE_ERR"
+PASS createDocument test 135: "http://www.w3.org/2000/xmlns/","xml",null,"NAMESPACE_ERR"
+PASS createDocument test 136: "http://www.w3.org/2000/xmlns/","xmlns",null,null
+FAIL createDocument test 136: metadata for "http://www.w3.org/2000/xmlns/","xmlns",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 137: "http://www.w3.org/2000/xmlns/","xmlfoo",null,"NAMESPACE_ERR"
+PASS createDocument test 138: "http://www.w3.org/2000/xmlns/","xml:foo",null,"NAMESPACE_ERR"
+PASS createDocument test 139: "http://www.w3.org/2000/xmlns/","xmlns:foo",null,null
+FAIL createDocument test 139: metadata for "http://www.w3.org/2000/xmlns/","xmlns:foo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 140: "http://www.w3.org/2000/xmlns/","xmlfoo:bar",null,"NAMESPACE_ERR"
+PASS createDocument test 141: "http://www.w3.org/2000/xmlns/","foo:xmlns",null,"NAMESPACE_ERR"
+PASS createDocument test 142: "foo:","foo",null,null
+FAIL createDocument test 142: metadata for "foo:","foo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 143: "foo:","1foo",null,"INVALID_CHARACTER_ERR"
+PASS createDocument test 144: "foo:","f1oo",null,null
+FAIL createDocument test 144: metadata for "foo:","f1oo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 145: "foo:","foo1",null,null
+FAIL createDocument test 145: metadata for "foo:","foo1",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 146: "foo:",":foo",null,"NAMESPACE_ERR"
+PASS createDocument test 147: "foo:","f:oo",null,null
+FAIL createDocument test 147: metadata for "foo:","f:oo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 148: "foo:","foo:",null,"NAMESPACE_ERR"
+PASS createDocument test 149: "foo:","xml",null,null
+FAIL createDocument test 149: metadata for "foo:","xml",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 150: "foo:","xmlns",null,"NAMESPACE_ERR"
+PASS createDocument test 151: "foo:","xmlfoo",null,null
+FAIL createDocument test 151: metadata for "foo:","xmlfoo",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 152: "foo:","xml:foo",null,"NAMESPACE_ERR"
+PASS createDocument test 153: "foo:","xmlns:foo",null,"NAMESPACE_ERR"
+PASS createDocument test 154: "foo:","xmlfoo:bar",null,null
+FAIL createDocument test 154: metadata for "foo:","xmlfoo:bar",null assert_equals: expected (string) "UTF-8" but got (object) null
+FAIL createDocument test 155: null,null,false,object "TypeError" assert_throws: function "function () { document.implementation.createDocument(name..." did not throw
+PASS createDocument test 156: null,null,null,null
+FAIL createDocument test 156: metadata for null,null,null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 157: null,"",null,null
+FAIL createDocument test 157: metadata for null,"",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 158: undefined,null,undefined,null
+FAIL createDocument test 158: metadata for undefined,null,undefined assert_equals: expected (string) "UTF-8" but got (object) null
+FAIL createDocument test 159: undefined,undefined,undefined,null assert_equals: expected (object) null but got (string) "undefined"
+FAIL createDocument test 159: metadata for undefined,undefined,undefined assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 160: undefined,"",undefined,null
+FAIL createDocument test 160: metadata for undefined,"",undefined assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 161: "http://example.com/",null,null,null
+FAIL createDocument test 161: metadata for "http://example.com/",null,null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 162: "http://example.com/","",null,null
+FAIL createDocument test 162: metadata for "http://example.com/","",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 163: "/",null,null,null
+FAIL createDocument test 163: metadata for "/",null,null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 164: "/","",null,null
+FAIL createDocument test 164: metadata for "/","",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 165: "http://www.w3.org/XML/1998/namespace",null,null,null
+FAIL createDocument test 165: metadata for "http://www.w3.org/XML/1998/namespace",null,null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 166: "http://www.w3.org/XML/1998/namespace","",null,null
+FAIL createDocument test 166: metadata for "http://www.w3.org/XML/1998/namespace","",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 167: "http://www.w3.org/2000/xmlns/",null,null,null
+FAIL createDocument test 167: metadata for "http://www.w3.org/2000/xmlns/",null,null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 168: "http://www.w3.org/2000/xmlns/","",null,null
+FAIL createDocument test 168: metadata for "http://www.w3.org/2000/xmlns/","",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 169: "foo:",null,null,null
+FAIL createDocument test 169: metadata for "foo:",null,null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 170: "foo:","",null,null
+FAIL createDocument test 170: metadata for "foo:","",null assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 171: null,null,DocumentType node,null
+FAIL createDocument test 171: metadata for null,null,DocumentType node assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 172: null,null,DocumentType node,null
+FAIL createDocument test 172: metadata for null,null,DocumentType node assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 173: null,null,DocumentType node,null
+FAIL createDocument test 173: metadata for null,null,DocumentType node assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 174: null,null,DocumentType node,null
+FAIL createDocument test 174: metadata for null,null,DocumentType node assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 175: null,null,DocumentType node,null
+FAIL createDocument test 175: metadata for null,null,DocumentType node assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 176: null,"foo",DocumentType node,null
+FAIL createDocument test 176: metadata for null,"foo",DocumentType node assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 177: "foo",null,DocumentType node,null
+FAIL createDocument test 177: metadata for "foo",null,DocumentType node assert_equals: expected (string) "UTF-8" but got (object) null
+PASS createDocument test 178: "foo","bar",DocumentType node,null
+FAIL createDocument test 178: metadata for "foo","bar",DocumentType node assert_equals: expected (string) "UTF-8" but got (object) null
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDOMImplementationcreateDocumenthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocument.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocument.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocument.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,116 @@
</span><ins>+<!doctype html>
+<meta charset=utf-8>
+<title>DOMImplementation.createDocument(namespace, qualifiedName, doctype)</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-domimplementation-createdocument">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-createelementns">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-nodetype">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-documentelement">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-doctype">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="Document-createElementNS.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ var tests = createElementNS_tests.map(function(t) {
+ return [t[0], t[1], null, t[2]]
+ }).concat([
+ /* Arrays with four elements:
+ * the namespace argument
+ * the qualifiedName argument
+ * the doctype argument
+ * the expected exception, or null if none
+ */
+ [null, null, false, new TypeError()],
+ [null, null, null, null],
+ [null, "", null, null],
+ [undefined, null, undefined, null],
+ [undefined, undefined, undefined, null],
+ [undefined, "", undefined, null],
+ ["http://example.com/", null, null, null],
+ ["http://example.com/", "", null, null],
+ ["/", null, null, null],
+ ["/", "", null, null],
+ ["http://www.w3.org/XML/1998/namespace", null, null, null],
+ ["http://www.w3.org/XML/1998/namespace", "", null, null],
+ ["http://www.w3.org/2000/xmlns/", null, null, null],
+ ["http://www.w3.org/2000/xmlns/", "", null, null],
+ ["foo:", null, null, null],
+ ["foo:", "", null, null],
+ [null, null, document.implementation.createDocumentType("foo", "", ""), null],
+ [null, null, document.doctype, null], // This causes a horrible WebKit bug (now fixed in trunk).
+ [null, null, function() {
+ var foo = document.implementation.createDocumentType("foo", "", "");
+ document.implementation.createDocument(null, null, foo);
+ return foo;
+ }(), null], // DOCTYPE already associated with a document.
+ [null, null, function() {
+ var bar = document.implementation.createDocument(null, null, null);
+ return bar.implementation.createDocumentType("bar", "", "");
+ }(), null], // DOCTYPE created by a different implementation.
+ [null, null, function() {
+ var bar = document.implementation.createDocument(null, null, null);
+ var magic = bar.implementation.createDocumentType("bar", "", "");
+ bar.implementation.createDocument(null, null, magic);
+ return magic;
+ }(), null], // DOCTYPE created by a different implementation and already associated with a document.
+ [null, "foo", document.implementation.createDocumentType("foo", "", ""), null],
+ ["foo", null, document.implementation.createDocumentType("foo", "", ""), null],
+ ["foo", "bar", document.implementation.createDocumentType("foo", "", ""), null],
+ ])
+
+ tests.forEach(function(t, i) {
+ var namespace = t[0], qualifiedName = t[1], doctype = t[2], expected = t[3]
+ test(function() {
+ if (expected != null) {
+ assert_throws(expected, function() { document.implementation.createDocument(namespace, qualifiedName, doctype) })
+ } else {
+ var doc = document.implementation.createDocument(namespace, qualifiedName, doctype)
+ assert_equals(doc.nodeType, Node.DOCUMENT_NODE)
+ assert_equals(doc.nodeType, doc.DOCUMENT_NODE)
+ assert_equals(doc.nodeName, "#document")
+ assert_equals(doc.nodeValue, null)
+ var omitRootElement = qualifiedName === null || String(qualifiedName) === ""
+ if (omitRootElement) {
+ assert_equals(doc.documentElement, null)
+ } else {
+ var element = doc.documentElement
+ assert_not_equals(element, null)
+ assert_equals(element.nodeType, Node.ELEMENT_NODE)
+ assert_equals(element.ownerDocument, doc)
+ var qualified = String(qualifiedName), names = []
+ if (qualified.indexOf(":") >= 0) {
+ names = qualified.split(":", 2)
+ } else {
+ names = [null, qualified]
+ }
+ assert_equals(element.prefix, names[0])
+ assert_equals(element.localName, names[1])
+ assert_equals(element.namespaceURI, namespace === undefined ? null : namespace)
+ }
+ if (!doctype) {
+ assert_equals(doc.doctype, null)
+ } else {
+ assert_equals(doc.doctype, doctype)
+ assert_equals(doc.doctype.ownerDocument, doc)
+ }
+ assert_equals(doc.childNodes.length, !omitRootElement + !!doctype)
+ }
+ }, "createDocument test " + i + ": " + t.map(function(el) { return format_value(el) }))
+
+ if (expected === null) {
+ test(function() {
+ var doc = document.implementation.createDocument(namespace, qualifiedName, doctype)
+ assert_equals(doc.compatMode, "CSS1Compat")
+ assert_equals(doc.characterSet, "UTF-8")
+ assert_equals(doc.inputEncoding, "UTF-8")
+ assert_equals(doc.contentType, "application/xml")
+ assert_equals(doc.URL, "about:blank")
+ assert_equals(doc.documentURI, "about:blank")
+ assert_equals(doc.createElement("DIV").localName, "DIV");
+ }, "createDocument test " + i + ": metadata for " +
+ [namespace, qualifiedName, doctype].map(function(el) { return format_value(el) }))
+ }
+ })
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDOMImplementationcreateDocumentTypeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocumentType-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocumentType-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocumentType-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,84 @@
</span><ins>+
+PASS DOMImplementation.createDocumentType(qualifiedName, publicId, systemId)
+PASS createDocumentType("", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("test:root", "1234", "") should work
+PASS createDocumentType("test:root", "1234", "test") should work
+PASS createDocumentType("test:root", "test", "") should work
+PASS createDocumentType("test:root", "test", "test") should work
+PASS createDocumentType("_:_", "", "") should work
+PASS createDocumentType("_:h0", "", "") should work
+PASS createDocumentType("_:test", "", "") should work
+PASS createDocumentType("_:_.", "", "") should work
+PASS createDocumentType("_:a-", "", "") should work
+PASS createDocumentType("l_:_", "", "") should work
+PASS createDocumentType("ns:_0", "", "") should work
+PASS createDocumentType("ns:a0", "", "") should work
+PASS createDocumentType("ns0:test", "", "") should work
+PASS createDocumentType("ns:EEE.", "", "") should work
+PASS createDocumentType("ns:_-", "", "") should work
+PASS createDocumentType("a.b:c", "", "") should work
+PASS createDocumentType("a-b:c.j", "", "") should work
+PASS createDocumentType("a-b:c", "", "") should work
+PASS createDocumentType("foo", "", "") should work
+PASS createDocumentType("1foo", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("foo1", "", "") should work
+PASS createDocumentType("f1oo", "", "") should work
+PASS createDocumentType("@foo", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("foo@", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("f@oo", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:{", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:}", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:~", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:'", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:!", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:@", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:#", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:$", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:%", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:^", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:&", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:*", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:(", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:)", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:+", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:=", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:[", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:]", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:\\", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:/", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:;", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:`", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:<", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:>", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:,", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:a ", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("edi:\"", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("{", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("}", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("'", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("~", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("`", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("@", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("#", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("$", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("%", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("^", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("&", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("*", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("(", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType(")", "", "") should throw INVALID_CHARACTER_ERR
+PASS createDocumentType("f:oo", "", "") should work
+PASS createDocumentType(":foo", "", "") should throw NAMESPACE_ERR
+PASS createDocumentType("foo:", "", "") should throw NAMESPACE_ERR
+PASS createDocumentType("prefix::local", "", "") should throw NAMESPACE_ERR
+PASS createDocumentType("foo", "foo", "") should work
+PASS createDocumentType("foo", "", "foo") should work
+PASS createDocumentType("foo", "f'oo", "") should work
+PASS createDocumentType("foo", "", "f'oo") should work
+PASS createDocumentType("foo", "f\"oo", "") should work
+PASS createDocumentType("foo", "", "f\"oo") should work
+PASS createDocumentType("foo", "f'o\"o", "") should work
+PASS createDocumentType("foo", "", "f'o\"o") should work
+PASS createDocumentType("foo", "foo>", "") should work
+PASS createDocumentType("foo", "", "foo>") should work
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDOMImplementationcreateDocumentTypehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocumentType.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocumentType.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocumentType.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,123 @@
</span><ins>+<!doctype html>
+<meta charset=utf-8>
+<title>DOMImplementation.createDocumentType(qualifiedName, publicId, systemId)</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-documenttype-name">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-documenttype-publicid">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-documenttype-systemid">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-ownerdocument">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ var tests = [
+ ["", "", "", "INVALID_CHARACTER_ERR"],
+ ["test:root", "1234", "", null],
+ ["test:root", "1234", "test", null],
+ ["test:root", "test", "", null],
+ ["test:root", "test", "test", null],
+ ["_:_", "", "", null],
+ ["_:h0", "", "", null],
+ ["_:test", "", "", null],
+ ["_:_.", "", "", null],
+ ["_:a-", "", "", null],
+ ["l_:_", "", "", null],
+ ["ns:_0", "", "", null],
+ ["ns:a0", "", "", null],
+ ["ns0:test", "", "", null],
+ ["ns:EEE.", "", "", null],
+ ["ns:_-", "", "", null],
+ ["a.b:c", "", "", null],
+ ["a-b:c.j", "", "", null],
+ ["a-b:c", "", "", null],
+ ["foo", "", "", null],
+ ["1foo", "", "", "INVALID_CHARACTER_ERR"],
+ ["foo1", "", "", null],
+ ["f1oo", "", "", null],
+ ["@foo", "", "", "INVALID_CHARACTER_ERR"],
+ ["foo@", "", "", "INVALID_CHARACTER_ERR"],
+ ["f@oo", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:{", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:}", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:~", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:'", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:!", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:@", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:#", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:$", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:%", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:^", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:&", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:*", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:(", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:)", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:+", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:=", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:[", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:]", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:\\", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:/", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:;", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:`", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:<", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:>", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:,", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:a ", "", "", "INVALID_CHARACTER_ERR"],
+ ["edi:\"", "", "", "INVALID_CHARACTER_ERR"],
+ ["{", "", "", "INVALID_CHARACTER_ERR"],
+ ["}", "", "", "INVALID_CHARACTER_ERR"],
+ ["'", "", "", "INVALID_CHARACTER_ERR"],
+ ["~", "", "", "INVALID_CHARACTER_ERR"],
+ ["`", "", "", "INVALID_CHARACTER_ERR"],
+ ["@", "", "", "INVALID_CHARACTER_ERR"],
+ ["#", "", "", "INVALID_CHARACTER_ERR"],
+ ["$", "", "", "INVALID_CHARACTER_ERR"],
+ ["%", "", "", "INVALID_CHARACTER_ERR"],
+ ["^", "", "", "INVALID_CHARACTER_ERR"],
+ ["&", "", "", "INVALID_CHARACTER_ERR"],
+ ["*", "", "", "INVALID_CHARACTER_ERR"],
+ ["(", "", "", "INVALID_CHARACTER_ERR"],
+ [")", "", "", "INVALID_CHARACTER_ERR"],
+ ["f:oo", "", "", null],
+ [":foo", "", "", "NAMESPACE_ERR"],
+ ["foo:", "", "", "NAMESPACE_ERR"],
+ ["prefix::local", "", "", "NAMESPACE_ERR"],
+ ["foo", "foo", "", null],
+ ["foo", "", "foo", null],
+ ["foo", "f'oo", "", null],
+ ["foo", "", "f'oo", null],
+ ["foo", 'f"oo', "", null],
+ ["foo", "", 'f"oo', null],
+ ["foo", "f'o\"o", "", null],
+ ["foo", "", "f'o\"o", null],
+ ["foo", "foo>", "", null],
+ ["foo", "", "foo>", null]
+ ]
+
+ var doc = document.implementation.createHTMLDocument("title");
+ var doTest = function(aDocument, aQualifiedName, aPublicId, aSystemId) {
+ var doctype = aDocument.implementation.createDocumentType(aQualifiedName, aPublicId, aSystemId);
+ assert_equals(doctype.name, aQualifiedName, "name")
+ assert_equals(doctype.nodeName, aQualifiedName, "nodeName")
+ assert_equals(doctype.publicId, aPublicId, "publicId")
+ assert_equals(doctype.systemId, aSystemId, "systemId")
+ assert_equals(doctype.ownerDocument, aDocument, "ownerDocument")
+ assert_equals(doctype.nodeValue, null, "nodeValue")
+ }
+ tests.forEach(function(t) {
+ var qualifiedName = t[0], publicId = t[1], systemId = t[2], expected = t[3]
+ test(function() {
+ if (expected) {
+ assert_throws(expected, function() {
+ document.implementation.createDocumentType(qualifiedName, publicId, systemId)
+ })
+ } else {
+ doTest(document, qualifiedName, publicId, systemId);
+ doTest(doc, qualifiedName, publicId, systemId);
+ }
+ }, "createDocumentType(" + format_value(qualifiedName) + ", " + format_value(publicId) + ", " + format_value(systemId) + ") should " +
+ (expected ? "throw " + expected : "work"));
+ });
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDOMImplementationcreateHTMLDocumentexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createHTMLDocument-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createHTMLDocument-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createHTMLDocument-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+
+FAIL createHTMLDocument test 0: "","","" assert_equals: expected (string) "" but got (object) null
+FAIL createHTMLDocument test 1: null,"null","null" assert_equals: expected (string) "" but got (object) null
+FAIL createHTMLDocument test 2: undefined,undefined,"" assert_equals: expected (string) "" but got (object) null
+FAIL createHTMLDocument test 3: "foo bar baz","foo bar baz","foo bar baz" assert_equals: expected (string) "" but got (object) null
+FAIL createHTMLDocument test 4: "foo\t\tbar baz","foo\t\tbar baz","foo bar baz" assert_equals: expected (string) "" but got (object) null
+FAIL createHTMLDocument test 5: "foo\n\nbar baz","foo\n\nbar baz","foo bar baz" assert_equals: expected (string) "" but got (object) null
+FAIL createHTMLDocument test 6: "foo\f\fbar baz","foo\f\fbar baz","foo bar baz" assert_equals: expected (string) "" but got (object) null
+FAIL createHTMLDocument test 7: "foo\r\rbar baz","foo\r\rbar baz","foo bar baz" assert_equals: expected (string) "" but got (object) null
+FAIL Missing title argument assert_equals: expected (string) "" but got (object) null
+FAIL createHTMLDocument(): metadata assert_equals: expected "about:blank" but got ""
+PASS createHTMLDocument(): URL parsing
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDOMImplementationcreateHTMLDocumenthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createHTMLDocument.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createHTMLDocument.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createHTMLDocument.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,84 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=windows-1252>
+<!-- Using windows-1252 to ensure that DOMImplementation.createHTMLDocument()
+ doesn't inherit utf-8 from the parent document. -->
+<title>DOMImplementation.createHTMLDocument</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-documenttype-name">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-documenttype-publicid">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-documenttype-systemid">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-documentelement">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="DOMImplementation-createHTMLDocument.js"></script>
+<div id="log"></div>
+<script>
+createHTMLDocuments(function(doc, expectedtitle, normalizedtitle) {
+ assert_true(doc instanceof Document, "Should be a Document")
+ assert_true(doc instanceof Node, "Should be a Node")
+ assert_equals(doc.childNodes.length, 2,
+ "Document should have two child nodes")
+
+ var doctype = doc.doctype
+ assert_true(doctype instanceof DocumentType,
+ "Doctype should be a DocumentType")
+ assert_true(doctype instanceof Node, "Doctype should be a Node")
+ assert_equals(doctype.name, "html")
+ assert_equals(doctype.publicId, "")
+ assert_equals(doctype.systemId, "")
+
+ var documentElement = doc.documentElement
+ assert_true(documentElement instanceof HTMLHtmlElement,
+ "Document element should be a HTMLHtmlElement")
+ assert_equals(documentElement.childNodes.length, 2,
+ "Document element should have two child nodes")
+ assert_equals(documentElement.localName, "html")
+ assert_equals(documentElement.tagName, "HTML")
+
+ var head = documentElement.firstChild
+ assert_true(head instanceof HTMLHeadElement,
+ "Head should be a HTMLHeadElement")
+ assert_equals(head.localName, "head")
+ assert_equals(head.tagName, "HEAD")
+
+ if (expectedtitle !== undefined) {
+ assert_equals(head.childNodes.length, 1)
+
+ var title = head.firstChild
+ assert_true(title instanceof HTMLTitleElement,
+ "Title should be a HTMLTitleElement")
+ assert_equals(title.localName, "title")
+ assert_equals(title.tagName, "TITLE")
+ assert_equals(title.childNodes.length, 1)
+ assert_equals(title.firstChild.data, expectedtitle)
+ } else {
+ assert_equals(head.childNodes.length, 0)
+ }
+
+ var body = documentElement.lastChild
+ assert_true(body instanceof HTMLBodyElement,
+ "Body should be a HTMLBodyElement")
+ assert_equals(body.localName, "body")
+ assert_equals(body.tagName, "BODY")
+ assert_equals(body.childNodes.length, 0)
+})
+
+test(function() {
+ var doc = document.implementation.createHTMLDocument("test");
+ assert_equals(doc.URL, "about:blank");
+ assert_equals(doc.documentURI, "about:blank");
+ assert_equals(doc.compatMode, "CSS1Compat");
+ assert_equals(doc.characterSet, "UTF-8");
+ assert_equals(doc.inputEncoding, "UTF-8");
+ assert_equals(doc.contentType, "text/html");
+ assert_equals(doc.createElement("DIV").localName, "div");
+}, "createHTMLDocument(): metadata")
+
+test(function() {
+ var doc = document.implementation.createHTMLDocument("test");
+ var a = doc.createElement("a");
+ // In UTF-8: 0xC3 0xA4
+ a.href = "http://example.org/?\u00E4";
+ assert_equals(a.href, "http://example.org/?%C3%A4");
+}, "createHTMLDocument(): URL parsing")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDOMImplementationcreateHTMLDocumentjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createHTMLDocument.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createHTMLDocument.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createHTMLDocument.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,25 @@
</span><ins>+function createHTMLDocuments(checkDoc) {
+ var tests = [
+ ["", "", ""],
+ [null, "null", "null"],
+ [undefined, undefined, ""],
+ ["foo bar baz", "foo bar baz", "foo bar baz"],
+ ["foo\t\tbar baz", "foo\t\tbar baz", "foo bar baz"],
+ ["foo\n\nbar baz", "foo\n\nbar baz", "foo bar baz"],
+ ["foo\f\fbar baz", "foo\f\fbar baz", "foo bar baz"],
+ ["foo\r\rbar baz", "foo\r\rbar baz", "foo bar baz"],
+ ]
+
+ tests.forEach(function(t, i) {
+ var title = t[0], expectedtitle = t[1], normalizedtitle = t[2]
+ test(function() {
+ var doc = document.implementation.createHTMLDocument(title);
+ checkDoc(doc, expectedtitle, normalizedtitle)
+ }, "createHTMLDocument test " + i + ": " + t.map(function(el) { return format_value(el) }))
+ })
+
+ test(function() {
+ var doc = document.implementation.createHTMLDocument();
+ checkDoc(doc, undefined, "")
+ }, "Missing title argument");
+}
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDOMImplementationhasFeatureexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-hasFeature-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-hasFeature-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-hasFeature-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,126 @@
</span><ins>+
+PASS DOMImplementation.hasFeature(feature, version)
+PASS hasFeature("Core", "1.0")
+PASS hasFeature("Core", "2.0")
+PASS hasFeature("Core", "3.0")
+PASS hasFeature("Core", "100.0")
+PASS hasFeature("XML", "1.0")
+PASS hasFeature("XML", "2.0")
+PASS hasFeature("XML", "3.0")
+PASS hasFeature("XML", "100.0")
+PASS hasFeature("Core", "1")
+PASS hasFeature("Core", "2")
+PASS hasFeature("Core", "3")
+PASS hasFeature("Core", "100")
+PASS hasFeature("XML", "1")
+PASS hasFeature("XML", "2")
+PASS hasFeature("XML", "3")
+PASS hasFeature("XML", "100")
+PASS hasFeature("Core", "1.1")
+PASS hasFeature("Core", "2.1")
+PASS hasFeature("Core", "3.1")
+PASS hasFeature("Core", "100.1")
+PASS hasFeature("XML", "1.1")
+PASS hasFeature("XML", "2.1")
+PASS hasFeature("XML", "3.1")
+PASS hasFeature("XML", "100.1")
+PASS hasFeature("Core", "")
+PASS hasFeature("XML", "")
+PASS hasFeature("core", "")
+PASS hasFeature("xml", "")
+PASS hasFeature("CoRe", "")
+PASS hasFeature("XmL", "")
+PASS hasFeature(" Core", "")
+PASS hasFeature(" XML", "")
+PASS hasFeature("Core ", "")
+PASS hasFeature("XML ", "")
+PASS hasFeature("Co re", "")
+PASS hasFeature("XM L", "")
+PASS hasFeature("aCore", "")
+PASS hasFeature("aXML", "")
+PASS hasFeature("Corea", "")
+PASS hasFeature("XMLa", "")
+PASS hasFeature("Coare", "")
+PASS hasFeature("XMaL", "")
+PASS hasFeature("Core", " ")
+PASS hasFeature("XML", " ")
+PASS hasFeature("Core", " 1.0")
+PASS hasFeature("Core", " 2.0")
+PASS hasFeature("Core", " 3.0")
+PASS hasFeature("Core", " 100.0")
+PASS hasFeature("XML", " 1.0")
+PASS hasFeature("XML", " 2.0")
+PASS hasFeature("XML", " 3.0")
+PASS hasFeature("XML", " 100.0")
+PASS hasFeature("Core", "1.0 ")
+PASS hasFeature("Core", "2.0 ")
+PASS hasFeature("Core", "3.0 ")
+PASS hasFeature("Core", "100.0 ")
+PASS hasFeature("XML", "1.0 ")
+PASS hasFeature("XML", "2.0 ")
+PASS hasFeature("XML", "3.0 ")
+PASS hasFeature("XML", "100.0 ")
+PASS hasFeature("Core", "1. 0")
+PASS hasFeature("Core", "2. 0")
+PASS hasFeature("Core", "3. 0")
+PASS hasFeature("Core", "100. 0")
+PASS hasFeature("XML", "1. 0")
+PASS hasFeature("XML", "2. 0")
+PASS hasFeature("XML", "3. 0")
+PASS hasFeature("XML", "100. 0")
+PASS hasFeature("Core", "a1.0")
+PASS hasFeature("Core", "a2.0")
+PASS hasFeature("Core", "a3.0")
+PASS hasFeature("Core", "a100.0")
+PASS hasFeature("XML", "a1.0")
+PASS hasFeature("XML", "a2.0")
+PASS hasFeature("XML", "a3.0")
+PASS hasFeature("XML", "a100.0")
+PASS hasFeature("Core", "1.0a")
+PASS hasFeature("Core", "2.0a")
+PASS hasFeature("Core", "3.0a")
+PASS hasFeature("Core", "100.0a")
+PASS hasFeature("XML", "1.0a")
+PASS hasFeature("XML", "2.0a")
+PASS hasFeature("XML", "3.0a")
+PASS hasFeature("XML", "100.0a")
+PASS hasFeature("Core", "1.a0")
+PASS hasFeature("Core", "2.a0")
+PASS hasFeature("Core", "3.a0")
+PASS hasFeature("Core", "100.a0")
+PASS hasFeature("XML", "1.a0")
+PASS hasFeature("XML", "2.a0")
+PASS hasFeature("XML", "3.a0")
+PASS hasFeature("XML", "100.a0")
+PASS hasFeature("Core", 1)
+PASS hasFeature("Core", 2)
+PASS hasFeature("Core", 3)
+PASS hasFeature("Core", 100)
+PASS hasFeature("XML", 1)
+PASS hasFeature("XML", 2)
+PASS hasFeature("XML", 3)
+PASS hasFeature("XML", 100)
+PASS hasFeature("Core", null)
+PASS hasFeature("XML", null)
+PASS hasFeature("core", null)
+PASS hasFeature("xml", null)
+PASS hasFeature("CoRe", null)
+PASS hasFeature("XmL", null)
+PASS hasFeature(" Core", null)
+PASS hasFeature(" XML", null)
+PASS hasFeature("Core ", null)
+PASS hasFeature("XML ", null)
+PASS hasFeature("Co re", null)
+PASS hasFeature("XM L", null)
+PASS hasFeature("aCore", null)
+PASS hasFeature("aXML", null)
+PASS hasFeature("Corea", null)
+PASS hasFeature("XMLa", null)
+PASS hasFeature("Coare", null)
+PASS hasFeature("XMaL", null)
+PASS hasFeature("Core", undefined)
+PASS hasFeature("XML", undefined)
+PASS hasFeature("This is filler text.", "")
+PASS hasFeature(null, "")
+PASS hasFeature(undefined, "")
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDOMImplementationhasFeaturehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-hasFeature.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-hasFeature.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-hasFeature.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,141 @@
</span><ins>+<!doctype html>
+<meta charset=utf-8>
+<title>DOMImplementation.hasFeature(feature, version)</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ var tests = [
+ ["Core", "1.0"],
+ ["Core", "2.0"],
+ ["Core", "3.0"],
+ ["Core", "100.0"],
+ ["XML", "1.0"],
+ ["XML", "2.0"],
+ ["XML", "3.0"],
+ ["XML", "100.0"],
+ ["Core", "1"],
+ ["Core", "2"],
+ ["Core", "3"],
+ ["Core", "100"],
+ ["XML", "1"],
+ ["XML", "2"],
+ ["XML", "3"],
+ ["XML", "100"],
+ ["Core", "1.1"],
+ ["Core", "2.1"],
+ ["Core", "3.1"],
+ ["Core", "100.1"],
+ ["XML", "1.1"],
+ ["XML", "2.1"],
+ ["XML", "3.1"],
+ ["XML", "100.1"],
+ ["Core", ""],
+ ["XML", ""],
+ ["core", ""],
+ ["xml", ""],
+ ["CoRe", ""],
+ ["XmL", ""],
+ [" Core", ""],
+ [" XML", ""],
+ ["Core ", ""],
+ ["XML ", ""],
+ ["Co re", ""],
+ ["XM L", ""],
+ ["aCore", ""],
+ ["aXML", ""],
+ ["Corea", ""],
+ ["XMLa", ""],
+ ["Coare", ""],
+ ["XMaL", ""],
+ ["Core", " "],
+ ["XML", " "],
+ ["Core", " 1.0"],
+ ["Core", " 2.0"],
+ ["Core", " 3.0"],
+ ["Core", " 100.0"],
+ ["XML", " 1.0"],
+ ["XML", " 2.0"],
+ ["XML", " 3.0"],
+ ["XML", " 100.0"],
+ ["Core", "1.0 "],
+ ["Core", "2.0 "],
+ ["Core", "3.0 "],
+ ["Core", "100.0 "],
+ ["XML", "1.0 "],
+ ["XML", "2.0 "],
+ ["XML", "3.0 "],
+ ["XML", "100.0 "],
+ ["Core", "1. 0"],
+ ["Core", "2. 0"],
+ ["Core", "3. 0"],
+ ["Core", "100. 0"],
+ ["XML", "1. 0"],
+ ["XML", "2. 0"],
+ ["XML", "3. 0"],
+ ["XML", "100. 0"],
+ ["Core", "a1.0"],
+ ["Core", "a2.0"],
+ ["Core", "a3.0"],
+ ["Core", "a100.0"],
+ ["XML", "a1.0"],
+ ["XML", "a2.0"],
+ ["XML", "a3.0"],
+ ["XML", "a100.0"],
+ ["Core", "1.0a"],
+ ["Core", "2.0a"],
+ ["Core", "3.0a"],
+ ["Core", "100.0a"],
+ ["XML", "1.0a"],
+ ["XML", "2.0a"],
+ ["XML", "3.0a"],
+ ["XML", "100.0a"],
+ ["Core", "1.a0"],
+ ["Core", "2.a0"],
+ ["Core", "3.a0"],
+ ["Core", "100.a0"],
+ ["XML", "1.a0"],
+ ["XML", "2.a0"],
+ ["XML", "3.a0"],
+ ["XML", "100.a0"],
+ ["Core", 1],
+ ["Core", 2],
+ ["Core", 3],
+ ["Core", 100],
+ ["XML", 1],
+ ["XML", 2],
+ ["XML", 3],
+ ["XML", 100],
+ ["Core", null],
+ ["XML", null],
+ ["core", null],
+ ["xml", null],
+ ["CoRe", null],
+ ["XmL", null],
+ [" Core", null],
+ [" XML", null],
+ ["Core ", null],
+ ["XML ", null],
+ ["Co re", null],
+ ["XM L", null],
+ ["aCore", null],
+ ["aXML", null],
+ ["Corea", null],
+ ["XMLa", null],
+ ["Coare", null],
+ ["XMaL", null],
+ ["Core", undefined],
+ ["XML", undefined],
+ ["This is filler text.", ""],
+ [null, ""],
+ [undefined, ""],
+ ];
+ tests.forEach(function(data) {
+ test(function() {
+ assert_equals(document.implementation.hasFeature(data[0], data[1]), true)
+ }, "hasFeature(" + format_value(data[0]) + ", " + format_value(data[1]) + ")")
+ })
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentElementgetElementsByTagNamejs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-Element-getElementsByTagName.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-Element-getElementsByTagName.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-Element-getElementsByTagName.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,166 @@
</span><ins>+function test_getElementsByTagName(context, element) {
+ // TODO: getElementsByTagName("*")
+ test(function() {
+ assert_false(context.getElementsByTagName("html") instanceof NodeList,
+ "Should not return a NodeList")
+ assert_true(context.getElementsByTagName("html") instanceof HTMLCollection,
+ "Should return an HTMLCollection")
+ }, "Interfaces")
+
+ test(function() {
+ var firstCollection = context.getElementsByTagName("html"),
+ secondCollection = context.getElementsByTagName("html")
+ assert_true(firstCollection !== secondCollection ||
+ firstCollection === secondCollection)
+ }, "Caching is allowed")
+
+ test(function() {
+ var l = context.getElementsByTagName("nosuchtag")
+ l[5] = "foopy"
+ assert_equals(l[5], undefined)
+ assert_equals(l.item(5), null)
+ }, "Shouldn't be able to set unsigned properties on a HTMLCollection (non-strict mode)")
+
+ test(function() {
+ var l = context.getElementsByTagName("nosuchtag")
+ assert_throws(new TypeError(), function() {
+ "use strict";
+ l[5] = "foopy"
+ })
+ assert_equals(l[5], undefined)
+ assert_equals(l.item(5), null)
+ }, "Shouldn't be able to set unsigned properties on a HTMLCollection (strict mode)")
+
+ test(function() {
+ var l = context.getElementsByTagName("nosuchtag")
+ var fn = l.item;
+ assert_equals(fn, HTMLCollection.prototype.item);
+ l.item = "pass"
+ assert_equals(l.item, "pass")
+ assert_equals(HTMLCollection.prototype.item, fn);
+ }, "Should be able to set expando shadowing a proto prop (item)")
+
+ test(function() {
+ var l = context.getElementsByTagName("nosuchtag")
+ var fn = l.namedItem;
+ assert_equals(fn, HTMLCollection.prototype.namedItem);
+ l.namedItem = "pass"
+ assert_equals(l.namedItem, "pass")
+ assert_equals(HTMLCollection.prototype.namedItem, fn);
+ }, "Should be able to set expando shadowing a proto prop (namedItem)")
+
+ test(function() {
+ var t = element.appendChild(document.createElement("pre"));
+ t.id = "x";
+ this.add_cleanup(function() {element.removeChild(t)});
+
+ var list = context.getElementsByTagName('pre');
+ var pre = list[0];
+ assert_equals(pre.id, "x");
+ assert_equals(list['x'], pre);
+
+ assert_true('x' in list, "'x' in list");
+ assert_true(list.hasOwnProperty('x'), "list.hasOwnProperty('x')");
+
+ assert_array_equals(Object.getOwnPropertyNames(list).sort(), ["0", "x"]);
+
+ var desc = Object.getOwnPropertyDescriptor(list, '0');
+ assert_equals(typeof desc, "object", "descriptor should be an object");
+ assert_true(desc.enumerable, "desc.enumerable");
+ assert_true(desc.configurable, "desc.configurable");
+
+ desc = Object.getOwnPropertyDescriptor(list, 'x');
+ assert_equals(typeof desc, "object", "descriptor should be an object");
+ assert_false(desc.enumerable, "desc.enumerable");
+ assert_true(desc.configurable, "desc.configurable");
+ }, "hasOwnProperty, getOwnPropertyDescriptor, getOwnPropertyNames")
+
+ test(function() {
+ assert_equals(document.createElementNS("http://www.w3.org/1999/xhtml", "i").localName, "i") // Sanity
+ var t = element.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "I"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_equals(t.localName, "I")
+ assert_equals(t.tagName, "I")
+ assert_equals(context.getElementsByTagName("I").length, 0)
+ assert_equals(context.getElementsByTagName("i").length, 0)
+ }, "HTML element with uppercase tagName never matches in HTML Documents")
+
+ test(function() {
+ var t = element.appendChild(document.createElementNS("test", "st"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_array_equals(context.getElementsByTagName("st"), [t])
+ assert_array_equals(context.getElementsByTagName("ST"), [])
+ }, "Element in non-HTML namespace, no prefix, lowercase name")
+
+ test(function() {
+ var t = element.appendChild(document.createElementNS("test", "ST"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_array_equals(context.getElementsByTagName("ST"), [t])
+ assert_array_equals(context.getElementsByTagName("st"), [])
+ }, "Element in non-HTML namespace, no prefix, uppercase name")
+
+ test(function() {
+ var t = element.appendChild(document.createElementNS("test", "te:st"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_array_equals(context.getElementsByTagName("st"), [t])
+ assert_array_equals(context.getElementsByTagName("ST"), [])
+ }, "Element in non-HTML namespace, prefix, lowercase name")
+
+ test(function() {
+ var t = element.appendChild(document.createElementNS("test", "te:ST"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_array_equals(context.getElementsByTagName("ST"), [t])
+ assert_array_equals(context.getElementsByTagName("st"), [])
+ assert_array_equals(context.getElementsByTagName("te:st"), [])
+ assert_array_equals(context.getElementsByTagName("te:ST"), [])
+ }, "Element in non-HTML namespace, prefix, uppercase name")
+
+ test(function() {
+ var t = element.appendChild(document.createElement("aÇ"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_equals(t.localName, "aÇ")
+ assert_array_equals(context.getElementsByTagName("AÇ"), [t], "All uppercase input")
+ assert_array_equals(context.getElementsByTagName("aÇ"), [t], "Ascii lowercase input")
+ assert_array_equals(context.getElementsByTagName("aç"), [], "All lowercase input")
+ }, "Element in HTML namespace, no prefix, non-ascii characters in name")
+
+ test(function() {
+ var t = element.appendChild(document.createElementNS("test", "AÇ"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_array_equals(context.getElementsByTagName("AÇ"), [t])
+ assert_array_equals(context.getElementsByTagName("aÇ"), [])
+ assert_array_equals(context.getElementsByTagName("aç"), [])
+ }, "Element in non-HTML namespace, non-ascii characters in name")
+
+ test(function() {
+ var t = element.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "test:aÇ"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_array_equals(context.getElementsByTagName("AÇ"), [t], "All uppercase input")
+ assert_array_equals(context.getElementsByTagName("aÇ"), [t], "Ascii lowercase input")
+ assert_array_equals(context.getElementsByTagName("aç"), [], "All lowercase input")
+ }, "Element in HTML namespace, prefix, non-ascii characters in name")
+
+ test(function() {
+ var t = element.appendChild(document.createElementNS("test", "test:AÇ"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_array_equals(context.getElementsByTagName("AÇ"), [t], "All uppercase input")
+ assert_array_equals(context.getElementsByTagName("aÇ"), [], "Ascii lowercase input")
+ assert_array_equals(context.getElementsByTagName("aç"), [], "All lowercase input")
+ }, "Element in non-HTML namespace, prefix, non-ascii characters in name")
+
+ test(function() {
+ var actual = context.getElementsByTagName("*");
+ var expected = [];
+ var get_elements = function(node) {
+ for (var i = 0; i < node.childNodes.length; i++) {
+ var child = node.childNodes[i];
+ if (child.nodeType === child.ELEMENT_NODE) {
+ expected.push(child);
+ get_elements(child);
+ }
+ }
+ }
+ get_elements(context);
+ assert_array_equals(actual, expected);
+ }, "getElementsByTagName('*')")
+}
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentElementgetElementsByTagNameNSjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-Element-getElementsByTagNameNS.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-Element-getElementsByTagNameNS.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-Element-getElementsByTagNameNS.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,128 @@
</span><ins>+function test_getElementsByTagNameNS(context, element) {
+ test(function() {
+ assert_false(context.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "html") instanceof NodeList, "NodeList")
+ assert_true(context.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "html") instanceof HTMLCollection, "HTMLCollection")
+ var firstCollection = context.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "html"),
+ secondCollection = context.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "html")
+ assert_true(firstCollection !== secondCollection || firstCollection === secondCollection,
+ "Caching is allowed.")
+ })
+
+ test(function() {
+ var t = element.appendChild(document.createElementNS("test", "body"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ var actual = context.getElementsByTagNameNS("*", "body");
+ var expected = [];
+ var get_elements = function(node) {
+ for (var i = 0; i < node.childNodes.length; i++) {
+ var child = node.childNodes[i];
+ if (child.nodeType === child.ELEMENT_NODE) {
+ if (child.localName == "body") {
+ expected.push(child);
+ }
+ get_elements(child);
+ }
+ }
+ }
+ get_elements(context);
+ assert_array_equals(actual, expected);
+ }, "getElementsByTagNameNS('*', 'body')")
+
+ test(function() {
+ assert_array_equals(context.getElementsByTagNameNS("", "*"), []);
+ var t = element.appendChild(document.createElementNS("", "body"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_array_equals(context.getElementsByTagNameNS("", "*"), [t]);
+ }, "Empty string namespace")
+
+ test(function() {
+ var t = element.appendChild(document.createElementNS("test", "body"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_array_equals(context.getElementsByTagNameNS("test", "body"), [t]);
+ }, "body element in test namespace, no prefix")
+
+ test(function() {
+ var t = element.appendChild(document.createElementNS("test", "test:body"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_array_equals(context.getElementsByTagNameNS("test", "body"), [t]);
+ }, "body element in test namespace, prefix")
+
+ test(function() {
+ var t = element.appendChild(document.createElementNS("test", "BODY"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_array_equals(context.getElementsByTagNameNS("test", "BODY"), [t]);
+ assert_array_equals(context.getElementsByTagNameNS("test", "body"), []);
+ }, "BODY element in test namespace, no prefix")
+
+ test(function() {
+ var t = element.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "abc"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_array_equals(context.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "abc"), [t]);
+ assert_array_equals(context.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "ABC"), []);
+ assert_array_equals(context.getElementsByTagNameNS("test", "ABC"), []);
+ }, "abc element in html namespace")
+
+ test(function() {
+ var t = element.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "ABC"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_array_equals(context.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "abc"), []);
+ assert_array_equals(context.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "ABC"), [t]);
+ }, "ABC element in html namespace")
+
+ test(function() {
+ var t = element.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "AÇ"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_array_equals(context.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "AÇ"), [t]);
+ assert_array_equals(context.getElementsByTagNameNS("test", "aÇ"), []);
+ assert_array_equals(context.getElementsByTagNameNS("test", "aç"), []);
+ }, "AÇ, case sensitivity")
+
+ test(function() {
+ var t = element.appendChild(document.createElementNS("test", "test:BODY"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ assert_array_equals(context.getElementsByTagNameNS("test", "BODY"), [t]);
+ assert_array_equals(context.getElementsByTagNameNS("test", "body"), []);
+ }, "BODY element in test namespace, prefix")
+
+ test(function() {
+ var t = element.appendChild(document.createElementNS("test", "test:test"))
+ this.add_cleanup(function() {element.removeChild(t)})
+ var actual = context.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "*");
+ var expected = [];
+ var get_elements = function(node) {
+ for (var i = 0; i < node.childNodes.length; i++) {
+ var child = node.childNodes[i];
+ if (child.nodeType === child.ELEMENT_NODE) {
+ if (child !== t) {
+ expected.push(child);
+ }
+ get_elements(child);
+ }
+ }
+ }
+ get_elements(context);
+ assert_array_equals(actual, expected);
+ }, "getElementsByTagNameNS('http://www.w3.org/1999/xhtml', '*')")
+
+ test(function() {
+ var actual = context.getElementsByTagNameNS("*", "*");
+ var expected = [];
+ var get_elements = function(node) {
+ for (var i = 0; i < node.childNodes.length; i++) {
+ var child = node.childNodes[i];
+ if (child.nodeType === child.ELEMENT_NODE) {
+ expected.push(child);
+ get_elements(child);
+ }
+ }
+ }
+ get_elements(context);
+ assert_array_equals(actual, expected);
+ }, "getElementsByTagNameNS('*', '*')")
+
+ test(function() {
+ assert_array_equals(context.getElementsByTagNameNS("**", "*"), []);
+ assert_array_equals(context.getElementsByTagNameNS(null, "0"), []);
+ assert_array_equals(context.getElementsByTagNameNS(null, "div"), []);
+ }, "Empty lists")
+}
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentURLsubexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-URL.sub-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-URL.sub-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-URL.sub-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+FAIL Document.URL with redirect assert_equals: expected "http://{{host}}:{{ports[http][0]}}/common/blank.html" but got "http://127.0.0.1:8000/common/redirect.py?location=/common/blank.html"
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentURLsubhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-URL.sub.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-URL.sub.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-URL.sub.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+<!doctype html>
+<meta charset=utf-8>
+<title>Document.URL with redirect</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var iframe = document.createElement("iframe");
+ iframe.src = "/common/redirect.py?location=/common/blank.html";
+ document.body.appendChild(iframe);
+ this.add_cleanup(function() { document.body.removeChild(iframe); });
+ iframe.onload = this.step_func_done(function() {
+ assert_equals(iframe.contentDocument.URL,
+ "http://{{host}}:{{ports[http][0]}}/common/blank.html");
+ });
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentadoptNodeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-adoptNode-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-adoptNode-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-adoptNode-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+
+PASS Adopting an Element called 'x<' should work.
+PASS Adopting an Element called ':good:times:' should work.
+FAIL Explicitly adopting a DocumentType should work. NotSupportedError: DOM Exception 9
+PASS Adopting a Document should throw.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentadoptNodehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-adoptNode.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-adoptNode.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-adoptNode.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,50 @@
</span><ins>+<!doctype html>
+<meta charset=utf-8>
+<title>Document.adoptNode</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-adoptnode">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<!-- creates an element with local name "x<": --><x<>x</x<>
+<script>
+test(function() {
+ var y = document.getElementsByTagName("x<")[0]
+ var child = y.firstChild
+ assert_equals(y.parentNode, document.body)
+ assert_equals(y.ownerDocument, document)
+ assert_equals(document.adoptNode(y), y)
+ assert_equals(y.parentNode, null)
+ assert_equals(y.firstChild, child)
+ assert_equals(y.ownerDocument, document)
+ assert_equals(child.ownerDocument, document)
+ var doc = document.implementation.createDocument(null, null, null)
+ assert_equals(doc.adoptNode(y), y)
+ assert_equals(y.parentNode, null)
+ assert_equals(y.firstChild, child)
+ assert_equals(y.ownerDocument, doc)
+ assert_equals(child.ownerDocument, doc)
+}, "Adopting an Element called 'x<' should work.")
+
+test(function() {
+ var x = document.createElement(":good:times:")
+ assert_equals(document.adoptNode(x), x);
+ var doc = document.implementation.createDocument(null, null, null)
+ assert_equals(doc.adoptNode(x), x)
+ assert_equals(x.parentNode, null)
+ assert_equals(x.ownerDocument, doc)
+}, "Adopting an Element called ':good:times:' should work.")
+
+test(function() {
+ var doctype = document.doctype;
+ assert_equals(doctype.parentNode, document)
+ assert_equals(doctype.ownerDocument, document)
+ assert_equals(document.adoptNode(doctype), doctype)
+ assert_equals(doctype.parentNode, null)
+ assert_equals(doctype.ownerDocument, document)
+}, "Explicitly adopting a DocumentType should work.")
+
+test(function() {
+ var doc = document.implementation.createDocument(null, null, null)
+ assert_throws("NOT_SUPPORTED_ERR", function() { document.adoptNode(doc) })
+}, "Adopting a Document should throw.")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcharacterSetnormalizationexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-characterSet-normalization-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-characterSet-normalization-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-characterSet-normalization-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,434 @@
</span><ins>+
+FAIL Name "utf-8" has label "unicode-1-1-utf-8" (characterSet) assert_equals: expected "UTF-8" but got "ISO-8859-1"
+FAIL Name "utf-8" has label "unicode-1-1-utf-8" (inputEncoding) assert_equals: expected "UTF-8" but got "ISO-8859-1"
+FAIL Name "utf-8" has label "utf-8" (characterSet) assert_equals: expected "UTF-8" but got "ISO-8859-1"
+FAIL Name "utf-8" has label "utf-8" (inputEncoding) assert_equals: expected "UTF-8" but got "ISO-8859-1"
+FAIL Name "utf-8" has label "utf8" (characterSet) assert_equals: expected "UTF-8" but got "ISO-8859-1"
+FAIL Name "utf-8" has label "utf8" (inputEncoding) assert_equals: expected "UTF-8" but got "ISO-8859-1"
+FAIL Name "utf-8" has label "utf-16" (characterSet) assert_equals: expected "UTF-8" but got "ISO-8859-1"
+FAIL Name "utf-8" has label "utf-16" (inputEncoding) assert_equals: expected "UTF-8" but got "ISO-8859-1"
+FAIL Name "utf-8" has label "utf-16le" (characterSet) assert_equals: expected "UTF-8" but got "ISO-8859-1"
+FAIL Name "utf-8" has label "utf-16le" (inputEncoding) assert_equals: expected "UTF-8" but got "ISO-8859-1"
+FAIL Name "utf-8" has label "utf-16be" (characterSet) assert_equals: expected "UTF-8" but got "ISO-8859-1"
+FAIL Name "utf-8" has label "utf-16be" (inputEncoding) assert_equals: expected "UTF-8" but got "ISO-8859-1"
+FAIL Name "ibm866" has label "866" (characterSet) assert_equals: expected "IBM866" but got "ISO-8859-1"
+FAIL Name "ibm866" has label "866" (inputEncoding) assert_equals: expected "IBM866" but got "ISO-8859-1"
+FAIL Name "ibm866" has label "cp866" (characterSet) assert_equals: expected "IBM866" but got "ISO-8859-1"
+FAIL Name "ibm866" has label "cp866" (inputEncoding) assert_equals: expected "IBM866" but got "ISO-8859-1"
+FAIL Name "ibm866" has label "csibm866" (characterSet) assert_equals: expected "IBM866" but got "ISO-8859-1"
+FAIL Name "ibm866" has label "csibm866" (inputEncoding) assert_equals: expected "IBM866" but got "ISO-8859-1"
+FAIL Name "ibm866" has label "ibm866" (characterSet) assert_equals: expected "IBM866" but got "ISO-8859-1"
+FAIL Name "ibm866" has label "ibm866" (inputEncoding) assert_equals: expected "IBM866" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "csisolatin2" (characterSet) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "csisolatin2" (inputEncoding) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "iso-8859-2" (characterSet) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "iso-8859-2" (inputEncoding) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "iso-ir-101" (characterSet) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "iso-ir-101" (inputEncoding) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "iso8859-2" (characterSet) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "iso8859-2" (inputEncoding) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "iso88592" (characterSet) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "iso88592" (inputEncoding) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "iso_8859-2" (characterSet) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "iso_8859-2" (inputEncoding) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "iso_8859-2:1987" (characterSet) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "iso_8859-2:1987" (inputEncoding) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "l2" (characterSet) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "l2" (inputEncoding) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "latin2" (characterSet) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-2" has label "latin2" (inputEncoding) assert_equals: expected "ISO-8859-2" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "csisolatin3" (characterSet) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "csisolatin3" (inputEncoding) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "iso-8859-3" (characterSet) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "iso-8859-3" (inputEncoding) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "iso-ir-109" (characterSet) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "iso-ir-109" (inputEncoding) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "iso8859-3" (characterSet) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "iso8859-3" (inputEncoding) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "iso88593" (characterSet) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "iso88593" (inputEncoding) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "iso_8859-3" (characterSet) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "iso_8859-3" (inputEncoding) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "iso_8859-3:1988" (characterSet) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "iso_8859-3:1988" (inputEncoding) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "l3" (characterSet) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "l3" (inputEncoding) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "latin3" (characterSet) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-3" has label "latin3" (inputEncoding) assert_equals: expected "ISO-8859-3" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "csisolatin4" (characterSet) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "csisolatin4" (inputEncoding) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "iso-8859-4" (characterSet) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "iso-8859-4" (inputEncoding) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "iso-ir-110" (characterSet) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "iso-ir-110" (inputEncoding) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "iso8859-4" (characterSet) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "iso8859-4" (inputEncoding) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "iso88594" (characterSet) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "iso88594" (inputEncoding) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "iso_8859-4" (characterSet) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "iso_8859-4" (inputEncoding) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "iso_8859-4:1988" (characterSet) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "iso_8859-4:1988" (inputEncoding) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "l4" (characterSet) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "l4" (inputEncoding) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "latin4" (characterSet) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-4" has label "latin4" (inputEncoding) assert_equals: expected "ISO-8859-4" but got "ISO-8859-1"
+FAIL Name "iso-8859-5" has label "csisolatincyrillic" (characterSet) assert_equals: expected "ISO-8859-5" but got "ISO-8859-1"
+FAIL Name "iso-8859-5" has label "csisolatincyrillic" (inputEncoding) assert_equals: expected "ISO-8859-5" but got "ISO-8859-1"
+FAIL Name "iso-8859-5" has label "cyrillic" (characterSet) assert_equals: expected "ISO-8859-5" but got "ISO-8859-1"
+FAIL Name "iso-8859-5" has label "cyrillic" (inputEncoding) assert_equals: expected "ISO-8859-5" but got "ISO-8859-1"
+FAIL Name "iso-8859-5" has label "iso-8859-5" (characterSet) assert_equals: expected "ISO-8859-5" but got "ISO-8859-1"
+FAIL Name "iso-8859-5" has label "iso-8859-5" (inputEncoding) assert_equals: expected "ISO-8859-5" but got "ISO-8859-1"
+FAIL Name "iso-8859-5" has label "iso-ir-144" (characterSet) assert_equals: expected "ISO-8859-5" but got "ISO-8859-1"
+FAIL Name "iso-8859-5" has label "iso-ir-144" (inputEncoding) assert_equals: expected "ISO-8859-5" but got "ISO-8859-1"
+FAIL Name "iso-8859-5" has label "iso8859-5" (characterSet) assert_equals: expected "ISO-8859-5" but got "ISO-8859-1"
+FAIL Name "iso-8859-5" has label "iso8859-5" (inputEncoding) assert_equals: expected "ISO-8859-5" but got "ISO-8859-1"
+FAIL Name "iso-8859-5" has label "iso88595" (characterSet) assert_equals: expected "ISO-8859-5" but got "ISO-8859-1"
+FAIL Name "iso-8859-5" has label "iso88595" (inputEncoding) assert_equals: expected "ISO-8859-5" but got "ISO-8859-1"
+FAIL Name "iso-8859-5" has label "iso_8859-5" (characterSet) assert_equals: expected "ISO-8859-5" but got "ISO-8859-1"
+FAIL Name "iso-8859-5" has label "iso_8859-5" (inputEncoding) assert_equals: expected "ISO-8859-5" but got "ISO-8859-1"
+FAIL Name "iso-8859-5" has label "iso_8859-5:1988" (characterSet) assert_equals: expected "ISO-8859-5" but got "ISO-8859-1"
+FAIL Name "iso-8859-5" has label "iso_8859-5:1988" (inputEncoding) assert_equals: expected "ISO-8859-5" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "arabic" (characterSet) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "arabic" (inputEncoding) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "asmo-708" (characterSet) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "asmo-708" (inputEncoding) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "csiso88596e" (characterSet) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "csiso88596e" (inputEncoding) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "csiso88596i" (characterSet) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "csiso88596i" (inputEncoding) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "csisolatinarabic" (characterSet) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "csisolatinarabic" (inputEncoding) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "ecma-114" (characterSet) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "ecma-114" (inputEncoding) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "iso-8859-6" (characterSet) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "iso-8859-6" (inputEncoding) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "iso-8859-6-e" (characterSet) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "iso-8859-6-e" (inputEncoding) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "iso-8859-6-i" (characterSet) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "iso-8859-6-i" (inputEncoding) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "iso-ir-127" (characterSet) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "iso-ir-127" (inputEncoding) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "iso8859-6" (characterSet) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "iso8859-6" (inputEncoding) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "iso88596" (characterSet) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "iso88596" (inputEncoding) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "iso_8859-6" (characterSet) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "iso_8859-6" (inputEncoding) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "iso_8859-6:1987" (characterSet) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-6" has label "iso_8859-6:1987" (inputEncoding) assert_equals: expected "ISO-8859-6" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "csisolatingreek" (characterSet) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "csisolatingreek" (inputEncoding) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "ecma-118" (characterSet) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "ecma-118" (inputEncoding) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "elot_928" (characterSet) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "elot_928" (inputEncoding) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "greek" (characterSet) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "greek" (inputEncoding) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "greek8" (characterSet) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "greek8" (inputEncoding) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "iso-8859-7" (characterSet) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "iso-8859-7" (inputEncoding) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "iso-ir-126" (characterSet) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "iso-ir-126" (inputEncoding) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "iso8859-7" (characterSet) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "iso8859-7" (inputEncoding) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "iso88597" (characterSet) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "iso88597" (inputEncoding) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "iso_8859-7" (characterSet) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "iso_8859-7" (inputEncoding) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "iso_8859-7:1987" (characterSet) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "iso_8859-7:1987" (inputEncoding) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "sun_eu_greek" (characterSet) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-7" has label "sun_eu_greek" (inputEncoding) assert_equals: expected "ISO-8859-7" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "csiso88598e" (characterSet) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "csiso88598e" (inputEncoding) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "csisolatinhebrew" (characterSet) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "csisolatinhebrew" (inputEncoding) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "hebrew" (characterSet) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "hebrew" (inputEncoding) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "iso-8859-8" (characterSet) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "iso-8859-8" (inputEncoding) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "iso-8859-8-e" (characterSet) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "iso-8859-8-e" (inputEncoding) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "iso-ir-138" (characterSet) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "iso-ir-138" (inputEncoding) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "iso8859-8" (characterSet) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "iso8859-8" (inputEncoding) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "iso88598" (characterSet) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "iso88598" (inputEncoding) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "iso_8859-8" (characterSet) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "iso_8859-8" (inputEncoding) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "iso_8859-8:1988" (characterSet) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "iso_8859-8:1988" (inputEncoding) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "visual" (characterSet) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8" has label "visual" (inputEncoding) assert_equals: expected "ISO-8859-8" but got "ISO-8859-1"
+FAIL Name "iso-8859-8-i" has label "csiso88598i" (characterSet) assert_equals: expected "ISO-8859-8-I" but got "ISO-8859-1"
+FAIL Name "iso-8859-8-i" has label "csiso88598i" (inputEncoding) assert_equals: expected "ISO-8859-8-I" but got "ISO-8859-1"
+FAIL Name "iso-8859-8-i" has label "iso-8859-8-i" (characterSet) assert_equals: expected "ISO-8859-8-I" but got "ISO-8859-1"
+FAIL Name "iso-8859-8-i" has label "iso-8859-8-i" (inputEncoding) assert_equals: expected "ISO-8859-8-I" but got "ISO-8859-1"
+FAIL Name "iso-8859-8-i" has label "logical" (characterSet) assert_equals: expected "ISO-8859-8-I" but got "ISO-8859-1"
+FAIL Name "iso-8859-8-i" has label "logical" (inputEncoding) assert_equals: expected "ISO-8859-8-I" but got "ISO-8859-1"
+FAIL Name "iso-8859-10" has label "csisolatin6" (characterSet) assert_equals: expected "ISO-8859-10" but got "ISO-8859-1"
+FAIL Name "iso-8859-10" has label "csisolatin6" (inputEncoding) assert_equals: expected "ISO-8859-10" but got "ISO-8859-1"
+FAIL Name "iso-8859-10" has label "iso-8859-10" (characterSet) assert_equals: expected "ISO-8859-10" but got "ISO-8859-1"
+FAIL Name "iso-8859-10" has label "iso-8859-10" (inputEncoding) assert_equals: expected "ISO-8859-10" but got "ISO-8859-1"
+FAIL Name "iso-8859-10" has label "iso-ir-157" (characterSet) assert_equals: expected "ISO-8859-10" but got "ISO-8859-1"
+FAIL Name "iso-8859-10" has label "iso-ir-157" (inputEncoding) assert_equals: expected "ISO-8859-10" but got "ISO-8859-1"
+FAIL Name "iso-8859-10" has label "iso8859-10" (characterSet) assert_equals: expected "ISO-8859-10" but got "ISO-8859-1"
+FAIL Name "iso-8859-10" has label "iso8859-10" (inputEncoding) assert_equals: expected "ISO-8859-10" but got "ISO-8859-1"
+FAIL Name "iso-8859-10" has label "iso885910" (characterSet) assert_equals: expected "ISO-8859-10" but got "ISO-8859-1"
+FAIL Name "iso-8859-10" has label "iso885910" (inputEncoding) assert_equals: expected "ISO-8859-10" but got "ISO-8859-1"
+FAIL Name "iso-8859-10" has label "l6" (characterSet) assert_equals: expected "ISO-8859-10" but got "ISO-8859-1"
+FAIL Name "iso-8859-10" has label "l6" (inputEncoding) assert_equals: expected "ISO-8859-10" but got "ISO-8859-1"
+FAIL Name "iso-8859-10" has label "latin6" (characterSet) assert_equals: expected "ISO-8859-10" but got "ISO-8859-1"
+FAIL Name "iso-8859-10" has label "latin6" (inputEncoding) assert_equals: expected "ISO-8859-10" but got "ISO-8859-1"
+FAIL Name "iso-8859-13" has label "iso-8859-13" (characterSet) assert_equals: expected "ISO-8859-13" but got "ISO-8859-1"
+FAIL Name "iso-8859-13" has label "iso-8859-13" (inputEncoding) assert_equals: expected "ISO-8859-13" but got "ISO-8859-1"
+FAIL Name "iso-8859-13" has label "iso8859-13" (characterSet) assert_equals: expected "ISO-8859-13" but got "ISO-8859-1"
+FAIL Name "iso-8859-13" has label "iso8859-13" (inputEncoding) assert_equals: expected "ISO-8859-13" but got "ISO-8859-1"
+FAIL Name "iso-8859-13" has label "iso885913" (characterSet) assert_equals: expected "ISO-8859-13" but got "ISO-8859-1"
+FAIL Name "iso-8859-13" has label "iso885913" (inputEncoding) assert_equals: expected "ISO-8859-13" but got "ISO-8859-1"
+FAIL Name "iso-8859-14" has label "iso-8859-14" (characterSet) assert_equals: expected "ISO-8859-14" but got "ISO-8859-1"
+FAIL Name "iso-8859-14" has label "iso-8859-14" (inputEncoding) assert_equals: expected "ISO-8859-14" but got "ISO-8859-1"
+FAIL Name "iso-8859-14" has label "iso8859-14" (characterSet) assert_equals: expected "ISO-8859-14" but got "ISO-8859-1"
+FAIL Name "iso-8859-14" has label "iso8859-14" (inputEncoding) assert_equals: expected "ISO-8859-14" but got "ISO-8859-1"
+FAIL Name "iso-8859-14" has label "iso885914" (characterSet) assert_equals: expected "ISO-8859-14" but got "ISO-8859-1"
+FAIL Name "iso-8859-14" has label "iso885914" (inputEncoding) assert_equals: expected "ISO-8859-14" but got "ISO-8859-1"
+FAIL Name "iso-8859-15" has label "csisolatin9" (characterSet) assert_equals: expected "ISO-8859-15" but got "ISO-8859-1"
+FAIL Name "iso-8859-15" has label "csisolatin9" (inputEncoding) assert_equals: expected "ISO-8859-15" but got "ISO-8859-1"
+FAIL Name "iso-8859-15" has label "iso-8859-15" (characterSet) assert_equals: expected "ISO-8859-15" but got "ISO-8859-1"
+FAIL Name "iso-8859-15" has label "iso-8859-15" (inputEncoding) assert_equals: expected "ISO-8859-15" but got "ISO-8859-1"
+FAIL Name "iso-8859-15" has label "iso8859-15" (characterSet) assert_equals: expected "ISO-8859-15" but got "ISO-8859-1"
+FAIL Name "iso-8859-15" has label "iso8859-15" (inputEncoding) assert_equals: expected "ISO-8859-15" but got "ISO-8859-1"
+FAIL Name "iso-8859-15" has label "iso885915" (characterSet) assert_equals: expected "ISO-8859-15" but got "ISO-8859-1"
+FAIL Name "iso-8859-15" has label "iso885915" (inputEncoding) assert_equals: expected "ISO-8859-15" but got "ISO-8859-1"
+FAIL Name "iso-8859-15" has label "iso_8859-15" (characterSet) assert_equals: expected "ISO-8859-15" but got "ISO-8859-1"
+FAIL Name "iso-8859-15" has label "iso_8859-15" (inputEncoding) assert_equals: expected "ISO-8859-15" but got "ISO-8859-1"
+FAIL Name "iso-8859-15" has label "l9" (characterSet) assert_equals: expected "ISO-8859-15" but got "ISO-8859-1"
+FAIL Name "iso-8859-15" has label "l9" (inputEncoding) assert_equals: expected "ISO-8859-15" but got "ISO-8859-1"
+FAIL Name "iso-8859-16" has label "iso-8859-16" (characterSet) assert_equals: expected "ISO-8859-16" but got "ISO-8859-1"
+FAIL Name "iso-8859-16" has label "iso-8859-16" (inputEncoding) assert_equals: expected "ISO-8859-16" but got "ISO-8859-1"
+FAIL Name "koi8-r" has label "cskoi8r" (characterSet) assert_equals: expected "KOI8-R" but got "ISO-8859-1"
+FAIL Name "koi8-r" has label "cskoi8r" (inputEncoding) assert_equals: expected "KOI8-R" but got "ISO-8859-1"
+FAIL Name "koi8-r" has label "koi" (characterSet) assert_equals: expected "KOI8-R" but got "ISO-8859-1"
+FAIL Name "koi8-r" has label "koi" (inputEncoding) assert_equals: expected "KOI8-R" but got "ISO-8859-1"
+FAIL Name "koi8-r" has label "koi8" (characterSet) assert_equals: expected "KOI8-R" but got "ISO-8859-1"
+FAIL Name "koi8-r" has label "koi8" (inputEncoding) assert_equals: expected "KOI8-R" but got "ISO-8859-1"
+FAIL Name "koi8-r" has label "koi8-r" (characterSet) assert_equals: expected "KOI8-R" but got "ISO-8859-1"
+FAIL Name "koi8-r" has label "koi8-r" (inputEncoding) assert_equals: expected "KOI8-R" but got "ISO-8859-1"
+FAIL Name "koi8-r" has label "koi8_r" (characterSet) assert_equals: expected "KOI8-R" but got "ISO-8859-1"
+FAIL Name "koi8-r" has label "koi8_r" (inputEncoding) assert_equals: expected "KOI8-R" but got "ISO-8859-1"
+FAIL Name "koi8-u" has label "koi8-u" (characterSet) assert_equals: expected "KOI8-U" but got "ISO-8859-1"
+FAIL Name "koi8-u" has label "koi8-u" (inputEncoding) assert_equals: expected "KOI8-U" but got "ISO-8859-1"
+FAIL Name "macintosh" has label "csmacintosh" (characterSet) assert_equals: expected "MACINTOSH" but got "ISO-8859-1"
+FAIL Name "macintosh" has label "csmacintosh" (inputEncoding) assert_equals: expected "MACINTOSH" but got "ISO-8859-1"
+FAIL Name "macintosh" has label "mac" (characterSet) assert_equals: expected "MACINTOSH" but got "ISO-8859-1"
+FAIL Name "macintosh" has label "mac" (inputEncoding) assert_equals: expected "MACINTOSH" but got "ISO-8859-1"
+FAIL Name "macintosh" has label "macintosh" (characterSet) assert_equals: expected "MACINTOSH" but got "ISO-8859-1"
+FAIL Name "macintosh" has label "macintosh" (inputEncoding) assert_equals: expected "MACINTOSH" but got "ISO-8859-1"
+FAIL Name "macintosh" has label "x-mac-roman" (characterSet) assert_equals: expected "MACINTOSH" but got "ISO-8859-1"
+FAIL Name "macintosh" has label "x-mac-roman" (inputEncoding) assert_equals: expected "MACINTOSH" but got "ISO-8859-1"
+FAIL Name "windows-874" has label "dos-874" (characterSet) assert_equals: expected "WINDOWS-874" but got "ISO-8859-1"
+FAIL Name "windows-874" has label "dos-874" (inputEncoding) assert_equals: expected "WINDOWS-874" but got "ISO-8859-1"
+FAIL Name "windows-874" has label "iso-8859-11" (characterSet) assert_equals: expected "WINDOWS-874" but got "ISO-8859-1"
+FAIL Name "windows-874" has label "iso-8859-11" (inputEncoding) assert_equals: expected "WINDOWS-874" but got "ISO-8859-1"
+FAIL Name "windows-874" has label "iso8859-11" (characterSet) assert_equals: expected "WINDOWS-874" but got "ISO-8859-1"
+FAIL Name "windows-874" has label "iso8859-11" (inputEncoding) assert_equals: expected "WINDOWS-874" but got "ISO-8859-1"
+FAIL Name "windows-874" has label "iso885911" (characterSet) assert_equals: expected "WINDOWS-874" but got "ISO-8859-1"
+FAIL Name "windows-874" has label "iso885911" (inputEncoding) assert_equals: expected "WINDOWS-874" but got "ISO-8859-1"
+FAIL Name "windows-874" has label "tis-620" (characterSet) assert_equals: expected "WINDOWS-874" but got "ISO-8859-1"
+FAIL Name "windows-874" has label "tis-620" (inputEncoding) assert_equals: expected "WINDOWS-874" but got "ISO-8859-1"
+FAIL Name "windows-874" has label "windows-874" (characterSet) assert_equals: expected "WINDOWS-874" but got "ISO-8859-1"
+FAIL Name "windows-874" has label "windows-874" (inputEncoding) assert_equals: expected "WINDOWS-874" but got "ISO-8859-1"
+FAIL Name "windows-1250" has label "cp1250" (characterSet) assert_equals: expected "WINDOWS-1250" but got "ISO-8859-1"
+FAIL Name "windows-1250" has label "cp1250" (inputEncoding) assert_equals: expected "WINDOWS-1250" but got "ISO-8859-1"
+FAIL Name "windows-1250" has label "windows-1250" (characterSet) assert_equals: expected "WINDOWS-1250" but got "ISO-8859-1"
+FAIL Name "windows-1250" has label "windows-1250" (inputEncoding) assert_equals: expected "WINDOWS-1250" but got "ISO-8859-1"
+FAIL Name "windows-1250" has label "x-cp1250" (characterSet) assert_equals: expected "WINDOWS-1250" but got "ISO-8859-1"
+FAIL Name "windows-1250" has label "x-cp1250" (inputEncoding) assert_equals: expected "WINDOWS-1250" but got "ISO-8859-1"
+FAIL Name "windows-1251" has label "cp1251" (characterSet) assert_equals: expected "WINDOWS-1251" but got "ISO-8859-1"
+FAIL Name "windows-1251" has label "cp1251" (inputEncoding) assert_equals: expected "WINDOWS-1251" but got "ISO-8859-1"
+FAIL Name "windows-1251" has label "windows-1251" (characterSet) assert_equals: expected "WINDOWS-1251" but got "ISO-8859-1"
+FAIL Name "windows-1251" has label "windows-1251" (inputEncoding) assert_equals: expected "WINDOWS-1251" but got "ISO-8859-1"
+FAIL Name "windows-1251" has label "x-cp1251" (characterSet) assert_equals: expected "WINDOWS-1251" but got "ISO-8859-1"
+FAIL Name "windows-1251" has label "x-cp1251" (inputEncoding) assert_equals: expected "WINDOWS-1251" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "ansi_x3.4-1968" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "ansi_x3.4-1968" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "ascii" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "ascii" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "cp1252" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "cp1252" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "cp819" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "cp819" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "csisolatin1" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "csisolatin1" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "ibm819" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "ibm819" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "iso-8859-1" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "iso-8859-1" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "iso-ir-100" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "iso-ir-100" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "iso8859-1" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "iso8859-1" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "iso88591" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "iso88591" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "iso_8859-1" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "iso_8859-1" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "iso_8859-1:1987" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "iso_8859-1:1987" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "l1" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "l1" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "latin1" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "latin1" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "us-ascii" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "us-ascii" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "windows-1252" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "windows-1252" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "x-cp1252" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "x-cp1252" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "x-user-defined" (characterSet) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1252" has label "x-user-defined" (inputEncoding) assert_equals: expected "WINDOWS-1252" but got "ISO-8859-1"
+FAIL Name "windows-1253" has label "cp1253" (characterSet) assert_equals: expected "WINDOWS-1253" but got "ISO-8859-1"
+FAIL Name "windows-1253" has label "cp1253" (inputEncoding) assert_equals: expected "WINDOWS-1253" but got "ISO-8859-1"
+FAIL Name "windows-1253" has label "windows-1253" (characterSet) assert_equals: expected "WINDOWS-1253" but got "ISO-8859-1"
+FAIL Name "windows-1253" has label "windows-1253" (inputEncoding) assert_equals: expected "WINDOWS-1253" but got "ISO-8859-1"
+FAIL Name "windows-1253" has label "x-cp1253" (characterSet) assert_equals: expected "WINDOWS-1253" but got "ISO-8859-1"
+FAIL Name "windows-1253" has label "x-cp1253" (inputEncoding) assert_equals: expected "WINDOWS-1253" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "cp1254" (characterSet) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "cp1254" (inputEncoding) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "csisolatin5" (characterSet) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "csisolatin5" (inputEncoding) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "iso-8859-9" (characterSet) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "iso-8859-9" (inputEncoding) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "iso-ir-148" (characterSet) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "iso-ir-148" (inputEncoding) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "iso8859-9" (characterSet) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "iso8859-9" (inputEncoding) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "iso88599" (characterSet) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "iso88599" (inputEncoding) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "iso_8859-9" (characterSet) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "iso_8859-9" (inputEncoding) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "iso_8859-9:1989" (characterSet) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "iso_8859-9:1989" (inputEncoding) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "l5" (characterSet) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "l5" (inputEncoding) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "latin5" (characterSet) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "latin5" (inputEncoding) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "windows-1254" (characterSet) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "windows-1254" (inputEncoding) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "x-cp1254" (characterSet) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1254" has label "x-cp1254" (inputEncoding) assert_equals: expected "WINDOWS-1254" but got "ISO-8859-1"
+FAIL Name "windows-1255" has label "cp1255" (characterSet) assert_equals: expected "WINDOWS-1255" but got "ISO-8859-1"
+FAIL Name "windows-1255" has label "cp1255" (inputEncoding) assert_equals: expected "WINDOWS-1255" but got "ISO-8859-1"
+FAIL Name "windows-1255" has label "windows-1255" (characterSet) assert_equals: expected "WINDOWS-1255" but got "ISO-8859-1"
+FAIL Name "windows-1255" has label "windows-1255" (inputEncoding) assert_equals: expected "WINDOWS-1255" but got "ISO-8859-1"
+FAIL Name "windows-1255" has label "x-cp1255" (characterSet) assert_equals: expected "WINDOWS-1255" but got "ISO-8859-1"
+FAIL Name "windows-1255" has label "x-cp1255" (inputEncoding) assert_equals: expected "WINDOWS-1255" but got "ISO-8859-1"
+FAIL Name "windows-1256" has label "cp1256" (characterSet) assert_equals: expected "WINDOWS-1256" but got "ISO-8859-1"
+FAIL Name "windows-1256" has label "cp1256" (inputEncoding) assert_equals: expected "WINDOWS-1256" but got "ISO-8859-1"
+FAIL Name "windows-1256" has label "windows-1256" (characterSet) assert_equals: expected "WINDOWS-1256" but got "ISO-8859-1"
+FAIL Name "windows-1256" has label "windows-1256" (inputEncoding) assert_equals: expected "WINDOWS-1256" but got "ISO-8859-1"
+FAIL Name "windows-1256" has label "x-cp1256" (characterSet) assert_equals: expected "WINDOWS-1256" but got "ISO-8859-1"
+FAIL Name "windows-1256" has label "x-cp1256" (inputEncoding) assert_equals: expected "WINDOWS-1256" but got "ISO-8859-1"
+FAIL Name "windows-1257" has label "cp1257" (characterSet) assert_equals: expected "WINDOWS-1257" but got "ISO-8859-1"
+FAIL Name "windows-1257" has label "cp1257" (inputEncoding) assert_equals: expected "WINDOWS-1257" but got "ISO-8859-1"
+FAIL Name "windows-1257" has label "windows-1257" (characterSet) assert_equals: expected "WINDOWS-1257" but got "ISO-8859-1"
+FAIL Name "windows-1257" has label "windows-1257" (inputEncoding) assert_equals: expected "WINDOWS-1257" but got "ISO-8859-1"
+FAIL Name "windows-1257" has label "x-cp1257" (characterSet) assert_equals: expected "WINDOWS-1257" but got "ISO-8859-1"
+FAIL Name "windows-1257" has label "x-cp1257" (inputEncoding) assert_equals: expected "WINDOWS-1257" but got "ISO-8859-1"
+FAIL Name "windows-1258" has label "cp1258" (characterSet) assert_equals: expected "WINDOWS-1258" but got "ISO-8859-1"
+FAIL Name "windows-1258" has label "cp1258" (inputEncoding) assert_equals: expected "WINDOWS-1258" but got "ISO-8859-1"
+FAIL Name "windows-1258" has label "windows-1258" (characterSet) assert_equals: expected "WINDOWS-1258" but got "ISO-8859-1"
+FAIL Name "windows-1258" has label "windows-1258" (inputEncoding) assert_equals: expected "WINDOWS-1258" but got "ISO-8859-1"
+FAIL Name "windows-1258" has label "x-cp1258" (characterSet) assert_equals: expected "WINDOWS-1258" but got "ISO-8859-1"
+FAIL Name "windows-1258" has label "x-cp1258" (inputEncoding) assert_equals: expected "WINDOWS-1258" but got "ISO-8859-1"
+FAIL Name "x-mac-cyrillic" has label "x-mac-cyrillic" (characterSet) assert_equals: expected "X-MAC-CYRILLIC" but got "ISO-8859-1"
+FAIL Name "x-mac-cyrillic" has label "x-mac-cyrillic" (inputEncoding) assert_equals: expected "X-MAC-CYRILLIC" but got "ISO-8859-1"
+FAIL Name "x-mac-cyrillic" has label "x-mac-ukrainian" (characterSet) assert_equals: expected "X-MAC-CYRILLIC" but got "ISO-8859-1"
+FAIL Name "x-mac-cyrillic" has label "x-mac-ukrainian" (inputEncoding) assert_equals: expected "X-MAC-CYRILLIC" but got "ISO-8859-1"
+FAIL Name "gbk" has label "chinese" (characterSet) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "chinese" (inputEncoding) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "csgb2312" (characterSet) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "csgb2312" (inputEncoding) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "csiso58gb231280" (characterSet) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "csiso58gb231280" (inputEncoding) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "gb2312" (characterSet) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "gb2312" (inputEncoding) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "gb_2312" (characterSet) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "gb_2312" (inputEncoding) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "gb_2312-80" (characterSet) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "gb_2312-80" (inputEncoding) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "gbk" (characterSet) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "gbk" (inputEncoding) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "iso-ir-58" (characterSet) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "iso-ir-58" (inputEncoding) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "x-gbk" (characterSet) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gbk" has label "x-gbk" (inputEncoding) assert_equals: expected "GBK" but got "ISO-8859-1"
+FAIL Name "gb18030" has label "gb18030" (characterSet) assert_equals: expected "GB18030" but got "ISO-8859-1"
+FAIL Name "gb18030" has label "gb18030" (inputEncoding) assert_equals: expected "GB18030" but got "ISO-8859-1"
+FAIL Name "hz-gb-2312" has label "hz-gb-2312" (characterSet) assert_equals: expected "HZ-GB-2312" but got "ISO-8859-1"
+FAIL Name "hz-gb-2312" has label "hz-gb-2312" (inputEncoding) assert_equals: expected "HZ-GB-2312" but got "ISO-8859-1"
+FAIL Name "big5" has label "big5" (characterSet) assert_equals: expected "Big5" but got "ISO-8859-1"
+FAIL Name "big5" has label "big5" (inputEncoding) assert_equals: expected "Big5" but got "ISO-8859-1"
+FAIL Name "big5" has label "big5-hkscs" (characterSet) assert_equals: expected "Big5" but got "ISO-8859-1"
+FAIL Name "big5" has label "big5-hkscs" (inputEncoding) assert_equals: expected "Big5" but got "ISO-8859-1"
+FAIL Name "big5" has label "cn-big5" (characterSet) assert_equals: expected "Big5" but got "ISO-8859-1"
+FAIL Name "big5" has label "cn-big5" (inputEncoding) assert_equals: expected "Big5" but got "ISO-8859-1"
+FAIL Name "big5" has label "csbig5" (characterSet) assert_equals: expected "Big5" but got "ISO-8859-1"
+FAIL Name "big5" has label "csbig5" (inputEncoding) assert_equals: expected "Big5" but got "ISO-8859-1"
+FAIL Name "big5" has label "x-x-big5" (characterSet) assert_equals: expected "Big5" but got "ISO-8859-1"
+FAIL Name "big5" has label "x-x-big5" (inputEncoding) assert_equals: expected "Big5" but got "ISO-8859-1"
+FAIL Name "euc-jp" has label "cseucpkdfmtjapanese" (characterSet) assert_equals: expected "EUC-JP" but got "ISO-8859-1"
+FAIL Name "euc-jp" has label "cseucpkdfmtjapanese" (inputEncoding) assert_equals: expected "EUC-JP" but got "ISO-8859-1"
+FAIL Name "euc-jp" has label "euc-jp" (characterSet) assert_equals: expected "EUC-JP" but got "ISO-8859-1"
+FAIL Name "euc-jp" has label "euc-jp" (inputEncoding) assert_equals: expected "EUC-JP" but got "ISO-8859-1"
+FAIL Name "euc-jp" has label "x-euc-jp" (characterSet) assert_equals: expected "EUC-JP" but got "ISO-8859-1"
+FAIL Name "euc-jp" has label "x-euc-jp" (inputEncoding) assert_equals: expected "EUC-JP" but got "ISO-8859-1"
+FAIL Name "iso-2022-jp" has label "csiso2022jp" (characterSet) assert_equals: expected "ISO-2022-JP" but got "ISO-8859-1"
+FAIL Name "iso-2022-jp" has label "csiso2022jp" (inputEncoding) assert_equals: expected "ISO-2022-JP" but got "ISO-8859-1"
+FAIL Name "iso-2022-jp" has label "iso-2022-jp" (characterSet) assert_equals: expected "ISO-2022-JP" but got "ISO-8859-1"
+FAIL Name "iso-2022-jp" has label "iso-2022-jp" (inputEncoding) assert_equals: expected "ISO-2022-JP" but got "ISO-8859-1"
+FAIL Name "shift_jis" has label "csshiftjis" (characterSet) assert_equals: expected "Shift_JIS" but got "ISO-8859-1"
+FAIL Name "shift_jis" has label "csshiftjis" (inputEncoding) assert_equals: expected "Shift_JIS" but got "ISO-8859-1"
+FAIL Name "shift_jis" has label "ms_kanji" (characterSet) assert_equals: expected "Shift_JIS" but got "ISO-8859-1"
+FAIL Name "shift_jis" has label "ms_kanji" (inputEncoding) assert_equals: expected "Shift_JIS" but got "ISO-8859-1"
+FAIL Name "shift_jis" has label "shift-jis" (characterSet) assert_equals: expected "Shift_JIS" but got "ISO-8859-1"
+FAIL Name "shift_jis" has label "shift-jis" (inputEncoding) assert_equals: expected "Shift_JIS" but got "ISO-8859-1"
+FAIL Name "shift_jis" has label "shift_jis" (characterSet) assert_equals: expected "Shift_JIS" but got "ISO-8859-1"
+FAIL Name "shift_jis" has label "shift_jis" (inputEncoding) assert_equals: expected "Shift_JIS" but got "ISO-8859-1"
+FAIL Name "shift_jis" has label "sjis" (characterSet) assert_equals: expected "Shift_JIS" but got "ISO-8859-1"
+FAIL Name "shift_jis" has label "sjis" (inputEncoding) assert_equals: expected "Shift_JIS" but got "ISO-8859-1"
+FAIL Name "shift_jis" has label "windows-31j" (characterSet) assert_equals: expected "Shift_JIS" but got "ISO-8859-1"
+FAIL Name "shift_jis" has label "windows-31j" (inputEncoding) assert_equals: expected "Shift_JIS" but got "ISO-8859-1"
+FAIL Name "shift_jis" has label "x-sjis" (characterSet) assert_equals: expected "Shift_JIS" but got "ISO-8859-1"
+FAIL Name "shift_jis" has label "x-sjis" (inputEncoding) assert_equals: expected "Shift_JIS" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "cseuckr" (characterSet) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "cseuckr" (inputEncoding) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "csksc56011987" (characterSet) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "csksc56011987" (inputEncoding) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "euc-kr" (characterSet) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "euc-kr" (inputEncoding) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "iso-ir-149" (characterSet) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "iso-ir-149" (inputEncoding) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "korean" (characterSet) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "korean" (inputEncoding) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "ks_c_5601-1987" (characterSet) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "ks_c_5601-1987" (inputEncoding) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "ks_c_5601-1989" (characterSet) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "ks_c_5601-1989" (inputEncoding) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "ksc5601" (characterSet) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "ksc5601" (inputEncoding) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "ksc_5601" (characterSet) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "ksc_5601" (inputEncoding) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "windows-949" (characterSet) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "euc-kr" has label "windows-949" (inputEncoding) assert_equals: expected "EUC-KR" but got "ISO-8859-1"
+FAIL Name "replacement" has label "csiso2022kr" (characterSet) assert_equals: expected "REPLACEMENT" but got "ISO-8859-1"
+FAIL Name "replacement" has label "csiso2022kr" (inputEncoding) assert_equals: expected "REPLACEMENT" but got "ISO-8859-1"
+FAIL Name "replacement" has label "iso-2022-cn" (characterSet) assert_equals: expected "REPLACEMENT" but got "ISO-8859-1"
+FAIL Name "replacement" has label "iso-2022-cn" (inputEncoding) assert_equals: expected "REPLACEMENT" but got "ISO-8859-1"
+FAIL Name "replacement" has label "iso-2022-cn-ext" (characterSet) assert_equals: expected "REPLACEMENT" but got "ISO-8859-1"
+FAIL Name "replacement" has label "iso-2022-cn-ext" (inputEncoding) assert_equals: expected "REPLACEMENT" but got "ISO-8859-1"
+FAIL Name "replacement" has label "iso-2022-kr" (characterSet) assert_equals: expected "REPLACEMENT" but got "ISO-8859-1"
+FAIL Name "replacement" has label "iso-2022-kr" (inputEncoding) assert_equals: expected "REPLACEMENT" but got "ISO-8859-1"
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcharacterSetnormalizationhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-characterSet-normalization.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-characterSet-normalization.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-characterSet-normalization.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,381 @@
</span><ins>+<!doctype html>
+<title>document.characterSet and inputEncoding normalization tests</title>
+<link rel=author title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<style>iframe { display: none }</style>
+<script>
+"use strict";
+
+// Taken straight from https://encoding.spec.whatwg.org/
+var encodingMap = {
+ "utf-8": [
+ "unicode-1-1-utf-8",
+ "utf-8",
+ "utf8",
+ // As we use <meta>, utf-16 will map to utf-8 per
+ // https://html.spec.whatwg.org/multipage/#documentEncoding
+ "utf-16",
+ "utf-16le",
+ "utf-16be",
+ ],
+ "ibm866": [
+ "866",
+ "cp866",
+ "csibm866",
+ "ibm866",
+ ],
+ "iso-8859-2": [
+ "csisolatin2",
+ "iso-8859-2",
+ "iso-ir-101",
+ "iso8859-2",
+ "iso88592",
+ "iso_8859-2",
+ "iso_8859-2:1987",
+ "l2",
+ "latin2",
+ ],
+ "iso-8859-3": [
+ "csisolatin3",
+ "iso-8859-3",
+ "iso-ir-109",
+ "iso8859-3",
+ "iso88593",
+ "iso_8859-3",
+ "iso_8859-3:1988",
+ "l3",
+ "latin3",
+ ],
+ "iso-8859-4": [
+ "csisolatin4",
+ "iso-8859-4",
+ "iso-ir-110",
+ "iso8859-4",
+ "iso88594",
+ "iso_8859-4",
+ "iso_8859-4:1988",
+ "l4",
+ "latin4",
+ ],
+ "iso-8859-5": [
+ "csisolatincyrillic",
+ "cyrillic",
+ "iso-8859-5",
+ "iso-ir-144",
+ "iso8859-5",
+ "iso88595",
+ "iso_8859-5",
+ "iso_8859-5:1988",
+ ],
+ "iso-8859-6": [
+ "arabic",
+ "asmo-708",
+ "csiso88596e",
+ "csiso88596i",
+ "csisolatinarabic",
+ "ecma-114",
+ "iso-8859-6",
+ "iso-8859-6-e",
+ "iso-8859-6-i",
+ "iso-ir-127",
+ "iso8859-6",
+ "iso88596",
+ "iso_8859-6",
+ "iso_8859-6:1987",
+ ],
+ "iso-8859-7": [
+ "csisolatingreek",
+ "ecma-118",
+ "elot_928",
+ "greek",
+ "greek8",
+ "iso-8859-7",
+ "iso-ir-126",
+ "iso8859-7",
+ "iso88597",
+ "iso_8859-7",
+ "iso_8859-7:1987",
+ "sun_eu_greek",
+ ],
+ "iso-8859-8": [
+ "csiso88598e",
+ "csisolatinhebrew",
+ "hebrew",
+ "iso-8859-8",
+ "iso-8859-8-e",
+ "iso-ir-138",
+ "iso8859-8",
+ "iso88598",
+ "iso_8859-8",
+ "iso_8859-8:1988",
+ "visual",
+ ],
+ "iso-8859-8-i": [
+ "csiso88598i",
+ "iso-8859-8-i",
+ "logical",
+ ],
+ "iso-8859-10": [
+ "csisolatin6",
+ "iso-8859-10",
+ "iso-ir-157",
+ "iso8859-10",
+ "iso885910",
+ "l6",
+ "latin6",
+ ],
+ "iso-8859-13": [
+ "iso-8859-13",
+ "iso8859-13",
+ "iso885913",
+ ],
+ "iso-8859-14": [
+ "iso-8859-14",
+ "iso8859-14",
+ "iso885914",
+ ],
+ "iso-8859-15": [
+ "csisolatin9",
+ "iso-8859-15",
+ "iso8859-15",
+ "iso885915",
+ "iso_8859-15",
+ "l9",
+ ],
+ "iso-8859-16": [
+ "iso-8859-16",
+ ],
+ "koi8-r": [
+ "cskoi8r",
+ "koi",
+ "koi8",
+ "koi8-r",
+ "koi8_r",
+ ],
+ "koi8-u": [
+ "koi8-u",
+ ],
+ "macintosh": [
+ "csmacintosh",
+ "mac",
+ "macintosh",
+ "x-mac-roman",
+ ],
+ "windows-874": [
+ "dos-874",
+ "iso-8859-11",
+ "iso8859-11",
+ "iso885911",
+ "tis-620",
+ "windows-874",
+ ],
+ "windows-1250": [
+ "cp1250",
+ "windows-1250",
+ "x-cp1250",
+ ],
+ "windows-1251": [
+ "cp1251",
+ "windows-1251",
+ "x-cp1251",
+ ],
+ "windows-1252": [
+ "ansi_x3.4-1968",
+ "ascii",
+ "cp1252",
+ "cp819",
+ "csisolatin1",
+ "ibm819",
+ "iso-8859-1",
+ "iso-ir-100",
+ "iso8859-1",
+ "iso88591",
+ "iso_8859-1",
+ "iso_8859-1:1987",
+ "l1",
+ "latin1",
+ "us-ascii",
+ "windows-1252",
+ "x-cp1252",
+ // As we use <meta>, x-user-defined will map to windows-1252 per
+ // https://html.spec.whatwg.org/multipage/#documentEncoding
+ "x-user-defined"
+ ],
+ "windows-1253": [
+ "cp1253",
+ "windows-1253",
+ "x-cp1253",
+ ],
+ "windows-1254": [
+ "cp1254",
+ "csisolatin5",
+ "iso-8859-9",
+ "iso-ir-148",
+ "iso8859-9",
+ "iso88599",
+ "iso_8859-9",
+ "iso_8859-9:1989",
+ "l5",
+ "latin5",
+ "windows-1254",
+ "x-cp1254",
+ ],
+ "windows-1255": [
+ "cp1255",
+ "windows-1255",
+ "x-cp1255",
+ ],
+ "windows-1256": [
+ "cp1256",
+ "windows-1256",
+ "x-cp1256",
+ ],
+ "windows-1257": [
+ "cp1257",
+ "windows-1257",
+ "x-cp1257",
+ ],
+ "windows-1258": [
+ "cp1258",
+ "windows-1258",
+ "x-cp1258",
+ ],
+ "x-mac-cyrillic": [
+ "x-mac-cyrillic",
+ "x-mac-ukrainian",
+ ],
+ "gbk": [
+ "chinese",
+ "csgb2312",
+ "csiso58gb231280",
+ "gb2312",
+ "gb_2312",
+ "gb_2312-80",
+ "gbk",
+ "iso-ir-58",
+ "x-gbk",
+ ],
+ "gb18030": [
+ "gb18030",
+ ],
+ "hz-gb-2312": [
+ "hz-gb-2312",
+ ],
+ "big5": [
+ "big5",
+ "big5-hkscs",
+ "cn-big5",
+ "csbig5",
+ "x-x-big5",
+ ],
+ "euc-jp": [
+ "cseucpkdfmtjapanese",
+ "euc-jp",
+ "x-euc-jp",
+ ],
+ "iso-2022-jp": [
+ "csiso2022jp",
+ "iso-2022-jp",
+ ],
+ "shift_jis": [
+ "csshiftjis",
+ "ms_kanji",
+ "shift-jis",
+ "shift_jis",
+ "sjis",
+ "windows-31j",
+ "x-sjis",
+ ],
+ "euc-kr": [
+ "cseuckr",
+ "csksc56011987",
+ "euc-kr",
+ "iso-ir-149",
+ "korean",
+ "ks_c_5601-1987",
+ "ks_c_5601-1989",
+ "ksc5601",
+ "ksc_5601",
+ "windows-949",
+ ],
+ "replacement": [
+ "csiso2022kr",
+ "iso-2022-cn",
+ "iso-2022-cn-ext",
+ "iso-2022-kr",
+ ],
+};
+
+// Add spaces and mix up case
+Object.keys(encodingMap).forEach(function(name) {
+ var lower = encodingMap[name];
+ var upper = encodingMap[name].map(function(s) { return s.toUpperCase() });
+ var mixed = encodingMap[name].map(function(s) {
+ var ret = "";
+ for (var i = 0; i < s.length; i += 2) {
+ ret += s[i].toUpperCase();
+ if (i + 1 < s.length) {
+ ret += s[i + 1];
+ }
+ }
+ return ret;
+ });
+ var spacey = encodingMap[name].map(function(s) {
+ return " \t\n\f\r" + s + " \t\n\f\r";
+ });
+ encodingMap[name] = [];
+ for (var i = 0; i < lower.length; i++) {
+ encodingMap[name].push(lower[i]);
+ /*
+ if (lower[i] != upper[i]) {
+ encodingMap[name].push(upper[i]);
+ }
+ if (lower[i] != mixed[i] && upper[i] != mixed[i]) {
+ encodingMap[name].push(mixed[i]);
+ }
+ encodingMap[name].push(spacey[i]);
+ */
+ }
+});
+
+function expected_case(encoding_label) {
+ if (encoding_label === 'big5') {
+ return 'Big5';
+ }
+ if (encoding_label === 'shift_jis') {
+ return 'Shift_JIS';
+ }
+ return encoding_label.toUpperCase();
+}
+
+Object.keys(encodingMap).forEach(function(name) {
+ encodingMap[name].forEach(function(label) {
+ var iframe = document.createElement("iframe");
+ var t = async_test("Name " + format_value(name) +
+ " has label " + format_value(label) + " (characterSet)");
+ var t2 = async_test("Name " + format_value(name) +
+ " has label " + format_value(label) + " (inputEncoding)");
+ /*
+ iframe.src = "data:text/html,<!doctype html>" +
+ '<meta charset="' + label + '">';
+ */
+ iframe.src = "encoding.py?label=" + label;
+ iframe.onload = function() {
+ t.step(function() {
+ assert_equals(iframe.contentDocument.characterSet, expected_case(name));
+ });
+ t2.step(function() {
+ assert_equals(iframe.contentDocument.inputEncoding, expected_case(name));
+ });
+ document.body.removeChild(iframe);
+ t.done();
+ t2.done();
+ };
+ document.body.appendChild(iframe);
+ });
+});
+</script>
+<!-- vim: set expandtab tabstop=2 shiftwidth=2: -->
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentconstructorexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-constructor-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-constructor-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-constructor-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+
+FAIL new Document(): interfaces assert_false: Should not be an XMLDocument expected false got true
+PASS new Document(): children
+FAIL new Document(): metadata assert_equals: expected "about:blank" but got ""
+FAIL new Document(): URL parsing assert_equals: expected "http://example.org/?%C3%A4" but got "http://example.org/?ä"
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentconstructorhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-constructor.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-constructor.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-constructor.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,47 @@
</span><ins>+<!doctype html>
+<meta charset=windows-1252>
+<!-- Using windows-1252 to ensure that new Document() doesn't inherit utf-8
+ from the parent document. -->
+<title>Document constructor</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ var doc = new Document();
+ assert_true(doc instanceof Node, "Should be a Node");
+ assert_true(doc instanceof Document, "Should be a Document");
+ assert_false(doc instanceof XMLDocument, "Should not be an XMLDocument");
+ assert_equals(Object.getPrototypeOf(doc), Document.prototype,
+ "Document should be the primary interface");
+}, "new Document(): interfaces")
+
+test(function() {
+ var doc = new Document();
+ assert_equals(doc.firstChild, null, "firstChild");
+ assert_equals(doc.lastChild, null, "lastChild");
+ assert_equals(doc.doctype, null, "doctype");
+ assert_equals(doc.documentElement, null, "documentElement");
+ assert_array_equals(doc.childNodes, [], "childNodes");
+}, "new Document(): children")
+
+test(function() {
+ var doc = new Document();
+ assert_equals(doc.URL, "about:blank");
+ assert_equals(doc.documentURI, "about:blank");
+ assert_equals(doc.compatMode, "CSS1Compat");
+ assert_equals(doc.characterSet, "UTF-8");
+ assert_equals(doc.inputEncoding, "UTF-8");
+ assert_equals(doc.contentType, "application/xml");
+ assert_equals(doc.createElement("DIV").localName, "DIV");
+}, "new Document(): metadata")
+
+test(function() {
+ var doc = new Document();
+ var a = doc.createElement("a");
+ // In UTF-8: 0xC3 0xA4
+ a.href = "http://example.org/?\u00E4";
+ assert_equals(a.href, "http://example.org/?%C3%A4");
+}, "new Document(): URL parsing")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateAttributeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createAttribute-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createAttribute-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createAttribute-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+
+PASS createAttribute("")
+PASS createAttribute("invalid^Name")
+PASS createAttribute("\\")
+PASS createAttribute("'")
+PASS createAttribute("\"")
+PASS createAttribute("0")
+PASS createAttribute("0:a")
+PASS createAttribute("title")
+PASS createAttribute("TITLE")
+PASS createAttribute(null)
+PASS createAttribute(undefined)
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateAttributehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createAttribute.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createAttribute.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createAttribute.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,26 @@
</span><ins>+<!doctype html>
+<meta charset=utf-8>
+<title>Document.createAttribute</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=attributes.js></script>
+<script src=productions.js></script>
+<div id=log>
+<script>
+invalid_names.forEach(function(name) {
+ test(function() {
+ assert_throws("INVALID_CHARACTER_ERR", function() {
+ document.createAttribute(name, "test");
+ });
+ }, "createAttribute(" + format_value(name) + ")");
+});
+
+var tests = ["title", "TITLE", null, undefined];
+tests.forEach(function(name) {
+ test(function() {
+ var attribute = document.createAttribute(name);
+ attr_is(attribute, "", String(name), null, null, String(name));
+ assert_equals(attribute.ownerElement, null);
+ }, "createAttribute(" + format_value(name) + ")");
+});
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateCommentcreateTextNodejs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createComment-createTextNode.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createComment-createTextNode.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createComment-createTextNode.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+function test_create(method, iface, nodeType, nodeName) {
+ ["\u000b", "a -- b", "a-", "-b", null, undefined].forEach(function(value) {
+ test(function() {
+ var c = document[method](value);
+ var expected = String(value);
+ assert_true(c instanceof iface);
+ assert_true(c instanceof CharacterData);
+ assert_true(c instanceof Node);
+ assert_equals(c.ownerDocument, document);
+ assert_equals(c.data, expected, "data");
+ assert_equals(c.nodeValue, expected, "nodeValue");
+ assert_equals(c.textContent, expected, "textContent");
+ assert_equals(c.length, expected.length);
+ assert_equals(c.nodeType, nodeType);
+ assert_equals(c.nodeName, nodeName);
+ assert_equals(c.hasChildNodes(), false);
+ assert_equals(c.childNodes.length, 0);
+ assert_equals(c.firstChild, null);
+ assert_equals(c.lastChild, null);
+ }, method + "(" + format_value(value) + ")");
+ });
+}
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateCommentexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createComment-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createComment-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createComment-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+
+PASS createComment("\v")
+PASS createComment("a -- b")
+PASS createComment("a-")
+PASS createComment("-b")
+PASS createComment(null)
+PASS createComment(undefined)
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateCommenthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createComment.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createComment.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createComment.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Document.createComment</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-createcomment">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-ownerdocument">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-data">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-nodevalue">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-textcontent">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-length">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-nodetype">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-haschildnodes">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-childnodes">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-firstchild">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-lastchild">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="Document-createComment-createTextNode.js"></script>
+<div id="log"></div>
+<script>
+test_create("createComment", Comment, 8, "#comment");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateElementexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElement-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElement-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElement-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,38 @@
</span><ins>+
+PASS Document.createElement
+PASS createElement(undefined)
+FAIL createElement(null) InvalidCharacterError: DOM Exception 5
+PASS createElement("foo")
+PASS createElement("f1oo")
+PASS createElement("foo1")
+PASS createElement("f̀oo")
+PASS createElement("foò")
+PASS createElement(":foo")
+PASS createElement("f:oo")
+PASS createElement("foo:")
+PASS createElement("xml")
+PASS createElement("xmlns")
+PASS createElement("xmlfoo")
+PASS createElement("xml:foo")
+PASS createElement("xmlns:foo")
+PASS createElement("xmlfoo:bar")
+PASS createElement("svg")
+PASS createElement("math")
+PASS createElement("FOO")
+FAIL createElement("marK") assert_equals: expected "marK" but got "mark"
+FAIL createElement("İnput") assert_equals: expected "İnput" but got "i̇nput"
+FAIL createElement("ınput") assert_equals: expected "ıNPUT" but got "INPUT"
+PASS createElement("")
+PASS createElement("1foo")
+PASS createElement("̀foo")
+PASS createElement("}foo")
+PASS createElement("f}oo")
+PASS createElement("foo}")
+PASS createElement("\x{FFFF}foo")
+PASS createElement("f\x{FFFF}oo")
+PASS createElement("foo\x{FFFF}")
+PASS createElement("<foo")
+PASS createElement("foo>")
+PASS createElement("<foo>")
+PASS createElement("f<oo")
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateElementnamespaceexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElement-namespace-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElement-namespace-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElement-namespace-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,48 @@
</span><ins>+
+PASS Created element's namespace in current document
+PASS Created element's namespace in created HTML document
+PASS Created element's namespace in created XML document
+FAIL Created element's namespace in created XHTML document assert_equals: Wrong MIME type -- incorrect server config? expected "application/xml" but got "application/xhtml+xml"
+FAIL Created element's namespace in created SVG document assert_equals: Wrong MIME type -- incorrect server config? expected "application/xml" but got "image/svg+xml"
+PASS Created element's namespace in created MathML document
+PASS Created element's namespace in empty.html
+FAIL Created element's namespace in empty.xhtml assert_equals: Wrong MIME type -- incorrect server config? expected "application/xhtml+xml" but got "text/html"
+FAIL Created element's namespace in empty.xml assert_equals: Wrong MIME type -- incorrect server config? expected "application/xml" but got "text/html"
+FAIL Created element's namespace in empty.svg assert_equals: Wrong MIME type -- incorrect server config? expected "image/svg+xml" but got "text/html"
+PASS Created element's namespace in minimal_html.html
+PASS Created element's namespace in minimal_html.xhtml
+PASS Created element's namespace in minimal_html.xml
+PASS Created element's namespace in minimal_html.svg
+PASS Created element's namespace in xhtml.html
+PASS Created element's namespace in xhtml.xhtml
+PASS Created element's namespace in xhtml.xml
+PASS Created element's namespace in xhtml.svg
+PASS Created element's namespace in svg.html
+PASS Created element's namespace in svg.xhtml
+PASS Created element's namespace in svg.xml
+PASS Created element's namespace in svg.svg
+PASS Created element's namespace in mathml.html
+PASS Created element's namespace in mathml.xhtml
+PASS Created element's namespace in mathml.xml
+PASS Created element's namespace in mathml.svg
+PASS Created element's namespace in bare_xhtml.html
+PASS Created element's namespace in bare_xhtml.xhtml
+PASS Created element's namespace in bare_xhtml.xml
+PASS Created element's namespace in bare_xhtml.svg
+PASS Created element's namespace in bare_svg.html
+PASS Created element's namespace in bare_svg.xhtml
+PASS Created element's namespace in bare_svg.xml
+PASS Created element's namespace in bare_svg.svg
+PASS Created element's namespace in bare_mathml.html
+PASS Created element's namespace in bare_mathml.xhtml
+PASS Created element's namespace in bare_mathml.xml
+PASS Created element's namespace in bare_mathml.svg
+PASS Created element's namespace in xhtml_ns_removed.html
+PASS Created element's namespace in xhtml_ns_removed.xhtml
+PASS Created element's namespace in xhtml_ns_removed.xml
+PASS Created element's namespace in xhtml_ns_removed.svg
+PASS Created element's namespace in xhtml_ns_changed.html
+PASS Created element's namespace in xhtml_ns_changed.xhtml
+PASS Created element's namespace in xhtml_ns_changed.xml
+PASS Created element's namespace in xhtml_ns_changed.svg
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateElementhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElement.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElement.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElement.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,85 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Document.createElement</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-createelement">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-localname">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-tagname">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-prefix">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-namespaceuri">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+function toASCIIUppercase(str) {
+ var diff = "a".charCodeAt(0) - "A".charCodeAt(0);
+ var res = "";
+ for (var i = 0; i < str.length; ++i) {
+ if ("a" <= str[i] && str[i] <= "z") {
+ res += String.fromCharCode(str.charCodeAt(i) - diff);
+ } else {
+ res += str[i];
+ }
+ }
+ return res;
+}
+test(function() {
+ var HTMLNS = "http://www.w3.org/1999/xhtml",
+ valid = [
+ //[input, localName],
+ [undefined, "undefined"],
+ [null, "null"],
+ ["foo", "foo"],
+ ["f1oo", "f1oo"],
+ ["foo1", "foo1"],
+ ["f\u0300oo", "f\u0300oo"],
+ ["foo\u0300", "foo\u0300"],
+ [":foo", ":foo"],
+ ["f:oo", "f:oo"],
+ ["foo:", "foo:"],
+ ["xml", "xml"],
+ ["xmlns", "xmlns"],
+ ["xmlfoo", "xmlfoo"],
+ ["xml:foo", "xml:foo"],
+ ["xmlns:foo", "xmlns:foo"],
+ ["xmlfoo:bar", "xmlfoo:bar"],
+ ["svg", "svg"],
+ ["math", "math"],
+ ["FOO", "foo"],
+ ["mar\u212a", "mar\u212a"],
+ ["\u0130nput", "\u0130nput"],
+ ["\u0131nput", "\u0131nput"]
+ ],
+ invalid = [
+ "",
+ "1foo",
+ "\u0300foo",
+ "}foo",
+ "f}oo",
+ "foo}",
+ "\ufffffoo",
+ "f\uffffoo",
+ "foo\uffff",
+ "<foo",
+ "foo>",
+ "<foo>",
+ "f<oo"
+ ]
+
+ valid.forEach(function(t) {
+ test(function() {
+ var elt = document.createElement(t[0])
+ assert_true(elt instanceof Element)
+ assert_true(elt instanceof Node)
+ assert_equals(elt.localName, t[1])
+ assert_equals(elt.tagName, toASCIIUppercase(t[1]))
+ assert_equals(elt.prefix, null)
+ assert_equals(elt.namespaceURI, HTMLNS)
+ }, "createElement(" + format_value(t[0]) + ")");
+ });
+ invalid.forEach(function(arg) {
+ test(function() {
+ assert_throws("INVALID_CHARACTER_ERR", function() { document.createElement(arg) })
+ }, "createElement(" + format_value(arg) + ")");
+ });
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateElementNSexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElementNS-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElementNS-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElementNS-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,185 @@
</span><ins>+
+PASS Document.createElementNS
+PASS createElementNS test 0: null,undefined,null
+PASS createElementNS test 1: null,"foo",null
+PASS createElementNS test 2: null,"1foo","INVALID_CHARACTER_ERR"
+PASS createElementNS test 3: null,"f1oo",null
+PASS createElementNS test 4: null,"foo1",null
+PASS createElementNS test 5: null,"1foo","INVALID_CHARACTER_ERR"
+PASS createElementNS test 6: null,"̀foo","INVALID_CHARACTER_ERR"
+PASS createElementNS test 7: null,"}foo","INVALID_CHARACTER_ERR"
+PASS createElementNS test 8: null,"f}oo","INVALID_CHARACTER_ERR"
+PASS createElementNS test 9: null,"foo}","INVALID_CHARACTER_ERR"
+PASS createElementNS test 10: null,"\x{FFFF}foo","INVALID_CHARACTER_ERR"
+PASS createElementNS test 11: null,"f\x{FFFF}oo","INVALID_CHARACTER_ERR"
+PASS createElementNS test 12: null,"foo\x{FFFF}","INVALID_CHARACTER_ERR"
+PASS createElementNS test 13: null,"<foo","INVALID_CHARACTER_ERR"
+PASS createElementNS test 14: null,"foo>","INVALID_CHARACTER_ERR"
+PASS createElementNS test 15: null,"<foo>","INVALID_CHARACTER_ERR"
+PASS createElementNS test 16: null,"f<oo","INVALID_CHARACTER_ERR"
+PASS createElementNS test 17: null,"^^","INVALID_CHARACTER_ERR"
+PASS createElementNS test 18: null,":foo","NAMESPACE_ERR"
+PASS createElementNS test 19: null,"f:oo","NAMESPACE_ERR"
+PASS createElementNS test 20: null,"foo:","NAMESPACE_ERR"
+PASS createElementNS test 21: null,":","NAMESPACE_ERR"
+PASS createElementNS test 22: null,"xml",null
+PASS createElementNS test 23: null,"xmlns","NAMESPACE_ERR"
+PASS createElementNS test 24: null,"xmlfoo",null
+PASS createElementNS test 25: null,"xml:foo","NAMESPACE_ERR"
+PASS createElementNS test 26: null,"xmlns:foo","NAMESPACE_ERR"
+PASS createElementNS test 27: null,"xmlfoo:bar","NAMESPACE_ERR"
+PASS createElementNS test 28: null,"null:xml","NAMESPACE_ERR"
+PASS createElementNS test 29: "",":foo","NAMESPACE_ERR"
+PASS createElementNS test 30: "","f:oo","NAMESPACE_ERR"
+PASS createElementNS test 31: "","foo:","NAMESPACE_ERR"
+FAIL createElementNS test 32: undefined,undefined,null assert_equals: expected (object) null but got (string) "undefined"
+FAIL createElementNS test 33: undefined,"foo",null assert_equals: expected (object) null but got (string) "undefined"
+PASS createElementNS test 34: undefined,"1foo","INVALID_CHARACTER_ERR"
+FAIL createElementNS test 35: undefined,"f1oo",null assert_equals: expected (object) null but got (string) "undefined"
+FAIL createElementNS test 36: undefined,"foo1",null assert_equals: expected (object) null but got (string) "undefined"
+PASS createElementNS test 37: undefined,":foo","NAMESPACE_ERR"
+FAIL createElementNS test 38: undefined,"f:oo","NAMESPACE_ERR" assert_throws: function "function () { document.createElementNS(namespace, qualifi..." did not throw
+PASS createElementNS test 39: undefined,"foo:","NAMESPACE_ERR"
+FAIL createElementNS test 40: undefined,"xml",null assert_equals: expected (object) null but got (string) "undefined"
+PASS createElementNS test 41: undefined,"xmlns","NAMESPACE_ERR"
+FAIL createElementNS test 42: undefined,"xmlfoo",null assert_equals: expected (object) null but got (string) "undefined"
+PASS createElementNS test 43: undefined,"xml:foo","NAMESPACE_ERR"
+PASS createElementNS test 44: undefined,"xmlns:foo","NAMESPACE_ERR"
+FAIL createElementNS test 45: undefined,"xmlfoo:bar","NAMESPACE_ERR" assert_throws: function "function () { document.createElementNS(namespace, qualifi..." did not throw
+PASS createElementNS test 46: "http://example.com/","foo",null
+PASS createElementNS test 47: "http://example.com/","1foo","INVALID_CHARACTER_ERR"
+PASS createElementNS test 48: "http://example.com/","f1oo",null
+PASS createElementNS test 49: "http://example.com/","foo1",null
+PASS createElementNS test 50: "http://example.com/",":foo","NAMESPACE_ERR"
+PASS createElementNS test 51: "http://example.com/","f:oo",null
+PASS createElementNS test 52: "http://example.com/","foo:","NAMESPACE_ERR"
+PASS createElementNS test 53: "http://example.com/","_:_",null
+PASS createElementNS test 54: "http://example.com/","_:h0",null
+PASS createElementNS test 55: "http://example.com/","_:test",null
+PASS createElementNS test 56: "http://example.com/","l_:_",null
+PASS createElementNS test 57: "http://example.com/","ns:_0",null
+PASS createElementNS test 58: "http://example.com/","ns:a0",null
+PASS createElementNS test 59: "http://example.com/","ns0:test",null
+PASS createElementNS test 60: "http://example.com/","a.b:c",null
+PASS createElementNS test 61: "http://example.com/","a-b:c",null
+PASS createElementNS test 62: "http://example.com/","a-b:c",null
+PASS createElementNS test 63: "http://example.com/","xml",null
+PASS createElementNS test 64: "http://example.com/","xmlns","NAMESPACE_ERR"
+PASS createElementNS test 65: "http://example.com/","XMLNS",null
+PASS createElementNS test 66: "http://example.com/","xmlfoo",null
+PASS createElementNS test 67: "http://example.com/","xml:foo","NAMESPACE_ERR"
+PASS createElementNS test 68: "http://example.com/","XML:foo",null
+PASS createElementNS test 69: "http://example.com/","xmlns:foo","NAMESPACE_ERR"
+PASS createElementNS test 70: "http://example.com/","XMLNS:foo",null
+PASS createElementNS test 71: "http://example.com/","xmlfoo:bar",null
+PASS createElementNS test 72: "http://example.com/","prefix::local","NAMESPACE_ERR"
+PASS createElementNS test 73: "http://example.com/","namespaceURI:{","INVALID_CHARACTER_ERR"
+PASS createElementNS test 74: "http://example.com/","namespaceURI:}","INVALID_CHARACTER_ERR"
+PASS createElementNS test 75: "http://example.com/","namespaceURI:~","INVALID_CHARACTER_ERR"
+PASS createElementNS test 76: "http://example.com/","namespaceURI:'","INVALID_CHARACTER_ERR"
+PASS createElementNS test 77: "http://example.com/","namespaceURI:!","INVALID_CHARACTER_ERR"
+PASS createElementNS test 78: "http://example.com/","namespaceURI:@","INVALID_CHARACTER_ERR"
+PASS createElementNS test 79: "http://example.com/","namespaceURI:#","INVALID_CHARACTER_ERR"
+PASS createElementNS test 80: "http://example.com/","namespaceURI:$","INVALID_CHARACTER_ERR"
+PASS createElementNS test 81: "http://example.com/","namespaceURI:%","INVALID_CHARACTER_ERR"
+PASS createElementNS test 82: "http://example.com/","namespaceURI:^","INVALID_CHARACTER_ERR"
+PASS createElementNS test 83: "http://example.com/","namespaceURI:&","INVALID_CHARACTER_ERR"
+PASS createElementNS test 84: "http://example.com/","namespaceURI:*","INVALID_CHARACTER_ERR"
+PASS createElementNS test 85: "http://example.com/","namespaceURI:(","INVALID_CHARACTER_ERR"
+PASS createElementNS test 86: "http://example.com/","namespaceURI:)","INVALID_CHARACTER_ERR"
+PASS createElementNS test 87: "http://example.com/","namespaceURI:+","INVALID_CHARACTER_ERR"
+PASS createElementNS test 88: "http://example.com/","namespaceURI:=","INVALID_CHARACTER_ERR"
+PASS createElementNS test 89: "http://example.com/","namespaceURI:[","INVALID_CHARACTER_ERR"
+PASS createElementNS test 90: "http://example.com/","namespaceURI:]","INVALID_CHARACTER_ERR"
+PASS createElementNS test 91: "http://example.com/","namespaceURI:\\","INVALID_CHARACTER_ERR"
+PASS createElementNS test 92: "http://example.com/","namespaceURI:/","INVALID_CHARACTER_ERR"
+PASS createElementNS test 93: "http://example.com/","namespaceURI:;","INVALID_CHARACTER_ERR"
+PASS createElementNS test 94: "http://example.com/","namespaceURI:`","INVALID_CHARACTER_ERR"
+PASS createElementNS test 95: "http://example.com/","namespaceURI:<","INVALID_CHARACTER_ERR"
+PASS createElementNS test 96: "http://example.com/","namespaceURI:>","INVALID_CHARACTER_ERR"
+PASS createElementNS test 97: "http://example.com/","namespaceURI:,","INVALID_CHARACTER_ERR"
+PASS createElementNS test 98: "http://example.com/","namespaceURI:a ","INVALID_CHARACTER_ERR"
+PASS createElementNS test 99: "http://example.com/","namespaceURI:\"","INVALID_CHARACTER_ERR"
+PASS createElementNS test 100: "/","foo",null
+PASS createElementNS test 101: "/","1foo","INVALID_CHARACTER_ERR"
+PASS createElementNS test 102: "/","f1oo",null
+PASS createElementNS test 103: "/","foo1",null
+PASS createElementNS test 104: "/",":foo","NAMESPACE_ERR"
+PASS createElementNS test 105: "/","f:oo",null
+PASS createElementNS test 106: "/","foo:","NAMESPACE_ERR"
+PASS createElementNS test 107: "/","xml",null
+PASS createElementNS test 108: "/","xmlns","NAMESPACE_ERR"
+PASS createElementNS test 109: "/","xmlfoo",null
+PASS createElementNS test 110: "/","xml:foo","NAMESPACE_ERR"
+PASS createElementNS test 111: "/","xmlns:foo","NAMESPACE_ERR"
+PASS createElementNS test 112: "/","xmlfoo:bar",null
+PASS createElementNS test 113: "http://www.w3.org/XML/1998/namespace","foo",null
+PASS createElementNS test 114: "http://www.w3.org/XML/1998/namespace","1foo","INVALID_CHARACTER_ERR"
+PASS createElementNS test 115: "http://www.w3.org/XML/1998/namespace","f1oo",null
+PASS createElementNS test 116: "http://www.w3.org/XML/1998/namespace","foo1",null
+PASS createElementNS test 117: "http://www.w3.org/XML/1998/namespace",":foo","NAMESPACE_ERR"
+PASS createElementNS test 118: "http://www.w3.org/XML/1998/namespace","f:oo",null
+PASS createElementNS test 119: "http://www.w3.org/XML/1998/namespace","foo:","NAMESPACE_ERR"
+PASS createElementNS test 120: "http://www.w3.org/XML/1998/namespace","xml",null
+PASS createElementNS test 121: "http://www.w3.org/XML/1998/namespace","xmlns","NAMESPACE_ERR"
+PASS createElementNS test 122: "http://www.w3.org/XML/1998/namespace","xmlfoo",null
+PASS createElementNS test 123: "http://www.w3.org/XML/1998/namespace","xml:foo",null
+PASS createElementNS test 124: "http://www.w3.org/XML/1998/namespace","xmlns:foo","NAMESPACE_ERR"
+PASS createElementNS test 125: "http://www.w3.org/XML/1998/namespace","xmlfoo:bar",null
+PASS createElementNS test 126: "http://www.w3.org/XML/1998/namespaces","xml:foo","NAMESPACE_ERR"
+PASS createElementNS test 127: "http://www.w3.org/xml/1998/namespace","xml:foo","NAMESPACE_ERR"
+PASS createElementNS test 128: "http://www.w3.org/2000/xmlns/","foo","NAMESPACE_ERR"
+PASS createElementNS test 129: "http://www.w3.org/2000/xmlns/","1foo","INVALID_CHARACTER_ERR"
+PASS createElementNS test 130: "http://www.w3.org/2000/xmlns/","f1oo","NAMESPACE_ERR"
+PASS createElementNS test 131: "http://www.w3.org/2000/xmlns/","foo1","NAMESPACE_ERR"
+PASS createElementNS test 132: "http://www.w3.org/2000/xmlns/",":foo","NAMESPACE_ERR"
+PASS createElementNS test 133: "http://www.w3.org/2000/xmlns/","f:oo","NAMESPACE_ERR"
+PASS createElementNS test 134: "http://www.w3.org/2000/xmlns/","foo:","NAMESPACE_ERR"
+PASS createElementNS test 135: "http://www.w3.org/2000/xmlns/","xml","NAMESPACE_ERR"
+PASS createElementNS test 136: "http://www.w3.org/2000/xmlns/","xmlns",null
+PASS createElementNS test 137: "http://www.w3.org/2000/xmlns/","xmlfoo","NAMESPACE_ERR"
+PASS createElementNS test 138: "http://www.w3.org/2000/xmlns/","xml:foo","NAMESPACE_ERR"
+PASS createElementNS test 139: "http://www.w3.org/2000/xmlns/","xmlns:foo",null
+PASS createElementNS test 140: "http://www.w3.org/2000/xmlns/","xmlfoo:bar","NAMESPACE_ERR"
+PASS createElementNS test 141: "http://www.w3.org/2000/xmlns/","foo:xmlns","NAMESPACE_ERR"
+PASS createElementNS test 142: "foo:","foo",null
+PASS createElementNS test 143: "foo:","1foo","INVALID_CHARACTER_ERR"
+PASS createElementNS test 144: "foo:","f1oo",null
+PASS createElementNS test 145: "foo:","foo1",null
+PASS createElementNS test 146: "foo:",":foo","NAMESPACE_ERR"
+PASS createElementNS test 147: "foo:","f:oo",null
+PASS createElementNS test 148: "foo:","foo:","NAMESPACE_ERR"
+PASS createElementNS test 149: "foo:","xml",null
+PASS createElementNS test 150: "foo:","xmlns","NAMESPACE_ERR"
+PASS createElementNS test 151: "foo:","xmlfoo",null
+PASS createElementNS test 152: "foo:","xml:foo","NAMESPACE_ERR"
+PASS createElementNS test 153: "foo:","xmlns:foo","NAMESPACE_ERR"
+PASS createElementNS test 154: "foo:","xmlfoo:bar",null
+PASS createElementNS test 155: "","","INVALID_CHARACTER_ERR"
+FAIL createElementNS test 156: null,null,null InvalidCharacterError: DOM Exception 5
+PASS createElementNS test 157: null,"","INVALID_CHARACTER_ERR"
+FAIL createElementNS test 158: undefined,null,null InvalidCharacterError: DOM Exception 5
+FAIL createElementNS test 159: undefined,undefined,null assert_equals: expected (object) null but got (string) "undefined"
+PASS createElementNS test 160: undefined,"","INVALID_CHARACTER_ERR"
+FAIL createElementNS test 161: "http://example.com/",null,null InvalidCharacterError: DOM Exception 5
+PASS createElementNS test 162: "http://example.com/","","INVALID_CHARACTER_ERR"
+FAIL createElementNS test 163: "/",null,null InvalidCharacterError: DOM Exception 5
+PASS createElementNS test 164: "/","","INVALID_CHARACTER_ERR"
+FAIL createElementNS test 165: "http://www.w3.org/XML/1998/namespace",null,null InvalidCharacterError: DOM Exception 5
+PASS createElementNS test 166: "http://www.w3.org/XML/1998/namespace","","INVALID_CHARACTER_ERR"
+FAIL createElementNS test 167: "http://www.w3.org/2000/xmlns/",null,"NAMESPACE_ERR" assert_throws: function "function () { document.createElementNS(namespace, qualifi..." threw object "Error: InvalidCharacterError: DOM Exception 5" that is not a DOMException NAMESPACE_ERR: property "code" is equal to 5, expected 14
+PASS createElementNS test 168: "http://www.w3.org/2000/xmlns/","","INVALID_CHARACTER_ERR"
+FAIL createElementNS test 169: "foo:",null,null InvalidCharacterError: DOM Exception 5
+PASS createElementNS test 170: "foo:","","INVALID_CHARACTER_ERR"
+PASS Lower-case HTML element without a prefix
+FAIL Lower-case HTML element with a prefix assert_equals: expected "HTML:SPAN" but got "html:span"
+PASS Lower-case non-HTML element without a prefix
+PASS Lower-case non-HTML element with a prefix
+PASS Upper-case HTML element without a prefix
+FAIL Upper-case HTML element with a prefix assert_equals: expected "HTML:SPAN" but got "html:SPAN"
+PASS Upper-case non-HTML element without a prefix
+PASS Upper-case non-HTML element with a prefix
+PASS null namespace
+FAIL undefined namespace assert_equals: expected (object) null but got (string) "undefined"
+PASS empty string namespace
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateElementNShtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElementNS.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElementNS.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElementNS.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,199 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Document.createElementNS</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-createelementns">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="Document-createElementNS.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ var tests = createElementNS_tests.concat([
+ /* Arrays with three elements:
+ * the namespace argument
+ * the qualifiedName argument
+ * the expected exception, or null if none
+ */
+ ["", "", "INVALID_CHARACTER_ERR"],
+ [null, null, null],
+ [null, "", "INVALID_CHARACTER_ERR"],
+ [undefined, null, null],
+ [undefined, undefined, null],
+ [undefined, "", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", null, null],
+ ["http://example.com/", "", "INVALID_CHARACTER_ERR"],
+ ["/", null, null],
+ ["/", "", "INVALID_CHARACTER_ERR"],
+ ["http://www.w3.org/XML/1998/namespace", null, null],
+ ["http://www.w3.org/XML/1998/namespace", "", "INVALID_CHARACTER_ERR"],
+ ["http://www.w3.org/2000/xmlns/", null, "NAMESPACE_ERR"],
+ ["http://www.w3.org/2000/xmlns/", "", "INVALID_CHARACTER_ERR"],
+ ["foo:", null, null],
+ ["foo:", "", "INVALID_CHARACTER_ERR"],
+ ])
+
+ tests.forEach(function(t, i) {
+ test(function() {
+ var namespace = t[0], qualifiedName = t[1], expected = t[2]
+ if (expected != null) {
+ assert_throws(expected, function() { document.createElementNS(namespace, qualifiedName) })
+ } else {
+ var element = document.createElementNS(namespace, qualifiedName)
+ assert_not_equals(element, null)
+ assert_equals(element.nodeType, Node.ELEMENT_NODE)
+ assert_equals(element.nodeType, element.ELEMENT_NODE)
+ assert_equals(element.nodeValue, null)
+ assert_equals(element.ownerDocument, document)
+ var qualified = String(qualifiedName), names = []
+ if (qualified.indexOf(":") >= 0) {
+ names = qualified.split(":", 2)
+ } else {
+ names = [null, qualified]
+ }
+ assert_equals(element.prefix, names[0])
+ assert_equals(element.localName, names[1])
+ assert_equals(element.tagName, qualified)
+ assert_equals(element.nodeName, qualified)
+ assert_equals(element.namespaceURI, namespace === undefined ? null : namespace)
+ }
+ }, "createElementNS test " + i + ": " + t.map(function(el) { return format_value(el) }))
+ })
+})
+
+test(function() {
+ var HTMLNS = "http://www.w3.org/1999/xhtml";
+ var element = document.createElementNS(HTMLNS, "span");
+ assert_equals(element.namespaceURI, HTMLNS);
+ assert_equals(element.prefix, null);
+ assert_equals(element.localName, "span");
+ assert_equals(element.tagName, "SPAN");
+ assert_true(element instanceof Node, "Should be a Node");
+ assert_true(element instanceof Element, "Should be an Element");
+ assert_true(element instanceof HTMLElement, "Should be an HTMLElement");
+ assert_true(element instanceof HTMLSpanElement, "Should be an HTMLSpanElement");
+}, "Lower-case HTML element without a prefix");
+
+test(function() {
+ var HTMLNS = "http://www.w3.org/1999/xhtml";
+ var element = document.createElementNS(HTMLNS, "html:span");
+ assert_equals(element.namespaceURI, HTMLNS);
+ assert_equals(element.prefix, "html");
+ assert_equals(element.localName, "span");
+ assert_equals(element.tagName, "HTML:SPAN");
+ assert_true(element instanceof Node, "Should be a Node");
+ assert_true(element instanceof Element, "Should be an Element");
+ assert_true(element instanceof HTMLElement, "Should be an HTMLElement");
+ assert_true(element instanceof HTMLSpanElement, "Should be an HTMLSpanElement");
+}, "Lower-case HTML element with a prefix");
+
+test(function() {
+ var element = document.createElementNS("test", "span");
+ assert_equals(element.namespaceURI, "test");
+ assert_equals(element.prefix, null);
+ assert_equals(element.localName, "span");
+ assert_equals(element.tagName, "span");
+ assert_true(element instanceof Node, "Should be a Node");
+ assert_true(element instanceof Element, "Should be an Element");
+ assert_false(element instanceof HTMLElement, "Should not be an HTMLElement");
+ assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
+}, "Lower-case non-HTML element without a prefix");
+
+test(function() {
+ var element = document.createElementNS("test", "html:span");
+ assert_equals(element.namespaceURI, "test");
+ assert_equals(element.prefix, "html");
+ assert_equals(element.localName, "span");
+ assert_equals(element.tagName, "html:span");
+ assert_true(element instanceof Node, "Should be a Node");
+ assert_true(element instanceof Element, "Should be an Element");
+ assert_false(element instanceof HTMLElement, "Should not be an HTMLElement");
+ assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
+}, "Lower-case non-HTML element with a prefix");
+
+test(function() {
+ var HTMLNS = "http://www.w3.org/1999/xhtml";
+ var element = document.createElementNS(HTMLNS, "SPAN");
+ assert_equals(element.namespaceURI, HTMLNS);
+ assert_equals(element.prefix, null);
+ assert_equals(element.localName, "SPAN");
+ assert_equals(element.tagName, "SPAN");
+ assert_true(element instanceof Node, "Should be a Node");
+ assert_true(element instanceof Element, "Should be an Element");
+ assert_true(element instanceof HTMLElement, "Should be an HTMLElement");
+ assert_true(element instanceof HTMLUnknownElement, "Should be an HTMLUnknownElement");
+ assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
+}, "Upper-case HTML element without a prefix");
+
+test(function() {
+ var HTMLNS = "http://www.w3.org/1999/xhtml";
+ var element = document.createElementNS(HTMLNS, "html:SPAN");
+ assert_equals(element.namespaceURI, HTMLNS);
+ assert_equals(element.prefix, "html");
+ assert_equals(element.localName, "SPAN");
+ assert_equals(element.tagName, "HTML:SPAN");
+ assert_true(element instanceof Node, "Should be a Node");
+ assert_true(element instanceof Element, "Should be an Element");
+ assert_true(element instanceof HTMLElement, "Should be an HTMLElement");
+ assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
+}, "Upper-case HTML element with a prefix");
+
+test(function() {
+ var element = document.createElementNS("test", "SPAN");
+ assert_equals(element.namespaceURI, "test");
+ assert_equals(element.prefix, null);
+ assert_equals(element.localName, "SPAN");
+ assert_equals(element.tagName, "SPAN");
+ assert_true(element instanceof Node, "Should be a Node");
+ assert_true(element instanceof Element, "Should be an Element");
+ assert_false(element instanceof HTMLElement, "Should not be an HTMLElement");
+ assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
+}, "Upper-case non-HTML element without a prefix");
+
+test(function() {
+ var element = document.createElementNS("test", "html:SPAN");
+ assert_equals(element.namespaceURI, "test");
+ assert_equals(element.prefix, "html");
+ assert_equals(element.localName, "SPAN");
+ assert_equals(element.tagName, "html:SPAN");
+ assert_true(element instanceof Node, "Should be a Node");
+ assert_true(element instanceof Element, "Should be an Element");
+ assert_false(element instanceof HTMLElement, "Should not be an HTMLElement");
+ assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
+}, "Upper-case non-HTML element with a prefix");
+
+test(function() {
+ var element = document.createElementNS(null, "span");
+ assert_equals(element.namespaceURI, null);
+ assert_equals(element.prefix, null);
+ assert_equals(element.localName, "span");
+ assert_equals(element.tagName, "span");
+ assert_true(element instanceof Node, "Should be a Node");
+ assert_true(element instanceof Element, "Should be an Element");
+ assert_false(element instanceof HTMLElement, "Should not be an HTMLElement");
+ assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
+}, "null namespace");
+
+test(function() {
+ var element = document.createElementNS(undefined, "span");
+ assert_equals(element.namespaceURI, null);
+ assert_equals(element.prefix, null);
+ assert_equals(element.localName, "span");
+ assert_equals(element.tagName, "span");
+ assert_true(element instanceof Node, "Should be a Node");
+ assert_true(element instanceof Element, "Should be an Element");
+ assert_false(element instanceof HTMLElement, "Should not be an HTMLElement");
+ assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
+}, "undefined namespace");
+
+test(function() {
+ var element = document.createElementNS("", "span");
+ assert_equals(element.namespaceURI, null);
+ assert_equals(element.prefix, null);
+ assert_equals(element.localName, "span");
+ assert_equals(element.tagName, "span");
+ assert_true(element instanceof Node, "Should be a Node");
+ assert_true(element instanceof Element, "Should be an Element");
+ assert_false(element instanceof HTMLElement, "Should not be an HTMLElement");
+ assert_false(element instanceof HTMLSpanElement, "Should not be an HTMLSpanElement");
+}, "empty string namespace");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateElementNSjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElementNS.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElementNS.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createElementNS.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,162 @@
</span><ins>+var createElementNS_tests = [
+ /* Arrays with three elements:
+ * the namespace argument
+ * the qualifiedName argument
+ * the expected exception, or null if none
+ */
+ [null, undefined, null],
+ [null, "foo", null],
+ [null, "1foo", "INVALID_CHARACTER_ERR"],
+ [null, "f1oo", null],
+ [null, "foo1", null],
+ [null, "1foo", "INVALID_CHARACTER_ERR"],
+ [null, "\u0300foo", "INVALID_CHARACTER_ERR"],
+ [null, "}foo", "INVALID_CHARACTER_ERR"],
+ [null, "f}oo", "INVALID_CHARACTER_ERR"],
+ [null, "foo}", "INVALID_CHARACTER_ERR"],
+ [null, "\uFFFFfoo", "INVALID_CHARACTER_ERR"],
+ [null, "f\uFFFFoo", "INVALID_CHARACTER_ERR"],
+ [null, "foo\uFFFF", "INVALID_CHARACTER_ERR"],
+ [null, "<foo", "INVALID_CHARACTER_ERR"],
+ [null, "foo>", "INVALID_CHARACTER_ERR"],
+ [null, "<foo>", "INVALID_CHARACTER_ERR"],
+ [null, "f<oo", "INVALID_CHARACTER_ERR"],
+ [null, "^^", "INVALID_CHARACTER_ERR"],
+ [null, ":foo", "NAMESPACE_ERR"],
+ [null, "f:oo", "NAMESPACE_ERR"],
+ [null, "foo:", "NAMESPACE_ERR"],
+ [null, ":", "NAMESPACE_ERR"],
+ [null, "xml", null],
+ [null, "xmlns", "NAMESPACE_ERR"],
+ [null, "xmlfoo", null],
+ [null, "xml:foo", "NAMESPACE_ERR"],
+ [null, "xmlns:foo", "NAMESPACE_ERR"],
+ [null, "xmlfoo:bar", "NAMESPACE_ERR"],
+ [null, "null:xml", "NAMESPACE_ERR"],
+ ["", ":foo", "NAMESPACE_ERR"],
+ ["", "f:oo", "NAMESPACE_ERR"],
+ ["", "foo:", "NAMESPACE_ERR"],
+ [undefined, undefined, null],
+ [undefined, "foo", null],
+ [undefined, "1foo", "INVALID_CHARACTER_ERR"],
+ [undefined, "f1oo", null],
+ [undefined, "foo1", null],
+ [undefined, ":foo", "NAMESPACE_ERR"],
+ [undefined, "f:oo", "NAMESPACE_ERR"],
+ [undefined, "foo:", "NAMESPACE_ERR"],
+ [undefined, "xml", null],
+ [undefined, "xmlns", "NAMESPACE_ERR"],
+ [undefined, "xmlfoo", null],
+ [undefined, "xml:foo", "NAMESPACE_ERR"],
+ [undefined, "xmlns:foo", "NAMESPACE_ERR"],
+ [undefined, "xmlfoo:bar", "NAMESPACE_ERR"],
+ ["http://example.com/", "foo", null],
+ ["http://example.com/", "1foo", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "f1oo", null],
+ ["http://example.com/", "foo1", null],
+ ["http://example.com/", ":foo", "NAMESPACE_ERR"],
+ ["http://example.com/", "f:oo", null],
+ ["http://example.com/", "foo:", "NAMESPACE_ERR"],
+ ["http://example.com/", "_:_", null],
+ ["http://example.com/", "_:h0", null],
+ ["http://example.com/", "_:test", null],
+ ["http://example.com/", "l_:_", null],
+ ["http://example.com/", "ns:_0", null],
+ ["http://example.com/", "ns:a0", null],
+ ["http://example.com/", "ns0:test", null],
+ ["http://example.com/", "a.b:c", null],
+ ["http://example.com/", "a-b:c", null],
+ ["http://example.com/", "a-b:c", null],
+ ["http://example.com/", "xml", null],
+ ["http://example.com/", "xmlns", "NAMESPACE_ERR"],
+ ["http://example.com/", "XMLNS", null],
+ ["http://example.com/", "xmlfoo", null],
+ ["http://example.com/", "xml:foo", "NAMESPACE_ERR"],
+ ["http://example.com/", "XML:foo", null],
+ ["http://example.com/", "xmlns:foo", "NAMESPACE_ERR"],
+ ["http://example.com/", "XMLNS:foo", null],
+ ["http://example.com/", "xmlfoo:bar", null],
+ ["http://example.com/", "prefix::local", "NAMESPACE_ERR"],
+ ["http://example.com/", "namespaceURI:{", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:}", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:~", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:'", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:!", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:@", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:#", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:$", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:%", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:^", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:&", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:*", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:(", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:)", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:+", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:=", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:[", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:]", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:\\", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:/", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:;", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:`", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:<", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:>", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:,", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:a ", "INVALID_CHARACTER_ERR"],
+ ["http://example.com/", "namespaceURI:\"", "INVALID_CHARACTER_ERR"],
+ ["/", "foo", null],
+ ["/", "1foo", "INVALID_CHARACTER_ERR"],
+ ["/", "f1oo", null],
+ ["/", "foo1", null],
+ ["/", ":foo", "NAMESPACE_ERR"],
+ ["/", "f:oo", null],
+ ["/", "foo:", "NAMESPACE_ERR"],
+ ["/", "xml", null],
+ ["/", "xmlns", "NAMESPACE_ERR"],
+ ["/", "xmlfoo", null],
+ ["/", "xml:foo", "NAMESPACE_ERR"],
+ ["/", "xmlns:foo", "NAMESPACE_ERR"],
+ ["/", "xmlfoo:bar", null],
+ ["http://www.w3.org/XML/1998/namespace", "foo", null],
+ ["http://www.w3.org/XML/1998/namespace", "1foo", "INVALID_CHARACTER_ERR"],
+ ["http://www.w3.org/XML/1998/namespace", "f1oo", null],
+ ["http://www.w3.org/XML/1998/namespace", "foo1", null],
+ ["http://www.w3.org/XML/1998/namespace", ":foo", "NAMESPACE_ERR"],
+ ["http://www.w3.org/XML/1998/namespace", "f:oo", null],
+ ["http://www.w3.org/XML/1998/namespace", "foo:", "NAMESPACE_ERR"],
+ ["http://www.w3.org/XML/1998/namespace", "xml", null],
+ ["http://www.w3.org/XML/1998/namespace", "xmlns", "NAMESPACE_ERR"],
+ ["http://www.w3.org/XML/1998/namespace", "xmlfoo", null],
+ ["http://www.w3.org/XML/1998/namespace", "xml:foo", null],
+ ["http://www.w3.org/XML/1998/namespace", "xmlns:foo", "NAMESPACE_ERR"],
+ ["http://www.w3.org/XML/1998/namespace", "xmlfoo:bar", null],
+ ["http://www.w3.org/XML/1998/namespaces", "xml:foo", "NAMESPACE_ERR"],
+ ["http://www.w3.org/xml/1998/namespace", "xml:foo", "NAMESPACE_ERR"],
+ ["http://www.w3.org/2000/xmlns/", "foo", "NAMESPACE_ERR"],
+ ["http://www.w3.org/2000/xmlns/", "1foo", "INVALID_CHARACTER_ERR"],
+ ["http://www.w3.org/2000/xmlns/", "f1oo", "NAMESPACE_ERR"],
+ ["http://www.w3.org/2000/xmlns/", "foo1", "NAMESPACE_ERR"],
+ ["http://www.w3.org/2000/xmlns/", ":foo", "NAMESPACE_ERR"],
+ ["http://www.w3.org/2000/xmlns/", "f:oo", "NAMESPACE_ERR"],
+ ["http://www.w3.org/2000/xmlns/", "foo:", "NAMESPACE_ERR"],
+ ["http://www.w3.org/2000/xmlns/", "xml", "NAMESPACE_ERR"],
+ ["http://www.w3.org/2000/xmlns/", "xmlns", null],
+ ["http://www.w3.org/2000/xmlns/", "xmlfoo", "NAMESPACE_ERR"],
+ ["http://www.w3.org/2000/xmlns/", "xml:foo", "NAMESPACE_ERR"],
+ ["http://www.w3.org/2000/xmlns/", "xmlns:foo", null],
+ ["http://www.w3.org/2000/xmlns/", "xmlfoo:bar", "NAMESPACE_ERR"],
+ ["http://www.w3.org/2000/xmlns/", "foo:xmlns", "NAMESPACE_ERR"],
+ ["foo:", "foo", null],
+ ["foo:", "1foo", "INVALID_CHARACTER_ERR"],
+ ["foo:", "f1oo", null],
+ ["foo:", "foo1", null],
+ ["foo:", ":foo", "NAMESPACE_ERR"],
+ ["foo:", "f:oo", null],
+ ["foo:", "foo:", "NAMESPACE_ERR"],
+ ["foo:", "xml", null],
+ ["foo:", "xmlns", "NAMESPACE_ERR"],
+ ["foo:", "xmlfoo", null],
+ ["foo:", "xml:foo", "NAMESPACE_ERR"],
+ ["foo:", "xmlns:foo", "NAMESPACE_ERR"],
+ ["foo:", "xmlfoo:bar", null],
+]
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateEventexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createEvent-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createEvent-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createEvent-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,75 @@
</span><ins>+
+PASS CustomEvent should be an alias for CustomEvent.
+FAIL createEvent('CustomEvent') should be initialized correctly. assert_equals: isTrusted should be initialized to false expected (boolean) false but got (undefined) undefined
+FAIL customevent should be an alias for CustomEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('customevent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL CUSTOMEVENT should be an alias for CustomEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('CUSTOMEVENT') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+PASS Event should be an alias for Event.
+FAIL createEvent('Event') should be initialized correctly. assert_equals: isTrusted should be initialized to false expected (boolean) false but got (undefined) undefined
+FAIL event should be an alias for Event. NotSupportedError: DOM Exception 9
+FAIL createEvent('event') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL EVENT should be an alias for Event. NotSupportedError: DOM Exception 9
+FAIL createEvent('EVENT') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+PASS Events should be an alias for Event.
+FAIL createEvent('Events') should be initialized correctly. assert_equals: isTrusted should be initialized to false expected (boolean) false but got (undefined) undefined
+FAIL events should be an alias for Event. NotSupportedError: DOM Exception 9
+FAIL createEvent('events') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL EVENTS should be an alias for Event. NotSupportedError: DOM Exception 9
+FAIL createEvent('EVENTS') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+PASS HTMLEvents should be an alias for Event.
+FAIL createEvent('HTMLEvents') should be initialized correctly. assert_equals: isTrusted should be initialized to false expected (boolean) false but got (undefined) undefined
+FAIL htmlevents should be an alias for Event. NotSupportedError: DOM Exception 9
+FAIL createEvent('htmlevents') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL HTMLEVENTS should be an alias for Event. NotSupportedError: DOM Exception 9
+FAIL createEvent('HTMLEVENTS') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+PASS KeyboardEvent should be an alias for KeyboardEvent.
+FAIL createEvent('KeyboardEvent') should be initialized correctly. assert_equals: isTrusted should be initialized to false expected (boolean) false but got (undefined) undefined
+FAIL keyboardevent should be an alias for KeyboardEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('keyboardevent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL KEYBOARDEVENT should be an alias for KeyboardEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('KEYBOARDEVENT') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL KeyEvents should be an alias for KeyboardEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('KeyEvents') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL keyevents should be an alias for KeyboardEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('keyevents') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL KEYEVENTS should be an alias for KeyboardEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('KEYEVENTS') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+PASS MessageEvent should be an alias for MessageEvent.
+FAIL createEvent('MessageEvent') should be initialized correctly. assert_equals: isTrusted should be initialized to false expected (boolean) false but got (undefined) undefined
+FAIL messageevent should be an alias for MessageEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('messageevent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL MESSAGEEVENT should be an alias for MessageEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('MESSAGEEVENT') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+PASS MouseEvent should be an alias for MouseEvent.
+FAIL createEvent('MouseEvent') should be initialized correctly. assert_equals: isTrusted should be initialized to false expected (boolean) false but got (undefined) undefined
+FAIL mouseevent should be an alias for MouseEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('mouseevent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL MOUSEEVENT should be an alias for MouseEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('MOUSEEVENT') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+PASS MouseEvents should be an alias for MouseEvent.
+FAIL createEvent('MouseEvents') should be initialized correctly. assert_equals: isTrusted should be initialized to false expected (boolean) false but got (undefined) undefined
+FAIL mouseevents should be an alias for MouseEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('mouseevents') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL MOUSEEVENTS should be an alias for MouseEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('MOUSEEVENTS') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL TouchEvent should be an alias for TouchEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('TouchEvent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL touchevent should be an alias for TouchEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('touchevent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL TOUCHEVENT should be an alias for TouchEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('TOUCHEVENT') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+PASS UIEvent should be an alias for UIEvent.
+FAIL createEvent('UIEvent') should be initialized correctly. assert_equals: isTrusted should be initialized to false expected (boolean) false but got (undefined) undefined
+FAIL uievent should be an alias for UIEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('uievent') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL UIEVENT should be an alias for UIEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('UIEVENT') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+PASS UIEvents should be an alias for UIEvent.
+FAIL createEvent('UIEvents') should be initialized correctly. assert_equals: isTrusted should be initialized to false expected (boolean) false but got (undefined) undefined
+FAIL uievents should be an alias for UIEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('uievents') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+FAIL UIEVENTS should be an alias for UIEvent. NotSupportedError: DOM Exception 9
+FAIL createEvent('UIEVENTS') should be initialized correctly. undefined is not an object (evaluating 'ev.type')
+PASS Should throw NOT_SUPPORTED_ERR for unrecognized arguments
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateEventhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createEvent.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createEvent.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createEvent.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,55 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Document.createEvent</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-createevent">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="Document-createEvent.js"></script>
+<div id="log"></div>
+<script>
+function testAlias(arg, iface) {
+ var ev;
+ test(function() {
+ ev = document.createEvent(arg);
+ assert_true(ev instanceof window[iface]);
+ assert_true(ev instanceof Event);
+ }, arg + " should be an alias for " + iface + ".");
+ test(function() {
+ assert_equals(ev.type, "",
+ "type should be initialized to the empty string");
+ assert_equals(ev.target, null,
+ "target should be initialized to null");
+ assert_equals(ev.currentTarget, null,
+ "currentTarget should be initialized to null");
+ assert_equals(ev.eventPhase, 0,
+ "eventPhase should be initialized to NONE (0)");
+ assert_equals(ev.bubbles, false,
+ "bubbles should be initialized to false");
+ assert_equals(ev.cancelable, false,
+ "cancelable should be initialized to false");
+ assert_equals(ev.defaultPrevented, false,
+ "defaultPrevented should be initialized to false");
+ assert_equals(ev.isTrusted, false,
+ "isTrusted should be initialized to false");
+ }, "createEvent('" + arg + "') should be initialized correctly.");
+}
+aliases.forEach(function(alias) {
+ testAlias(alias[0], alias[1]);
+ testAlias(alias[0].toLowerCase(), alias[1]);
+ testAlias(alias[0].toUpperCase(), alias[1]);
+});
+
+test(function() {
+ assert_throws("NOT_SUPPORTED_ERR", function() {
+ var evt = document.createEvent("foo");
+ });
+ assert_throws("NOT_SUPPORTED_ERR", function() {
+ // 'LATIN CAPITAL LETTER I WITH DOT ABOVE' (U+0130)
+ var evt = document.createEvent("U\u0130Event");
+ });
+ assert_throws("NOT_SUPPORTED_ERR", function() {
+ // 'LATIN SMALL LETTER DOTLESS I' (U+0131)
+ var evt = document.createEvent("U\u0131Event");
+ });
+}, "Should throw NOT_SUPPORTED_ERR for unrecognized arguments");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateEventjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createEvent.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createEvent.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createEvent.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+var aliases = [
+ ["CustomEvent", "CustomEvent"],
+ ["Event", "Event"],
+ ["Events", "Event"],
+ ["HTMLEvents", "Event"],
+ ["KeyboardEvent", "KeyboardEvent"],
+ ["KeyEvents", "KeyboardEvent"],
+ ["MessageEvent", "MessageEvent"],
+ ["MouseEvent", "MouseEvent"],
+ ["MouseEvents", "MouseEvent"],
+ ["TouchEvent", "TouchEvent"],
+ ["UIEvent", "UIEvent"],
+ ["UIEvents", "UIEvent"]
+];
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateProcessingInstructionexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+
+PASS Document.createProcessingInstruction in HTML documents
+FAIL Should throw an INVALID_CHARACTER_ERR for target "A" and data "?>". assert_throws: function "function () {
+ document.createProcessingInstructio..." threw object "Error: NotSupportedError: DOM Exception 9" that is not a DOMException INVALID_CHARACTER_ERR: property "code" is equal to 9, expected 5
+PASS Should throw an INVALID_CHARACTER_ERR for target "·A" and data "x".
+PASS Should throw an INVALID_CHARACTER_ERR for target "×A" and data "x".
+PASS Should throw an INVALID_CHARACTER_ERR for target "A×" and data "x".
+PASS Should throw an INVALID_CHARACTER_ERR for target "\\A" and data "x".
+PASS Should throw an INVALID_CHARACTER_ERR for target "\f" and data "x".
+PASS Should throw an INVALID_CHARACTER_ERR for target 0 and data "x".
+PASS Should throw an INVALID_CHARACTER_ERR for target "0" and data "x".
+FAIL Should get a ProcessingInstruction for target "xml:fail" and data "x". NotSupportedError: DOM Exception 9
+FAIL Should get a ProcessingInstruction for target "A·A" and data "x". NotSupportedError: DOM Exception 9
+FAIL Should get a ProcessingInstruction for target "a0" and data "x". NotSupportedError: DOM Exception 9
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateProcessingInstructionxhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+
+PASS Document.createProcessingInstruction in XML documents
+FAIL Should throw an INVALID_CHARACTER_ERR for target "A" and data "?>". assert_throws: function "function () {
+ document.createProcessingInstructio..." did not throw
+PASS Should throw an INVALID_CHARACTER_ERR for target "·A" and data "x".
+PASS Should throw an INVALID_CHARACTER_ERR for target "×A" and data "x".
+PASS Should throw an INVALID_CHARACTER_ERR for target "A×" and data "x".
+PASS Should throw an INVALID_CHARACTER_ERR for target "\\A" and data "x".
+PASS Should throw an INVALID_CHARACTER_ERR for target "\f" and data "x".
+PASS Should throw an INVALID_CHARACTER_ERR for target 0 and data "x".
+PASS Should throw an INVALID_CHARACTER_ERR for target "0" and data "x".
+PASS Should get a ProcessingInstruction for target "xml:fail" and data "x".
+PASS Should get a ProcessingInstruction for target "A·A" and data "x".
+PASS Should get a ProcessingInstruction for target "a0" and data "x".
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateProcessingInstructionxhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Document.createProcessingInstruction in XML documents</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-document-createprocessinginstruction"/>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-processinginstruction-target"/>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-characterdata-data"/>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-node-ownerdocument"/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id="log"/>
+<script src="Document-createProcessingInstruction.js"/>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateProcessingInstructionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Document.createProcessingInstruction in HTML documents</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-createprocessinginstruction">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-processinginstruction-target">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-data">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-ownerdocument">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script src="Document-createProcessingInstruction.js"></script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateProcessingInstructionjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,39 @@
</span><ins>+test(function() {
+ var invalid = [
+ ["A", "?>"],
+ ["\u00B7A", "x"],
+ ["\u00D7A", "x"],
+ ["A\u00D7", "x"],
+ ["\\A", "x"],
+ ["\f", "x"],
+ [0, "x"],
+ ["0", "x"]
+ ],
+ valid = [
+ ["xml:fail", "x"],
+ ["A\u00B7A", "x"],
+ ["a0", "x"]
+ ]
+
+ for (var i = 0, il = invalid.length; i < il; i++) {
+ test(function() {
+ assert_throws("INVALID_CHARACTER_ERR", function() {
+ document.createProcessingInstruction(invalid[i][0], invalid[i][1])
+ })
+ }, "Should throw an INVALID_CHARACTER_ERR for target " +
+ format_value(invalid[i][0]) + " and data " +
+ format_value(invalid[i][1]) + ".")
+ }
+ for (var i = 0, il = valid.length; i < il; ++i) {
+ test(function() {
+ var pi = document.createProcessingInstruction(valid[i][0], valid[i][1]);
+ assert_equals(pi.target, valid[i][0]);
+ assert_equals(pi.data, valid[i][1]);
+ assert_equals(pi.ownerDocument, document);
+ assert_true(pi instanceof ProcessingInstruction);
+ assert_true(pi instanceof Node);
+ }, "Should get a ProcessingInstruction for target " +
+ format_value(valid[i][0]) + " and data " +
+ format_value(valid[i][1]) + ".")
+ }
+})
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateTextNodeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createTextNode-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createTextNode-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createTextNode-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+
+PASS createTextNode("\v")
+PASS createTextNode("a -- b")
+PASS createTextNode("a-")
+PASS createTextNode("-b")
+PASS createTextNode(null)
+PASS createTextNode(undefined)
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateTextNodehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createTextNode.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createTextNode.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createTextNode.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Document.createTextNode</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-createtextnode">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-ownerdocument">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-data">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-nodevalue">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-textcontent">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-characterdata-length">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-nodetype">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-haschildnodes">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-childnodes">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-firstchild">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-lastchild">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="Document-createComment-createTextNode.js"></script>
+<div id="log"></div>
+<script>
+test_create("createTextNode", Text, 3, "#text");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateTreeWalkerexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createTreeWalker-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createTreeWalker-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createTreeWalker-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+
+PASS Required arguments to createTreeWalker should be required.
+PASS Optional arguments to createTreeWalker should be optional (1 passed).
+PASS Optional arguments to createTreeWalker should be optional (2 passed).
+PASS Optional arguments to createTreeWalker should be optional (3 passed, null).
+FAIL Optional arguments to createTreeWalker should be optional (3 passed, function). assert_equals: expected (function) function "function () {}" but got (object) object "[object NodeFilter]"
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentcreateTreeWalkerhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createTreeWalker.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createTreeWalker.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-createTreeWalker.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,42 @@
</span><ins>+<!doctype html>
+<meta charset=utf-8>
+<title>Document.createTreeWalker</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<script>
+test(function() {
+ assert_throws(new TypeError(), function() {
+ document.createTreeWalker();
+ });
+}, "Required arguments to createTreeWalker should be required.");
+test(function() {
+ var tw = document.createTreeWalker(document.body);
+ assert_equals(tw.root, document.body);
+ assert_equals(tw.currentNode, document.body);
+ assert_equals(tw.whatToShow, 0xFFFFFFFF);
+ assert_equals(tw.filter, null);
+}, "Optional arguments to createTreeWalker should be optional (1 passed).");
+test(function() {
+ var tw = document.createTreeWalker(document.body, 42);
+ assert_equals(tw.root, document.body);
+ assert_equals(tw.currentNode, document.body);
+ assert_equals(tw.whatToShow, 42);
+ assert_equals(tw.filter, null);
+}, "Optional arguments to createTreeWalker should be optional (2 passed).");
+test(function() {
+ var tw = document.createTreeWalker(document.body, 42, null);
+ assert_equals(tw.root, document.body);
+ assert_equals(tw.currentNode, document.body);
+ assert_equals(tw.whatToShow, 42);
+ assert_equals(tw.filter, null);
+}, "Optional arguments to createTreeWalker should be optional (3 passed, null).");
+test(function() {
+ var fn = function() {};
+ var tw = document.createTreeWalker(document.body, 42, fn);
+ assert_equals(tw.root, document.body);
+ assert_equals(tw.currentNode, document.body);
+ assert_equals(tw.whatToShow, 42);
+ assert_equals(tw.filter, fn);
+}, "Optional arguments to createTreeWalker should be optional (3 passed, function).");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentdoctypeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-doctype-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-doctype-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-doctype-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+
+PASS Window document with doctype
+PASS new Document()
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentdoctypehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-doctype.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-doctype.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-doctype.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+<!-- comment -->
+<!doctype html>
+<meta charset=utf-8>
+<title>Document.doctype</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-doctype">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ assert_true(document.doctype instanceof DocumentType,
+ "Doctype should be a DocumentType");
+ assert_equals(document.doctype, document.childNodes[1]);
+}, "Window document with doctype");
+
+test(function() {
+ var newdoc = new Document();
+ newdoc.appendChild(newdoc.createElement("html"));
+ assert_equals(newdoc.doctype, null);
+}, "new Document()");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentgetElementByIdexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementById-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementById-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementById-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+
+PASS Calling document.getElementById with an empty string argument.
+PASS Calling document.getElementById with a null argument.
+PASS Calling document.getElementById with an undefined argument.
+PASS on static page
+PASS Document.getElementById with a script-inserted element
+PASS update `id` attribute via setAttribute/removeAttribute
+PASS Ensure that the id attribute only affects elements present in a document
+PASS in tree order, within the context object's tree
+PASS Modern browsers optimize this method with using internal id cache. This test checks that their optimization should effect only append to `Document`, not append to `Node`.
+PASS changing attribute's value via `Attr` gotten from `Element.attribute`.
+PASS add id attribute via innerHTML
+PASS remove id attribute via innerHTML
+PASS add id attribute via outerHTML
+PASS remove id attribute via outerHTML
+PASS update `id` attribute via element.id
+PASS where insertion order and tree order don't match
+PASS Inserting an id by inserting its parent node
+PASS Document.getElementById must not return nodes not present in document
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentgetElementByIdhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementById.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementById.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementById.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,350 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Document.getElementById</title>
+<link rel="author" title="Tetsuharu OHZEKI" href="mailto:saneyuki.snyk@gmail.com">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-getelementbyid">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+ <div id="log"></div>
+
+ <!-- test 0 -->
+ <div id=""></div>
+
+ <!-- test 1 -->
+ <div id="test1"></div>
+
+ <!-- test 5 -->
+ <div id="test5" data-name="1st">
+ <p id="test5" data-name="2nd">P</p>
+ <input id="test5" type="submit" value="Submit" data-name="3rd">
+ </div>
+
+ <!-- test 15 -->
+ <div id="outer">
+ <div id="middle">
+ <div id="inner"></div>
+ </div>
+ </div>
+
+<script>
+ var gBody = document.getElementsByTagName("body")[0];
+
+ test(function() {
+ assert_equals(document.getElementById(""), null);
+ }, "Calling document.getElementById with an empty string argument.");
+
+ test(function() {
+ var element = document.createElement("div");
+ element.setAttribute("id", "null");
+ document.body.appendChild(element);
+ this.add_cleanup(function() { document.body.removeChild(element) });
+ assert_equals(document.getElementById(null), element);
+ }, "Calling document.getElementById with a null argument.");
+
+ test(function() {
+ var element = document.createElement("div");
+ element.setAttribute("id", "undefined");
+ document.body.appendChild(element);
+ this.add_cleanup(function() { document.body.removeChild(element) });
+ assert_equals(document.getElementById(undefined), element);
+ }, "Calling document.getElementById with an undefined argument.");
+
+
+ test(function() {
+ var bar = document.getElementById("test1");
+ assert_not_equals(bar, null, "should not be null");
+ assert_equals(bar.tagName, "DIV", "should have expected tag name.");
+ assert_true(bar instanceof HTMLDivElement, "should be a valid Element instance");
+ }, "on static page");
+
+
+ test(function() {
+ var TEST_ID = "test2";
+
+ var test = document.createElement("div");
+ test.setAttribute("id", TEST_ID);
+ gBody.appendChild(test);
+
+ // test: appended element
+ var result = document.getElementById(TEST_ID);
+ assert_not_equals(result, null, "should not be null.");
+ assert_equals(result.tagName, "DIV", "should have appended element's tag name");
+ assert_true(result instanceof HTMLDivElement, "should be a valid Element instance");
+
+ // test: removed element
+ gBody.removeChild(test);
+ var removed = document.getElementById(TEST_ID);
+ // `document.getElementById()` returns `null` if there is none.
+ // https://dom.spec.whatwg.org/#dom-nonelementparentnode-getelementbyid
+ assert_equals(removed, null, "should not get removed element.");
+ }, "Document.getElementById with a script-inserted element");
+
+
+ test(function() {
+ // setup fixtures.
+ var TEST_ID = "test3";
+ var test = document.createElement("div");
+ test.setAttribute("id", TEST_ID);
+ gBody.appendChild(test);
+
+ // update id
+ var UPDATED_ID = "test3-updated";
+ test.setAttribute("id", UPDATED_ID);
+ var e = document.getElementById(UPDATED_ID);
+ assert_equals(e, test, "should get the element with id.");
+
+ var old = document.getElementById(TEST_ID);
+ assert_equals(old, null, "shouldn't get the element by the old id.");
+
+ // remove id.
+ test.removeAttribute("id");
+ var e2 = document.getElementById(UPDATED_ID);
+ assert_equals(e2, null, "should return null when the passed id is none in document.");
+ }, "update `id` attribute via setAttribute/removeAttribute");
+
+
+ test(function() {
+ var TEST_ID = "test4-should-not-exist";
+
+ var e = document.createElement('div');
+ e.setAttribute("id", TEST_ID);
+
+ assert_equals(document.getElementById(TEST_ID), null, "should be null");
+ document.body.appendChild(e);
+ assert_equals(document.getElementById(TEST_ID), e, "should be the appended element");
+ }, "Ensure that the id attribute only affects elements present in a document");
+
+
+ test(function() {
+ // the method should return the 1st element.
+ var TEST_ID = "test5";
+ var target = document.getElementById(TEST_ID);
+ assert_not_equals(target, null, "should not be null");
+ assert_equals(target.getAttribute("data-name"), "1st", "should return the 1st");
+
+ // even if after the new element was appended.
+ var element4 = document.createElement("div");
+ element4.setAttribute("id", TEST_ID);
+ element4.setAttribute("data-name", "4th");
+ gBody.appendChild(element4);
+ var target2 = document.getElementById(TEST_ID);
+ assert_not_equals(target2, null, "should not be null");
+ assert_equals(target2.getAttribute("data-name"), "1st", "should be the 1st");
+
+ // should return the next element after removed the subtree including the 1st element.
+ target2.parentNode.removeChild(target2);
+ var target3 = document.getElementById(TEST_ID);
+ assert_not_equals(target3, null, "should not be null");
+ assert_equals(target3.getAttribute("data-name"), "4th", "should be the 4th");
+ }, "in tree order, within the context object's tree");
+
+
+ test(function() {
+ var TEST_ID = "test6";
+ var s = document.createElement("div");
+ s.setAttribute("id", TEST_ID);
+ // append to Element, not Document.
+ document.createElement("div").appendChild(s);
+
+ assert_equals(document.getElementById(TEST_ID), null, "should be null");
+ }, "Modern browsers optimize this method with using internal id cache. " +
+ "This test checks that their optimization should effect only append to `Document`, not append to `Node`.");
+
+
+ test(function() {
+ var TEST_ID = "test7"
+ var element = document.createElement("div");
+ element.setAttribute("id", TEST_ID);
+ gBody.appendChild(element);
+
+ var target = document.getElementById(TEST_ID);
+ assert_equals(target, element, "should return the element before changing the value");
+
+ element.attributes[0].value = TEST_ID + "-updated";
+ var target2 = document.getElementById(TEST_ID);
+ assert_equals(target2, null, "should return null after updated id via Attr.value");
+ var target3 = document.getElementById(TEST_ID + "-updated");
+ assert_equals(target3, element, "should be equal to the updated element.");
+ }, "changing attribute's value via `Attr` gotten from `Element.attribute`.");
+
+
+ test(function() {
+ var TEST_ID = "test8";
+
+ // setup fixture
+ var element = document.createElement("div");
+ element.setAttribute("id", TEST_ID + "-fixture");
+ gBody.appendChild(element);
+
+ // add id-ed element with using innerHTML
+ element.innerHTML = "<div id='"+ TEST_ID +"'></div>";
+ var test = document.getElementById(TEST_ID);
+ assert_equals(test, element.firstChild, "should not be null");
+ assert_equals(test.tagName, "DIV", "should have expected tag name.");
+ assert_true(test instanceof HTMLDivElement, "should be a valid Element instance");
+ }, "add id attribute via innerHTML");
+
+
+ test(function() {
+ var TEST_ID = "test9";
+
+ // add fixture
+ var fixture = document.createElement("div");
+ fixture.setAttribute("id", TEST_ID + "-fixture");
+ gBody.appendChild(fixture);
+
+ var element = document.createElement("div");
+ element.setAttribute("id", TEST_ID);
+ fixture.appendChild(element);
+
+ // check 'getElementById' should get the 'element'
+ assert_equals(document.getElementById(TEST_ID), element, "should not be null");
+
+ // remove id-ed element with using innerHTML (clear 'element')
+ fixture.innerHTML = "";
+ var test = document.getElementById(TEST_ID);
+ assert_equals(test, null, "should be null.");
+ }, "remove id attribute via innerHTML");
+
+
+ test(function() {
+ var TEST_ID = "test10";
+
+ // setup fixture
+ var element = document.createElement("div");
+ element.setAttribute("id", TEST_ID + "-fixture");
+ gBody.appendChild(element);
+
+ // add id-ed element with using outerHTML
+ element.outerHTML = "<div id='"+ TEST_ID +"'></div>";
+ var test = document.getElementById(TEST_ID);
+ assert_not_equals(test, null, "should not be null");
+ assert_equals(test.tagName, "DIV", "should have expected tag name.");
+ assert_true(test instanceof HTMLDivElement,"should be a valid Element instance");
+ }, "add id attribute via outerHTML");
+
+
+ test(function() {
+ var TEST_ID = "test11";
+
+ var element = document.createElement("div");
+ element.setAttribute("id", TEST_ID);
+ gBody.appendChild(element);
+
+ var test = document.getElementById(TEST_ID);
+ assert_equals(test, element, "should be equal to the appended element.");
+
+ // remove id-ed element with using outerHTML
+ element.outerHTML = "<div></div>";
+ var test = document.getElementById(TEST_ID);
+ assert_equals(test, null, "should be null.");
+ }, "remove id attribute via outerHTML");
+
+
+ test(function() {
+ // setup fixtures.
+ var TEST_ID = "test12";
+ var test = document.createElement("div");
+ test.id = TEST_ID;
+ gBody.appendChild(test);
+
+ // update id
+ var UPDATED_ID = TEST_ID + "-updated";
+ test.id = UPDATED_ID;
+ var e = document.getElementById(UPDATED_ID);
+ assert_equals(e, test, "should get the element with id.");
+
+ var old = document.getElementById(TEST_ID);
+ assert_equals(old, null, "shouldn't get the element by the old id.");
+
+ // remove id.
+ test.id = "";
+ var e2 = document.getElementById(UPDATED_ID);
+ assert_equals(e2, null, "should return null when the passed id is none in document.");
+ }, "update `id` attribute via element.id");
+
+
+ test(function() {
+ var TEST_ID = "test13";
+
+ var create_same_id_element = function (order) {
+ var element = document.createElement("div");
+ element.setAttribute("id", TEST_ID);
+ element.setAttribute("data-order", order);// for debug
+ return element;
+ };
+
+ // create fixture
+ var container = document.createElement("div");
+ container.setAttribute("id", TEST_ID + "-fixture");
+ gBody.appendChild(container);
+
+ var element1 = create_same_id_element("1");
+ var element2 = create_same_id_element("2");
+ var element3 = create_same_id_element("3");
+ var element4 = create_same_id_element("4");
+
+ // append element: 2 -> 4 -> 3 -> 1
+ container.appendChild(element2);
+ container.appendChild(element4);
+ container.insertBefore(element3, element4);
+ container.insertBefore(element1, element2);
+
+
+ var test = document.getElementById(TEST_ID);
+ assert_equals(test, element1, "should return 1st element");
+ container.removeChild(element1);
+
+ test = document.getElementById(TEST_ID);
+ assert_equals(test, element2, "should return 2nd element");
+ container.removeChild(element2);
+
+ test = document.getElementById(TEST_ID);
+ assert_equals(test, element3, "should return 3rd element");
+ container.removeChild(element3);
+
+ test = document.getElementById(TEST_ID);
+ assert_equals(test, element4, "should return 4th element");
+ container.removeChild(element4);
+
+
+ }, "where insertion order and tree order don't match");
+
+ test(function() {
+ var TEST_ID = "test14";
+ var a = document.createElement("a");
+ var b = document.createElement("b");
+ a.appendChild(b);
+ b.id = TEST_ID;
+ assert_equals(document.getElementById(TEST_ID), null);
+
+ gBody.appendChild(a);
+ assert_equals(document.getElementById(TEST_ID), b);
+ }, "Inserting an id by inserting its parent node");
+
+ test(function () {
+ var TEST_ID = "test15"
+ var outer = document.getElementById("outer");
+ var middle = document.getElementById("middle");
+ var inner = document.getElementById("inner");
+ outer.removeChild(middle);
+
+ var new_el = document.createElement("h1");
+ new_el.id = "heading";
+ inner.appendChild(new_el);
+ // the new element is not part of the document since
+ // "middle" element was removed previously
+ assert_equals(document.getElementById("heading"), null);
+ }, "Document.getElementById must not return nodes not present in document");
+
+ // TODO:
+ // id attribute in a namespace
+
+
+ // TODO:
+ // SVG + MathML elements with id attributes
+
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentgetElementsByTagNameexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+
+PASS Interfaces
+PASS Caching is allowed
+FAIL Shouldn't be able to set unsigned properties on a HTMLCollection (non-strict mode) assert_equals: expected (undefined) undefined but got (string) "foopy"
+FAIL Shouldn't be able to set unsigned properties on a HTMLCollection (strict mode) assert_throws: function "function () {
+ "use strict";
+ l[5] = "foopy"
+ }" did not throw
+PASS Should be able to set expando shadowing a proto prop (item)
+PASS Should be able to set expando shadowing a proto prop (namedItem)
+FAIL hasOwnProperty, getOwnPropertyDescriptor, getOwnPropertyNames assert_array_equals: lengths differ, expected 2 got 3
+PASS HTML element with uppercase tagName never matches in HTML Documents
+PASS Element in non-HTML namespace, no prefix, lowercase name
+PASS Element in non-HTML namespace, no prefix, uppercase name
+PASS Element in non-HTML namespace, prefix, lowercase name
+PASS Element in non-HTML namespace, prefix, uppercase name
+FAIL Element in HTML namespace, no prefix, non-ascii characters in name assert_equals: expected "aÇ" but got "aç"
+PASS Element in non-HTML namespace, non-ascii characters in name
+PASS Element in HTML namespace, prefix, non-ascii characters in name
+PASS Element in non-HTML namespace, prefix, non-ascii characters in name
+PASS getElementsByTagName('*')
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentgetElementsByTagNamexhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+
+PASS HTML element with uppercase tag name matches in XHTML documents
+PASS Element in non-HTML namespace, no prefix, lowercase name
+PASS Element in non-HTML namespace, no prefix, uppercase name
+PASS Element in non-HTML namespace, prefix, lowercase name
+PASS Element in non-HTML namespace, prefix, uppercase name
+PASS Element in HTML namespace, no prefix, non-ascii characters in name
+PASS Element in non-HTML namespace, non-ascii characters in name
+PASS Element in HTML namespace, prefix, non-ascii characters in name
+PASS Element in non-HTML namespace, prefix, non-ascii characters in name
+PASS getElementsByTagName('*')
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentgetElementsByTagNamexhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,102 @@
</span><ins>+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Document.getElementsByTagName</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id="log"></div>
+<pre id="x"></pre>
+<script>
+test(function() {
+ var t = document.body.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "I"))
+ this.add_cleanup(function() {document.body.removeChild(t)})
+ assert_equals(t.localName, "I")
+ assert_equals(t.tagName, "I")
+ assert_array_equals(document.getElementsByTagName("I"), [t])
+ assert_array_equals(document.getElementsByTagName("i"), [])
+ assert_array_equals(document.body.getElementsByTagName("I"), [t])
+ assert_array_equals(document.body.getElementsByTagName("i"), [])
+}, "HTML element with uppercase tag name matches in XHTML documents")
+
+test(function() {
+ var t = document.body.appendChild(document.createElementNS("test", "st"))
+ this.add_cleanup(function() {document.body.removeChild(t)})
+ assert_array_equals(document.getElementsByTagName("st"), [t])
+ assert_array_equals(document.getElementsByTagName("ST"), [])
+}, "Element in non-HTML namespace, no prefix, lowercase name")
+
+test(function() {
+ var t = document.body.appendChild(document.createElementNS("test", "ST"))
+ this.add_cleanup(function() {document.body.removeChild(t)})
+ assert_array_equals(document.getElementsByTagName("ST"), [t])
+ assert_array_equals(document.getElementsByTagName("st"), [])
+}, "Element in non-HTML namespace, no prefix, uppercase name")
+
+test(function() {
+ var t = document.body.appendChild(document.createElementNS("test", "te:st"))
+ this.add_cleanup(function() {document.body.removeChild(t)})
+ assert_array_equals(document.getElementsByTagName("st"), [t])
+ assert_array_equals(document.getElementsByTagName("ST"), [])
+}, "Element in non-HTML namespace, prefix, lowercase name")
+
+test(function() {
+ var t = document.body.appendChild(document.createElementNS("test", "te:ST"))
+ this.add_cleanup(function() {document.body.removeChild(t)})
+ assert_array_equals(document.getElementsByTagName("ST"), [t])
+ assert_array_equals(document.getElementsByTagName("st"), [])
+ assert_array_equals(document.getElementsByTagName("te:st"), [])
+ assert_array_equals(document.getElementsByTagName("te:ST"), [])
+}, "Element in non-HTML namespace, prefix, uppercase name")
+
+test(function() {
+ var t = document.body.appendChild(document.createElement("AÇ"))
+ this.add_cleanup(function() {document.body.removeChild(t)})
+ assert_array_equals(document.getElementsByTagName("AÇ"), [t], "All uppercase input")
+ assert_array_equals(document.getElementsByTagName("aÇ"), [], "Ascii lowercase input")
+ assert_array_equals(document.getElementsByTagName("aç"), [], "All lowercase input")
+}, "Element in HTML namespace, no prefix, non-ascii characters in name")
+
+test(function() {
+ var t = document.body.appendChild(document.createElementNS("test", "AÇ"))
+ this.add_cleanup(function() {document.body.removeChild(t)})
+ assert_array_equals(document.getElementsByTagName("AÇ"), [t], "All uppercase input")
+ assert_array_equals(document.getElementsByTagName("aÇ"), [], "Ascii lowercase input")
+ assert_array_equals(document.getElementsByTagName("aç"), [], "All lowercase input")
+}, "Element in non-HTML namespace, non-ascii characters in name")
+
+test(function() {
+ var t = document.body.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "test:aÇ"))
+ this.add_cleanup(function() {document.body.removeChild(t)})
+ assert_array_equals(document.getElementsByTagName("AÇ"), [], "All uppercase input")
+ assert_array_equals(document.getElementsByTagName("aÇ"), [t], "Ascii lowercase input")
+ assert_array_equals(document.getElementsByTagName("aç"), [], "All lowercase input")
+}, "Element in HTML namespace, prefix, non-ascii characters in name")
+
+test(function() {
+ var t = document.body.appendChild(document.createElementNS("test", "test:AÇ"))
+ this.add_cleanup(function() {document.body.removeChild(t)})
+ assert_array_equals(document.getElementsByTagName("AÇ"), [t], "All uppercase input")
+ assert_array_equals(document.getElementsByTagName("aÇ"), [], "Ascii lowercase input")
+ assert_array_equals(document.getElementsByTagName("aç"), [], "All lowercase input")
+}, "Element in non-HTML namespace, prefix, non-ascii characters in name")
+
+test(function() {
+ var actual = document.getElementsByTagName("*");
+ var expected = [];
+ var get_elements = function(node) {
+ for (var i = 0; i &lt; node.childNodes.length; i++) {
+ var child = node.childNodes[i];
+ if (child.nodeType === child.ELEMENT_NODE) {
+ expected.push(child);
+ get_elements(child);
+ }
+ }
+ }
+ get_elements(document);
+ assert_array_equals(actual, expected);
+}, "getElementsByTagName('*')")
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentgetElementsByTagNamehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Document.getElementsByTagName</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-getelementsbytagname">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="Document-Element-getElementsByTagName.js"></script>
+<div id="log"></div>
+<script>
+test_getElementsByTagName(document, document.body);
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentgetElementsByTagNameNSexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagNameNS-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagNameNS-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagNameNS-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+
+PASS Document.getElementsByTagNameNS
+PASS getElementsByTagNameNS('*', 'body')
+PASS Empty string namespace
+PASS body element in test namespace, no prefix
+PASS body element in test namespace, prefix
+PASS BODY element in test namespace, no prefix
+PASS abc element in html namespace
+PASS ABC element in html namespace
+PASS AÇ, case sensitivity
+PASS BODY element in test namespace, prefix
+PASS getElementsByTagNameNS('http://www.w3.org/1999/xhtml', '*')
+PASS getElementsByTagNameNS('*', '*')
+PASS Empty lists
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentgetElementsByTagNameNShtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagNameNS.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagNameNS.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagNameNS.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Document.getElementsByTagNameNS</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-getelementsbytagnamens">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="Document-Element-getElementsByTagNameNS.js"></script>
+<div id="log"></div>
+<script>
+test_getElementsByTagNameNS(document, document.body);
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentimplementationexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-implementation-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-implementation-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-implementation-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+
+PASS Getting implementation off the same document
+PASS Getting implementation off different documents
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentimplementationhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-implementation.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-implementation.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-implementation.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Document.implementation</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-implementation">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ var implementation = document.implementation;
+ assert_true(implementation instanceof DOMImplementation,
+ "implementation should implement DOMImplementation");
+ assert_equals(document.implementation, implementation);
+}, "Getting implementation off the same document");
+
+test(function() {
+ var doc = document.implementation.createHTMLDocument();
+ assert_not_equals(document.implementation, doc.implementation);
+}, "Getting implementation off different documents");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentimportNodeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-importNode-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-importNode-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-importNode-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+
+FAIL No 'deep' argument. assert_equals: expected null but got Element node <span></span>
+PASS Undefined 'deep' argument.
+PASS True 'deep' argument.
+PASS False 'deep' argument.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentimportNodehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-importNode.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-importNode.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Document-importNode.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,57 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Document.importNode</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-importnode">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ var doc = document.implementation.createHTMLDocument("Title");
+ var div = doc.body.appendChild(doc.createElement("div"));
+ div.appendChild(doc.createElement("span"));
+ assert_equals(div.ownerDocument, doc);
+ assert_equals(div.firstChild.ownerDocument, doc);
+ var newDiv = document.importNode(div);
+ assert_equals(div.ownerDocument, doc);
+ assert_equals(div.firstChild.ownerDocument, doc);
+ assert_equals(newDiv.ownerDocument, document);
+ assert_equals(newDiv.firstChild, null);
+}, "No 'deep' argument.")
+test(function() {
+ var doc = document.implementation.createHTMLDocument("Title");
+ var div = doc.body.appendChild(doc.createElement("div"));
+ div.appendChild(doc.createElement("span"));
+ assert_equals(div.ownerDocument, doc);
+ assert_equals(div.firstChild.ownerDocument, doc);
+ var newDiv = document.importNode(div, undefined);
+ assert_equals(div.ownerDocument, doc);
+ assert_equals(div.firstChild.ownerDocument, doc);
+ assert_equals(newDiv.ownerDocument, document);
+ assert_equals(newDiv.firstChild, null);
+}, "Undefined 'deep' argument.")
+test(function() {
+ var doc = document.implementation.createHTMLDocument("Title");
+ var div = doc.body.appendChild(doc.createElement("div"));
+ div.appendChild(doc.createElement("span"));
+ assert_equals(div.ownerDocument, doc);
+ assert_equals(div.firstChild.ownerDocument, doc);
+ var newDiv = document.importNode(div, true);
+ assert_equals(div.ownerDocument, doc);
+ assert_equals(div.firstChild.ownerDocument, doc);
+ assert_equals(newDiv.ownerDocument, document);
+ assert_equals(newDiv.firstChild.ownerDocument, document);
+}, "True 'deep' argument.")
+test(function() {
+ var doc = document.implementation.createHTMLDocument("Title");
+ var div = doc.body.appendChild(doc.createElement("div"));
+ div.appendChild(doc.createElement("span"));
+ assert_equals(div.ownerDocument, doc);
+ assert_equals(div.firstChild.ownerDocument, doc);
+ var newDiv = document.importNode(div, false);
+ assert_equals(div.ownerDocument, doc);
+ assert_equals(div.firstChild.ownerDocument, doc);
+ assert_equals(newDiv.ownerDocument, document);
+ assert_equals(newDiv.firstChild, null);
+}, "False 'deep' argument.")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentTypeliteralexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS DocumentType literals
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentTypeliteralxhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS DocumentType literals
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentTypeliteralxhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+<!DOCTYPE html PUBLIC "STAFF" "staffNS.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>DocumentType literals</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-documenttype-name"/>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-documenttype-publicid"/>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-documenttype-systemid"/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id="log"/>
+<script>
+test(function() {
+ var doctype = document.firstChild;
+ assert_true(doctype instanceof DocumentType)
+ assert_equals(doctype.name, "html")
+ assert_equals(doctype.publicId, 'STAFF')
+ assert_equals(doctype.systemId, 'staffNS.dtd')
+})
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentTypeliteralhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+<!DOCTYPE html PUBLIC "STAFF" "staffNS.dtd">
+<title>DocumentType literals</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-documenttype-name">
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-documenttype-publicid">
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-documenttype-systemid">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ var doctype = document.firstChild;
+ assert_true(doctype instanceof DocumentType)
+ assert_equals(doctype.name, "html")
+ assert_equals(doctype.publicId, 'STAFF')
+ assert_equals(doctype.systemId, 'staffNS.dtd')
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentTyperemoveexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-remove-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-remove-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-remove-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+
+PASS doctype should support remove()
+PASS remove() should work if doctype doesn't have a parent
+PASS remove() should work if doctype does have a parent
+PASS remove() should work if doctype does have a parent and siblings
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesDocumentTyperemovehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-remove.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-remove.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-remove.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>DocumentType.remove</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-childnode-remove">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="ChildNode-remove.js"></script>
+<div id=log></div>
+<script>
+var node, parentNode;
+setup(function() {
+ node = document.implementation.createDocumentType("html", "", "");
+ parentNode = document.implementation.createDocument(null, "", null);
+});
+testRemove(node, parentNode, "doctype");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementnullexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of firstElementChild and lastChildElement returning null
+
+Test.
+
+
+PASS Null test
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementnullxhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of firstElementChild and lastChildElement returning null
+
+Test.
+
+
+PASS Null Test
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementnullxhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Null Test</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<h1>Test of firstElementChild and lastChildElement returning null</h1>
+<div id="log"></div>
+<p id="parentEl" style="font-weight:bold;">Test.</p>
+<script><![CDATA[
+test(function() {
+ var parentEl = document.getElementById("parentEl")
+ assert_equals(parentEl.firstElementChild, null)
+ assert_equals(parentEl.lastElementChild, null)
+})
+]]></script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementnullhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>Null test</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<h1>Test of firstElementChild and lastChildElement returning null</h1>
+<div id="log"></div>
+<p id="parentEl" style="font-weight:bold;">Test.</p>
+<script>
+test(function() {
+ var parentEl = document.getElementById("parentEl")
+ assert_equals(parentEl.firstElementChild, null)
+ assert_equals(parentEl.lastElementChild, null)
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountdynamicaddexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of Dynamic Adding of Elements
+
+The result of this test is logged above.
+
+
+PASS Dynamic Adding of Elements
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountdynamicaddxhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of Dynamic Adding of Elements
+
+The result of this test is logged above.
+
+
+PASS Dynamic Adding of Elements
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountdynamicaddxhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Dynamic Adding of Elements</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<h1>Test of Dynamic Adding of Elements</h1>
+<div id="log"></div>
+<p id="parentEl">The result of this test is
+<span id="first_element_child" style="font-weight:bold;">logged above.</span></p>
+<script><![CDATA[
+test(function() {
+ var parentEl = document.getElementById("parentEl");
+ var newChild = document.createElement("span");
+ parentEl.appendChild(newChild);
+ assert_equals(parentEl.childElementCount, 2)
+})
+]]></script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountdynamicaddhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>Dynamic Adding of Elements</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<h1>Test of Dynamic Adding of Elements</h1>
+<div id="log"></div>
+<p id="parentEl">The result of this test is
+<span id="first_element_child" style="font-weight:bold;">logged above.</span></p>
+<script>
+test(function() {
+ var parentEl = document.getElementById("parentEl");
+ var newChild = document.createElement("span");
+ parentEl.appendChild(newChild);
+ assert_equals(parentEl.childElementCount, 2)
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountdynamicremoveexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of Dynamic Removal of Elements
+
+The result of this test is unknown.
+
+
+PASS Dynamic Removal of Elements
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountdynamicremovexhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of Removal Adding of Elements
+
+The result of this test is logged above.
+
+
+PASS Dynamic Removal of Elements
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountdynamicremovexhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Dynamic Removal of Elements</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<h1>Test of Removal Adding of Elements</h1>
+<div id="log"></div>
+<p id="parentEl">The result of this test is
+<span id="first_element_child" style="font-weight:bold;">logged above.</span><span id="last_element_child"> </span></p>
+<script><![CDATA[
+test(function() {
+ var parentEl = document.getElementById("parentEl");
+ var lec = parentEl.lastElementChild;
+ parentEl.removeChild(lec);
+ assert_equals(parentEl.childElementCount, 1)
+})
+]]></script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountdynamicremovehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>Dynamic Removal of Elements</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<h1>Test of Dynamic Removal of Elements</h1>
+<div id="log"></div>
+<p id="parentEl">The result of this test is
+<span id="first_element_child" style="font-weight:bold;">unknown.</span><span id="last_element_child"> </span></p>
+<script>
+test(function() {
+ var parentEl = document.getElementById("parentEl");
+ var lec = parentEl.lastElementChild;
+ parentEl.removeChild(lec);
+ assert_equals(parentEl.childElementCount, 1)
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of childElementCount
+
+The result of this test is given above.
+
+
+PASS childElementCount
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountnochildexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of childElementCount with No Child Element Nodes
+
+Test.
+
+
+PASS childElementCount without Child Element Nodes
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountnochildxhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of childElementCount with No Child Element Nodes
+
+Test.
+
+
+PASS childElementCount without Child Element Nodes
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountnochildxhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>childElementCount without Child Element Nodes</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<h1>Test of childElementCount with No Child Element Nodes</h1>
+<div id="log"></div>
+<p id="parentEl" style="font-weight:bold;">Test.</p>
+<script><![CDATA[
+test(function() {
+ var parentEl = document.getElementById("parentEl")
+ assert_equals(parentEl.childElementCount, 0)
+})
+]]></script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountnochildhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>childElementCount without Child Element Nodes</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<h1>Test of childElementCount with No Child Element Nodes</h1>
+<div id="log"></div>
+<p id="parentEl" style="font-weight:bold;">Test.</p>
+<script>
+test(function() {
+ var parentEl = document.getElementById("parentEl")
+ assert_equals(parentEl.childElementCount, 0)
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountxhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of childElementCount
+
+The result of this test is unknown.
+
+
+PASS childElementCount
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementCountxhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,25 @@
</span><ins>+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>childElementCount</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<h1>Test of childElementCount</h1>
+<div id="log"></div>
+<p id="parentEl">The result of <span id="first_element_child"><span>this</span> <span>test</span></span> is
+<span id="middle_element_child" style="font-weight:bold;">unknown.</span>
+
+
+
+<span id="last_element_child" style="display:none;">fnord</span> </p>
+<script><![CDATA[
+test(function() {
+ var parentEl = document.getElementById("parentEl")
+ assert_true("childElementCount" in parentEl)
+ assert_equals(parentEl.childElementCount, 3)
+})
+]]></script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildElementCounthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>childElementCount</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<h1>Test of childElementCount</h1>
+<div id="log"></div>
+<p id="parentEl">The result of <span id="first_element_child"><span>this</span> <span>test</span></span> is
+<span id="middle_element_child" style="font-weight:bold;">given above.</span>
+
+
+
+<span id="last_element_child" style="display:none;">fnord</span> </p>
+<script>
+test(function() {
+ var parentEl = document.getElementById("parentEl")
+ assert_true("childElementCount" in parentEl)
+ assert_equals(parentEl.childElementCount, 3)
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildrenexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-children-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-children-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-children-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+
+
+PASS HTMLCollection edge cases
+FAIL HTMLCollection edge cases 1 assert_array_equals: lengths differ, expected 3 got 4
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementchildrenhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-children.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-children.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-children.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,27 @@
</span><ins>+<!DOCTYPE html>
+<title>HTMLCollection edge cases</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<div id="test"><img><img id=foo><img id=foo></div>
+<script>
+test(function() {
+ var container = document.getElementById("test");
+ var result = container.children.item("foo");
+ assert_true(result instanceof Element, "Expected an Element.");
+ assert_false(result.hasAttribute("id"), "Expected the IDless Element.")
+})
+test(function() {
+ var container = document.getElementById("test");
+ var list = container.children;
+ var result = [];
+ for (var p in list) {
+ if (list.hasOwnProperty(p)) {
+ result.push(p);
+ }
+ }
+ assert_array_equals(result, ['0', '1', '2']);
+ result = Object.getOwnPropertyNames(list);
+ assert_array_equals(result, ['0', '1', '2', 'foo']);
+});
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementclasslistexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-classlist-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-classlist-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-classlist-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,66 @@
</span><ins>+
+PASS Element.classList must exist as an object
+PASS Element.classList must exist as an object even if the element has no class attribute
+PASS DOMTokenList should be exposed for prototyping
+PASS prototyping DOMTokenList should work
+PASS Element.classList must implement DOMTokenList
+PASS CSS .foo selectors must not match elements without any class
+FAIL classList must be correct for an element that has classes assert_equals: duplicates in initial string should be removed per https://dom.spec.whatwg.org/#concept-class expected 1 but got 2
+PASS classList.length must be 0 for an element that has no classes
+PASS classList must not contain an undefined class
+PASS classList.item() must return null for out-of-range index
+PASS classList.item() must return null for negative index
+PASS classList[index] must be undefined for out-of-range index
+PASS classList[index] must be undefined for negative index
+PASS className should contain initial markup whitespace
+FAIL empty classList should return the empty string since the ordered set parser skip the whitespaces assert_equals: implicit expected "" but got " "
+PASS .contains(empty_string) must throw a SYNTAX_ERR
+PASS .add(empty_string) must throw a SYNTAX_ERR
+PASS .remove(empty_string) must throw a SYNTAX_ERR
+PASS .toggle(empty_string) must throw a SYNTAX_ERR
+PASS .contains(string_with_spaces) must throw an INVALID_CHARACTER_ERR
+PASS .add(string_with_spaces) must throw an INVALID_CHARACTER_ERR
+PASS .remove(string_with_spaces) must throw an INVALID_CHARACTER_ERR
+PASS .toggle(string_with_spaces) must throw an INVALID_CHARACTER_ERR
+PASS computed style must update when setting .className
+PASS classList.contains must update when .className is changed
+PASS classList.contains must be case sensitive
+PASS classList.contains must not match when punctuation characters are added
+PASS classList.add must not cause the CSS selector to stop matching
+PASS classList.add must not remove existing classes
+PASS classList.contains case sensitivity must match a case-specific string
+PASS classList.length must correctly reflect the number of tokens
+PASS classList.item(0) must return the first token
+PASS classList.item must return case-sensitive strings and preserve token order
+PASS classList[0] must return the first token
+PASS classList[index] must return case-sensitive strings and preserve token order
+PASS classList[index] must still be undefined for out-of-range index when earlier indexes exist
+PASS className must update correctly when items have been added through classList
+PASS classList must stringify correctly when items have been added
+PASS classList.add should not add a token if it already exists
+PASS classList.remove removes arguments passed, if they are present.
+PASS classList.remove must remove existing tokens
+PASS classList.remove must not break case-sensitive CSS selector matching
+PASS classList.remove must remove duplicated tokens
+PASS classList.remove must collapse whitespace around removed tokens
+FAIL classList.remove must collapse whitespaces around each token assert_equals: implicit expected "token1" but got " token1"
+FAIL classList.remove must collapse whitespaces around each token and remove duplicates assert_equals: implicit expected "token1" but got " token1 token1 "
+PASS classList.remove must collapse whitespace when removing duplicate tokens
+FAIL classList.add must collapse whitespaces and remove duplicates when adding a token that already exists assert_equals: implicit expected "token1" but got " token1 token1 "
+PASS classList.toggle must toggle tokens case-sensitively when adding
+PASS classList.toggle must not break case-sensitive CSS selector matching
+PASS classList.toggle must be able to remove tokens
+PASS classList.toggle must be case-sensitive when removing tokens
+PASS CSS class selectors must stop matching when all classes have been removed
+PASS className must be empty when all classes have been removed
+PASS classList must stringify to an empty string when all classes have been removed
+PASS classList.item(0) must return null when all classes have been removed
+PASS classList[0] must be undefined when all classes have been removed
+PASS classList.add should treat " " as a space
+FAIL classList.add should treat \t as a space assert_equals: expected "a b" but got "a\tb"
+FAIL classList.add should treat \r as a space assert_equals: expected "a b" but got "a\rb"
+FAIL classList.add should treat \n as a space assert_equals: expected "a b" but got "a\nb"
+FAIL classList.add should treat \f as a space assert_equals: expected "a b" but got "a\fb"
+PASS classList.length must be read-only
+PASS classList must be read-only
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementclasslisthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-classlist.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-classlist.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-classlist.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,309 @@
</span><ins>+<!doctype html>
+<html>
+ <head class="test test">
+ <title class=" ">Element.classList in case-sensitive documents</title>
+ <link rel="help" href="https://dom.spec.whatwg.org/#concept-class">
+ <script type="text/javascript" src="/resources/testharness.js"></script>
+ <script type="text/javascript" src="/resources/testharnessreport.js"></script>
+ <style type="text/css">
+.foo { font-style: italic; }
+ </style>
+ <script type="text/javascript">
+var elem = document.getElementsByTagName('title')[0], secondelem = document.getElementsByTagName('head')[0];
+test(function () {
+ assert_equals( typeof elem.classList, 'object', 'critical test; ignore any results after this' );
+}, 'Element.classList must exist as an object');
+test(function () {
+ assert_equals( typeof document.documentElement.classList, 'object' );
+}, 'Element.classList must exist as an object even if the element has no class attribute');
+test(function () {
+ assert_true( !!window.DOMTokenList );
+}, 'DOMTokenList should be exposed for prototyping');
+test(function () {
+ DOMTokenList.prototype.customProperty = true;
+ assert_true( elem.classList.customProperty );
+}, 'prototyping DOMTokenList should work');
+test(function () {
+ assert_true( elem.classList instanceof window.DOMTokenList );
+ assert_equals( elem.classList.constructor, window.DOMTokenList );
+}, 'Element.classList must implement DOMTokenList');
+test(function () {
+ assert_not_equals( getComputedStyle(elem,null).fontStyle, 'italic', 'critical test; required by the testsuite' );
+}, 'CSS .foo selectors must not match elements without any class');
+test(function () {
+ assert_equals( secondelem.classList.length, 1, 'duplicates in initial string should be removed per https://dom.spec.whatwg.org/#concept-class' );
+ assert_equals( secondelem.classList.item(0), 'test' );
+ assert_true( secondelem.classList.contains('test') );
+}, 'classList must be correct for an element that has classes');
+test(function () {
+ assert_equals( elem.classList.length, 0 );
+}, 'classList.length must be 0 for an element that has no classes');
+test(function () {
+ assert_false( elem.classList.contains('foo') );
+}, 'classList must not contain an undefined class');
+test(function () {
+ assert_equals( elem.classList.item(0), null );
+}, 'classList.item() must return null for out-of-range index');
+test(function () {
+ assert_equals( elem.classList.item(-1), null );
+}, 'classList.item() must return null for negative index');
+test(function () {
+ /* the normative part of the spec states that:
+ "unless tokens is empty, in which case there are no supported property indices"
+ ...
+ "The term[...] supported property indices [is] used as defined in the WebIDL specification."
+ WebIDL creates actual OwnProperties and then [] just acts as a normal property lookup */
+ assert_equals( elem.classList[0], undefined );
+}, 'classList[index] must be undefined for out-of-range index');
+test(function () {
+ assert_equals( elem.classList[-1], undefined );
+}, 'classList[index] must be undefined for negative index');
+test(function () {
+ assert_equals( elem.className, ' ' );
+}, 'className should contain initial markup whitespace');
+test(function () {
+ assert_equals( elem.classList + '', '', 'implicit' );
+ assert_equals( elem.classList.toString(), '', 'explicit' );
+}, 'empty classList should return the empty string since the ordered set parser skip the whitespaces');
+test(function () {
+ assert_throws( 'SYNTAX_ERR', function () { elem.classList.contains(''); } );
+}, '.contains(empty_string) must throw a SYNTAX_ERR');
+test(function () {
+ assert_throws( 'SYNTAX_ERR', function () { elem.classList.add(''); } );
+}, '.add(empty_string) must throw a SYNTAX_ERR');
+test(function () {
+ assert_throws( 'SYNTAX_ERR', function () { elem.classList.remove(''); } );
+}, '.remove(empty_string) must throw a SYNTAX_ERR');
+test(function () {
+ assert_throws( 'SYNTAX_ERR', function () { elem.classList.toggle(''); } );
+}, '.toggle(empty_string) must throw a SYNTAX_ERR');
+test(function () {
+ assert_throws( 'INVALID_CHARACTER_ERR', function () { elem.classList.contains('a b'); } );
+}, '.contains(string_with_spaces) must throw an INVALID_CHARACTER_ERR');
+test(function () {
+ assert_throws( 'INVALID_CHARACTER_ERR', function () { elem.classList.add('a b'); } );
+}, '.add(string_with_spaces) must throw an INVALID_CHARACTER_ERR');
+test(function () {
+ assert_throws( 'INVALID_CHARACTER_ERR', function () { elem.classList.remove('a b'); } );
+}, '.remove(string_with_spaces) must throw an INVALID_CHARACTER_ERR');
+test(function () {
+ assert_throws( 'INVALID_CHARACTER_ERR', function () { elem.classList.toggle('a b'); } );
+}, '.toggle(string_with_spaces) must throw an INVALID_CHARACTER_ERR');
+elem.className = 'foo';
+test(function () {
+ assert_equals( getComputedStyle(elem,null).fontStyle, 'italic', 'critical test; required by the testsuite' );
+}, 'computed style must update when setting .className');
+test(function () {
+ assert_true( elem.classList.contains('foo') );
+}, 'classList.contains must update when .className is changed');
+test(function () {
+ assert_false( elem.classList.contains('FOO') );
+}, 'classList.contains must be case sensitive');
+test(function () {
+ assert_false( elem.classList.contains('foo.') );
+ assert_false( elem.classList.contains('foo)') );
+ assert_false( elem.classList.contains('foo\'') );
+ assert_false( elem.classList.contains('foo$') );
+ assert_false( elem.classList.contains('foo~') );
+ assert_false( elem.classList.contains('foo?') );
+ assert_false( elem.classList.contains('foo\\') );
+}, 'classList.contains must not match when punctuation characters are added');
+test(function () {
+ elem.classList.add('FOO');
+ assert_equals( getComputedStyle(elem,null).fontStyle, 'italic' );
+}, 'classList.add must not cause the CSS selector to stop matching');
+test(function () {
+ assert_true( elem.classList.contains('foo') );
+}, 'classList.add must not remove existing classes');
+test(function () {
+ assert_true( elem.classList.contains('FOO') );
+}, 'classList.contains case sensitivity must match a case-specific string');
+test(function () {
+ assert_equals( elem.classList.length, 2 );
+}, 'classList.length must correctly reflect the number of tokens');
+test(function () {
+ assert_equals( elem.classList.item(0), 'foo' );
+}, 'classList.item(0) must return the first token');
+test(function () {
+ assert_equals( elem.classList.item(1), 'FOO' );
+}, 'classList.item must return case-sensitive strings and preserve token order');
+test(function () {
+ assert_equals( elem.classList[0], 'foo' );
+}, 'classList[0] must return the first token');
+test(function () {
+ assert_equals( elem.classList[1], 'FOO' );
+}, 'classList[index] must return case-sensitive strings and preserve token order');
+test(function () {
+ /* the normative part of the spec states that:
+ "The object's supported property indices are the numbers in the range zero to the number of tokens in tokens minus one"
+ ...
+ "The term[...] supported property indices [is] used as defined in the WebIDL specification."
+ WebIDL creates actual OwnProperties and then [] just acts as a normal property lookup */
+ assert_equals( elem.classList[2], undefined );
+}, 'classList[index] must still be undefined for out-of-range index when earlier indexes exist');
+test(function () {
+ assert_equals( elem.className, 'foo FOO' );
+}, 'className must update correctly when items have been added through classList');
+test(function () {
+ assert_equals( elem.classList + '', 'foo FOO', 'implicit' );
+ assert_equals( elem.classList.toString(), 'foo FOO', 'explicit' );
+}, 'classList must stringify correctly when items have been added');
+test(function () {
+ elem.classList.add('foo');
+ assert_equals( elem.classList.length, 2 );
+ assert_equals( elem.classList + '', 'foo FOO', 'implicit' );
+ assert_equals( elem.classList.toString(), 'foo FOO', 'explicit' );
+}, 'classList.add should not add a token if it already exists');
+test(function () {
+ elem.classList.remove('bar');
+ assert_equals( elem.classList.length, 2 );
+ assert_equals( elem.classList + '', 'foo FOO', 'implicit' );
+ assert_equals( elem.classList.toString(), 'foo FOO', 'explicit' );
+}, 'classList.remove removes arguments passed, if they are present.');
+test(function () {
+ elem.classList.remove('foo');
+ assert_equals( elem.classList.length, 1 );
+ assert_equals( elem.classList + '', 'FOO', 'implicit' );
+ assert_equals( elem.classList.toString(), 'FOO', 'explicit' );
+ assert_false( elem.classList.contains('foo') );
+ assert_true( elem.classList.contains('FOO') );
+}, 'classList.remove must remove existing tokens');
+test(function () {
+ assert_not_equals( getComputedStyle(elem,null).fontStyle, 'italic' );
+}, 'classList.remove must not break case-sensitive CSS selector matching');
+test(function () {
+ secondelem.classList.remove('test');
+ assert_equals( secondelem.classList.length, 0 );
+ assert_false( secondelem.classList.contains('test') );
+}, 'classList.remove must remove duplicated tokens');
+test(function () {
+ secondelem.className = 'token1 token2 token3';
+ secondelem.classList.remove('token2');
+ assert_equals( secondelem.classList + '', 'token1 token3', 'implicit' );
+ assert_equals( secondelem.classList.toString(), 'token1 token3', 'explicit' );
+}, 'classList.remove must collapse whitespace around removed tokens');
+test(function () {
+ secondelem.className = ' token1 token2 ';
+ secondelem.classList.remove('token2');
+ assert_equals( secondelem.classList + '', 'token1', 'implicit' );
+ assert_equals( secondelem.classList.toString(), 'token1', 'explicit' );
+}, 'classList.remove must collapse whitespaces around each token');
+test(function () {
+ secondelem.className = ' token1 token2 token1 ';
+ secondelem.classList.remove('token2');
+ assert_equals( secondelem.classList + '', 'token1', 'implicit' );
+ assert_equals( secondelem.classList.toString(), 'token1', 'explicit' );
+}, 'classList.remove must collapse whitespaces around each token and remove duplicates');
+test(function () {
+ secondelem.className = ' token1 token2 token1 ';
+ secondelem.classList.remove('token1');
+ assert_equals( secondelem.classList + '', 'token2', 'implicit' );
+ assert_equals( secondelem.classList.toString(), 'token2', 'explicit' );
+}, 'classList.remove must collapse whitespace when removing duplicate tokens');
+test(function () {
+ secondelem.className = ' token1 token1 ';
+ secondelem.classList.add('token1');
+ assert_equals( secondelem.classList + '', 'token1', 'implicit' );
+ assert_equals( secondelem.classList.toString(), 'token1', 'explicit' );
+}, 'classList.add must collapse whitespaces and remove duplicates when adding a token that already exists');
+test(function () {
+ assert_true(elem.classList.toggle('foo'));
+ assert_equals( elem.classList.length, 2 );
+ assert_true( elem.classList.contains('foo') );
+ assert_true( elem.classList.contains('FOO') );
+}, 'classList.toggle must toggle tokens case-sensitively when adding');
+test(function () {
+ assert_equals( getComputedStyle(elem,null).fontStyle, 'italic' );
+}, 'classList.toggle must not break case-sensitive CSS selector matching');
+test(function () {
+ assert_false(elem.classList.toggle('foo'));
+}, 'classList.toggle must be able to remove tokens');
+test(function () {
+ //will return true if the last test incorrectly removed both
+ assert_false(elem.classList.toggle('FOO'));
+ assert_false( elem.classList.contains('foo') );
+ assert_false( elem.classList.contains('FOO') );
+}, 'classList.toggle must be case-sensitive when removing tokens');
+test(function () {
+ assert_not_equals( getComputedStyle(elem,null).fontStyle, 'italic' );
+}, 'CSS class selectors must stop matching when all classes have been removed');
+test(function () {
+ assert_equals( elem.className, '' );
+}, 'className must be empty when all classes have been removed');
+test(function () {
+ assert_equals( elem.classList + '', '', 'implicit' );
+ assert_equals( elem.classList.toString(), '', 'explicit' );
+}, 'classList must stringify to an empty string when all classes have been removed');
+test(function () {
+ assert_equals( elem.classList.item(0), null );
+}, 'classList.item(0) must return null when all classes have been removed');
+test(function () {
+ /* the normative part of the spec states that:
+ "unless the length is zero, in which case there are no supported property indices"
+ ...
+ "The term[...] supported property indices [is] used as defined in the WebIDL specification."
+ WebIDL creates actual OwnProperties and then [] just acts as a normal property lookup */
+ assert_equals( elem.classList[0], undefined );
+}, 'classList[0] must be undefined when all classes have been removed');
+// The ordered set parser must skip ASCII whitespace (U+0009, U+000A, U+000C, U+000D, and U+0020.)
+test(function () {
+ var foo = document.createElement('div');
+ foo.className = 'a ';
+ foo.classList.add('b');
+ assert_equals(foo.className,'a b');
+}, 'classList.add should treat " " as a space');
+test(function () {
+ var foo = document.createElement('div');
+ foo.className = 'a\t';
+ foo.classList.add('b');
+ assert_equals(foo.className,'a b');
+}, 'classList.add should treat \\t as a space');
+test(function () {
+ var foo = document.createElement('div');
+ foo.className = 'a\r';
+ foo.classList.add('b');
+ assert_equals(foo.className,'a b');
+}, 'classList.add should treat \\r as a space');
+test(function () {
+ var foo = document.createElement('div');
+ foo.className = 'a\n';
+ foo.classList.add('b');
+ assert_equals(foo.className,'a b');
+}, 'classList.add should treat \\n as a space');
+test(function () {
+ var foo = document.createElement('div');
+ foo.className = 'a\f';
+ foo.classList.add('b');
+ assert_equals(foo.className,'a b');
+}, 'classList.add should treat \\f as a space');
+test(function () {
+ //WebIDL and ECMAScript 5 - a readonly property has a getter but not a setter
+ //ES5 makes [[Put]] fail but not throw
+ var failed = false;
+ secondelem.className = 'token1';
+ try {
+ secondelem.classList.length = 0;
+ } catch(e) {
+ failed = e;
+ }
+ assert_equals(secondelem.classList.length,1);
+ assert_false(failed,'an error was thrown');
+}, 'classList.length must be read-only');
+test(function () {
+ var failed = false, realList = secondelem.classList;
+ try {
+ secondelem.classList = '';
+ } catch(e) {
+ failed = e;
+ }
+ assert_equals(secondelem.classList,realList);
+ assert_false(failed,'an error was thrown');
+}, 'classList must be read-only');
+ </script>
+ </head>
+ <body>
+
+ <div id="log"></div>
+
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementclosestexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-closest-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-closest-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-closest-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+
+PASS Element.closest with context node 'test12' and selector 'select'
+PASS Element.closest with context node 'test13' and selector 'fieldset'
+PASS Element.closest with context node 'test13' and selector 'div'
+PASS Element.closest with context node 'test3' and selector 'body'
+PASS Element.closest with context node 'test4' and selector '[default]'
+PASS Element.closest with context node 'test4' and selector '[selected]'
+PASS Element.closest with context node 'test11' and selector '[selected]'
+PASS Element.closest with context node 'test12' and selector '[name="form-a"]'
+PASS Element.closest with context node 'test13' and selector 'form[name="form-a"]'
+PASS Element.closest with context node 'test9' and selector 'input[required]'
+PASS Element.closest with context node 'test9' and selector 'select[required]'
+PASS Element.closest with context node 'test13' and selector 'div:not(.div1)'
+PASS Element.closest with context node 'test6' and selector 'div.div3'
+PASS Element.closest with context node 'test1' and selector 'div#test7'
+PASS Element.closest with context node 'test12' and selector '.div3 > .div2'
+PASS Element.closest with context node 'test12' and selector '.div3 > .div1'
+PASS Element.closest with context node 'test9' and selector 'form > input[required]'
+PASS Element.closest with context node 'test12' and selector 'fieldset > select[required]'
+PASS Element.closest with context node 'test6' and selector 'input + fieldset'
+PASS Element.closest with context node 'test3' and selector 'form + form'
+PASS Element.closest with context node 'test5' and selector 'form + form'
+PASS Element.closest with context node 'test10' and selector ':empty'
+PASS Element.closest with context node 'test11' and selector ':last-child'
+PASS Element.closest with context node 'test12' and selector ':first-child'
+PASS Element.closest with context node 'test11' and selector ':invalid'
+PASS Element.closest with context node 'test4' and selector ':scope'
+PASS Element.closest with context node 'test4' and selector 'select > :scope'
+PASS Element.closest with context node 'test4' and selector 'div > :scope'
+FAIL Element.closest with context node 'test4' and selector ':has(> :scope)' SyntaxError: DOM Exception 12
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementclosesthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-closest.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-closest.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-closest.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,73 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf8>
+<title>Test for Element.closest</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body id="body">
+ <div id="test8" class="div3" style="display:none">
+ <div id="test7" class="div2">
+ <div id="test6" class="div1">
+ <form id="test10" class="form2"></form>
+ <form id="test5" class="form1" name="form-a">
+ <input id="test1" class="input1" required>
+ <fieldset class="fieldset2" id="test2">
+ <select id="test3" class="select1" required>
+ <option default id="test4" value="">Test4</option>
+ <option selected id="test11">Test11</option>
+ <option id="test12">Test12</option>
+ <option id="test13">Test13</option>
+ </select>
+ <input id="test9" type="text" required>
+ </fieldset>
+ </form>
+ </div>
+ </div>
+ </div>
+ <div id=log></div>
+<script>
+ do_test("select" , "test12", "test3");
+ do_test("fieldset" , "test13", "test2");
+ do_test("div" , "test13", "test6");
+ do_test("body" , "test3" , "body");
+
+ do_test("[default]" , "test4" , "test4");
+ do_test("[selected]" , "test4" , "");
+ do_test("[selected]" , "test11", "test11");
+ do_test('[name="form-a"]' , "test12", "test5");
+ do_test('form[name="form-a"]' , "test13", "test5");
+ do_test("input[required]" , "test9" , "test9");
+ do_test("select[required]" , "test9" , "");
+
+ do_test("div:not(.div1)" , "test13", "test7");
+ do_test("div.div3" , "test6" , "test8");
+ do_test("div#test7" , "test1" , "test7");
+
+ do_test(".div3 > .div2" , "test12", "test7");
+ do_test(".div3 > .div1" , "test12", "");
+ do_test("form > input[required]" , "test9" , "");
+ do_test("fieldset > select[required]", "test12", "test3");
+
+ do_test("input + fieldset" , "test6" , "");
+ do_test("form + form" , "test3" , "test5");
+ do_test("form + form" , "test5" , "test5");
+
+ do_test(":empty" , "test10", "test10");
+ do_test(":last-child" , "test11", "test2");
+ do_test(":first-child" , "test12", "test3");
+ do_test(":invalid" , "test11", "test2");
+
+ do_test(":scope" , "test4", "test4");
+ do_test("select > :scope" , "test4", "test4");
+ do_test("div > :scope" , "test4", "");
+ do_test(":has(> :scope)" , "test4", "test3");
+function do_test(aSelector, aElementId, aTargetId) {
+ test(function() {
+ var el = document.getElementById(aElementId).closest(aSelector);
+ if (el === null) {
+ assert_equals("", aTargetId, aSelector);
+ } else {
+ assert_equals(el.id, aTargetId, aSelector);
+ }
+ }, "Element.closest with context node '" + aElementId + "' and selector '" + aSelector + "'");
+}
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildentityxhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-entity-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-entity-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-entity-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of Entity References
+
+The result of this test is unknown.
+
+
+PASS Entity References
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildentityxhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-entity-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-entity-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-entity-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,27 @@
</span><ins>+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+[
+<!ENTITY tree "<span id='first_element_child' style='font-weight:bold;'>unknown.</span>">
+]>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<title>Entity References</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<h1>Test of Entity References</h1>
+<div id="log"></div>
+<p id="parentEl">The result of this test is &tree;</p>
+<script><![CDATA[
+test(function() {
+ var parentEl = document.getElementById("parentEl")
+ var fec = parentEl.firstElementChild;
+ assert_true(!!fec)
+ assert_equals(fec.nodeType, 1)
+ assert_equals(fec.getAttribute("id"), "first_element_child")
+})
+]]></script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of firstElementChild
+
+The result of this test is logged above.
+
+
+PASS firstElementChild
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildnamespaceexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of firstElementChild with namespaces
+
+The result of this test is a unknown.
+
+
+PASS firstElementChild with namespaces
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildnamespacexhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of firstElementChild with namespaces
+
+The result of this test is logged above.
+
+
+PASS firstElementChild with namespaces
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildnamespacexhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:pickle="http://ns.example.org/pickle">
+<head>
+<title>firstElementChild with namespaces</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<h1>Test of firstElementChild with namespaces</h1>
+<div id="parentEl">
+ <pickle:dill id="first_element_child"/>
+</div>
+<div id="log"></div>
+<p id="parentEl">The result of this test is
+<span id="first_element_child" style="font-weight:bold;">logged above.</span></p>
+<script><![CDATA[
+test(function() {
+ var parentEl = document.getElementById("parentEl");
+ var fec = parentEl.firstElementChild;
+ assert_true(!!fec)
+ assert_equals(fec.nodeType, 1)
+ assert_equals(fec.getAttribute("id"), "first_element_child")
+ assert_equals(fec.localName, "dill")
+})
+]]></script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildnamespacehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>firstElementChild with namespaces</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<h1>Test of firstElementChild with namespaces</h1>
+<div id="log"></div>
+<p id="parentEl">The result of this test is a unknown.</p>
+<script>
+test(function() {
+ var parentEl = document.getElementById("parentEl")
+ var el = document.createElementNS("http://ns.example.org/pickle", "pickle:dill")
+ el.setAttribute("id", "first_element_child")
+ parentEl.appendChild(el)
+ var fec = parentEl.firstElementChild
+ assert_true(!!fec)
+ assert_equals(fec.nodeType, 1)
+ assert_equals(fec.getAttribute("id"), "first_element_child")
+ assert_equals(fec.localName, "dill")
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildxhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of firstElementChild
+
+The result of this test is logged above.
+
+
+PASS firstElementChild
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildxhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>firstElementChild</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<h1>Test of firstElementChild</h1>
+<div id="log"></div>
+<p id="parentEl">The result of this test is
+<span id="first_element_child" style="font-weight:bold;">logged above.</span></p>
+<script><![CDATA[
+test(function() {
+ var parentEl = document.getElementById("parentEl");
+ var fec = parentEl.firstElementChild;
+ assert_true(!!fec)
+ assert_equals(fec.nodeType, 1)
+ assert_equals(fec.getAttribute("id"), "first_element_child")
+})
+]]></script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementfirstElementChildhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>firstElementChild</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<h1>Test of firstElementChild</h1>
+<div id="log"></div>
+<p id="parentEl">The result of this test is
+<span id="first_element_child" style="font-weight:bold;">logged above.</span></p>
+<script>
+test(function() {
+ var parentEl = document.getElementById("parentEl");
+ var fec = parentEl.firstElementChild;
+ assert_true(!!fec)
+ assert_equals(fec.nodeType, 1)
+ assert_equals(fec.getAttribute("id"), "first_element_child")
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementgetElementsByClassNameexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByClassName-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByClassName-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByClassName-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+
+PASS getElementsByClassName should work on disconnected subtrees.
+PASS Interface should be correct.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementgetElementsByClassNamehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByClassName.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByClassName.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByClassName.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+<!DOCTYPE html>
+<title>Element.getElementsByClassName</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ var a = document.createElement("a"), b = document.createElement("b")
+ b.className = "foo"
+ a.appendChild(b)
+ var list = a.getElementsByClassName("foo")
+ assert_array_equals(list, [b])
+ var secondList = a.getElementsByClassName("foo")
+ assert_true(list === secondList || list !== secondList, "Caching is allowed.")
+}, "getElementsByClassName should work on disconnected subtrees.")
+test(function() {
+ var list = document.getElementsByClassName("foo")
+ assert_false(list instanceof NodeList, "NodeList")
+ assert_true(list instanceof HTMLCollection, "HTMLCollection")
+}, "Interface should be correct.")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementgetElementsByTagNameexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagName-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagName-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagName-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+
+PASS Interfaces
+PASS Caching is allowed
+FAIL Shouldn't be able to set unsigned properties on a HTMLCollection (non-strict mode) assert_equals: expected (undefined) undefined but got (string) "foopy"
+FAIL Shouldn't be able to set unsigned properties on a HTMLCollection (strict mode) assert_throws: function "function () {
+ "use strict";
+ l[5] = "foopy"
+ }" did not throw
+PASS Should be able to set expando shadowing a proto prop (item)
+PASS Should be able to set expando shadowing a proto prop (namedItem)
+FAIL hasOwnProperty, getOwnPropertyDescriptor, getOwnPropertyNames assert_array_equals: lengths differ, expected 2 got 3
+PASS HTML element with uppercase tagName never matches in HTML Documents
+PASS Element in non-HTML namespace, no prefix, lowercase name
+PASS Element in non-HTML namespace, no prefix, uppercase name
+PASS Element in non-HTML namespace, prefix, lowercase name
+PASS Element in non-HTML namespace, prefix, uppercase name
+FAIL Element in HTML namespace, no prefix, non-ascii characters in name assert_equals: expected "aÇ" but got "aç"
+PASS Element in non-HTML namespace, non-ascii characters in name
+PASS Element in HTML namespace, prefix, non-ascii characters in name
+PASS Element in non-HTML namespace, prefix, non-ascii characters in name
+PASS getElementsByTagName('*')
+PASS Matching the context object
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementgetElementsByTagNamehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagName.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagName.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagName.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,30 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Element.getElementsByTagName</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-getelementsbytagname">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="Document-Element-getElementsByTagName.js"></script>
+<div id="log"></div>
+<script>
+var element;
+setup(function() {
+ element = document.createElement("div");
+ element.appendChild(document.createTextNode("text"));
+ var p = element.appendChild(document.createElement("p"));
+ p.appendChild(document.createElement("a"))
+ .appendChild(document.createTextNode("link"));
+ p.appendChild(document.createElement("b"))
+ .appendChild(document.createTextNode("bold"));
+ p.appendChild(document.createElement("em"))
+ .appendChild(document.createElement("u"))
+ .appendChild(document.createTextNode("emphasized"));
+ element.appendChild(document.createComment("comment"));
+});
+
+test_getElementsByTagName(element, element);
+
+test(function() {
+ assert_array_equals(element.getElementsByTagName(element.localName), []);
+}, "Matching the context object");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementgetElementsByTagNameNSexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagNameNS-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagNameNS-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagNameNS-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+
+PASS Element.getElementsByTagNameNS
+PASS getElementsByTagNameNS('*', 'body')
+PASS Empty string namespace
+PASS body element in test namespace, no prefix
+PASS body element in test namespace, prefix
+PASS BODY element in test namespace, no prefix
+PASS abc element in html namespace
+PASS ABC element in html namespace
+PASS AÇ, case sensitivity
+PASS BODY element in test namespace, prefix
+PASS getElementsByTagNameNS('http://www.w3.org/1999/xhtml', '*')
+PASS getElementsByTagNameNS('*', '*')
+PASS Empty lists
+PASS Matching the context object (wildcard namespace)
+PASS Matching the context object (specific namespace)
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementgetElementsByTagNameNShtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagNameNS.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagNameNS.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagNameNS.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Element.getElementsByTagNameNS</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-getelementsbytagnamens">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="Document-Element-getElementsByTagNameNS.js"></script>
+<div id="log"></div>
+<script>
+var element;
+setup(function() {
+ element = document.createElement("div");
+ element.appendChild(document.createTextNode("text"));
+ var p = element.appendChild(document.createElement("p"));
+ p.appendChild(document.createElement("a"))
+ .appendChild(document.createTextNode("link"));
+ p.appendChild(document.createElement("b"))
+ .appendChild(document.createTextNode("bold"));
+ p.appendChild(document.createElement("em"))
+ .appendChild(document.createElement("u"))
+ .appendChild(document.createTextNode("emphasized"));
+ element.appendChild(document.createComment("comment"));
+});
+
+test_getElementsByTagNameNS(element, element);
+
+test(function() {
+ assert_array_equals(element.getElementsByTagNameNS("*", element.localName), []);
+}, "Matching the context object (wildcard namespace)");
+
+test(function() {
+ assert_array_equals(
+ element.getElementsByTagNameNS("http://www.w3.org/1999/xhtml",
+ element.localName),
+ []);
+}, "Matching the context object (specific namespace)");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementlastElementChildexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of lastElementChild
+
+The result of this test is logged above.
+
+
+PASS lastElementChild
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementlastElementChildxhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of firstElementChild
+
+The result of this test is logged above.
+
+
+PASS firstElementChild
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementlastElementChildxhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>firstElementChild</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<h1>Test of firstElementChild</h1>
+<div id="log"></div>
+<p id="parentEl">The result of <span id="first_element_child">this test</span> is <span id="last_element_child" style="font-weight:bold;">logged</span> above.</p>
+<script><![CDATA[
+test(function() {
+ var parentEl = document.getElementById("parentEl");
+ var lec = parentEl.lastElementChild;
+ assert_true(!!lec)
+ assert_equals(lec.nodeType, 1)
+ assert_equals(lec.getAttribute("id"), "last_element_child")
+})
+]]></script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementlastElementChildhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>lastElementChild</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<h1>Test of lastElementChild</h1>
+<div id="log"></div>
+<p id="parentEl">The result of <span id="first_element_child">this test</span> is <span id="last_element_child" style="font-weight:bold;">logged</span> above.</p>
+<script>
+test(function() {
+ var parentEl = document.getElementById("parentEl");
+ var lec = parentEl.lastElementChild;
+ assert_true(!!lec)
+ assert_equals(lec.nodeType, 1)
+ assert_equals(lec.getAttribute("id"), "last_element_child")
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementmatchesexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-matches-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-matches-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-matches-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,737 @@
</span><ins>+This test requires JavaScript.
+
+PASS Selectors-API Level 2 Test Suite: HTML with Selectors Level 3
+PASS Detached Element supports matches
+PASS In-document Element supports matches
+PASS DIV Element.matches(null)
+PASS DIV Element.matches(undefined)
+PASS DIV Element.matches no parameter
+PASS NULL Element.matches(null)
+PASS NULL Element.matches(undefined)
+PASS NULL Element.matches no parameter
+PASS UNDEFINED Element.matches(null)
+PASS UNDEFINED Element.matches(undefined)
+PASS UNDEFINED Element.matches no parameter
+PASS Detached Element.matches: Empty String:
+PASS Detached Element.matches: Invalid character: [
+PASS Detached Element.matches: Invalid character: ]
+PASS Detached Element.matches: Invalid character: (
+PASS Detached Element.matches: Invalid character: )
+PASS Detached Element.matches: Invalid character: {
+PASS Detached Element.matches: Invalid character: }
+PASS Detached Element.matches: Invalid character: <
+PASS Detached Element.matches: Invalid character: >
+PASS Detached Element.matches: Invalid ID: #
+PASS Detached Element.matches: Invalid group of selectors: div,
+PASS Detached Element.matches: Invalid class: .
+PASS Detached Element.matches: Invalid class: .5cm
+PASS Detached Element.matches: Invalid class: ..test
+PASS Detached Element.matches: Invalid class: .foo..quux
+PASS Detached Element.matches: Invalid class: .bar.
+PASS Detached Element.matches: Invalid combinator: div & address, p
+FAIL Detached Element.matches: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.matches(q)
+ }" did not throw
+PASS Detached Element.matches: Invalid combinator: div ++ address, p
+PASS Detached Element.matches: Invalid combinator: div ~~ address, p
+PASS Detached Element.matches: Invalid [att=value] selector: [*=test]
+PASS Detached Element.matches: Invalid [att=value] selector: [*|*=test]
+PASS Detached Element.matches: Invalid [att=value] selector: [class= space unquoted ]
+PASS Detached Element.matches: Unknown pseudo-class: div:example
+PASS Detached Element.matches: Unknown pseudo-class: :example
+PASS Detached Element.matches: Unknown pseudo-element: div::example
+PASS Detached Element.matches: Unknown pseudo-element: ::example
+PASS Detached Element.matches: Invalid pseudo-element: :::before
+FAIL Detached Element.matches: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.matches(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Detached Element.matches: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.matches(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+PASS Detached Element.matches: Invalid namespace: ^|div
+PASS Detached Element.matches: Invalid namespace: $|div
+PASS In-document Element.matches: Empty String:
+PASS In-document Element.matches: Invalid character: [
+PASS In-document Element.matches: Invalid character: ]
+PASS In-document Element.matches: Invalid character: (
+PASS In-document Element.matches: Invalid character: )
+PASS In-document Element.matches: Invalid character: {
+PASS In-document Element.matches: Invalid character: }
+PASS In-document Element.matches: Invalid character: <
+PASS In-document Element.matches: Invalid character: >
+PASS In-document Element.matches: Invalid ID: #
+PASS In-document Element.matches: Invalid group of selectors: div,
+PASS In-document Element.matches: Invalid class: .
+PASS In-document Element.matches: Invalid class: .5cm
+PASS In-document Element.matches: Invalid class: ..test
+PASS In-document Element.matches: Invalid class: .foo..quux
+PASS In-document Element.matches: Invalid class: .bar.
+PASS In-document Element.matches: Invalid combinator: div & address, p
+FAIL In-document Element.matches: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.matches(q)
+ }" did not throw
+PASS In-document Element.matches: Invalid combinator: div ++ address, p
+PASS In-document Element.matches: Invalid combinator: div ~~ address, p
+PASS In-document Element.matches: Invalid [att=value] selector: [*=test]
+PASS In-document Element.matches: Invalid [att=value] selector: [*|*=test]
+PASS In-document Element.matches: Invalid [att=value] selector: [class= space unquoted ]
+PASS In-document Element.matches: Unknown pseudo-class: div:example
+PASS In-document Element.matches: Unknown pseudo-class: :example
+PASS In-document Element.matches: Unknown pseudo-element: div::example
+PASS In-document Element.matches: Unknown pseudo-element: ::example
+PASS In-document Element.matches: Invalid pseudo-element: :::before
+FAIL In-document Element.matches: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.matches(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL In-document Element.matches: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.matches(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+PASS In-document Element.matches: Invalid namespace: ^|div
+PASS In-document Element.matches: Invalid namespace: $|div
+PASS In-document Element.matches: Type selector, matching html element (with no refNodes): html
+PASS In-document Element.matches: Type selector, matching body element (with no refNodes): body
+PASS In-document Element.matches: Universal selector, matching all children of element with specified ID (with no refNodes): #universal>*
+PASS In-document Element.matches: Universal selector, matching all grandchildren of element with specified ID (with no refNodes): #universal>*>*
+PASS In-document Element.matches: Universal selector, matching all descendants of element with specified ID (with no refNodes): #universal *
+PASS In-document Element.matches: Attribute presence selector, matching align attribute with value (with no refNodes): .attr-presence-div1[align]
+PASS In-document Element.matches: Attribute presence selector, matching align attribute with empty value (with no refNodes): .attr-presence-div2[align]
+PASS In-document Element.matches: Attribute presence selector, matching title attribute, case insensitivity (with no refNodes): #attr-presence [TiTlE]
+PASS In-document Element.matches: Attribute presence selector, matching custom data-* attribute (with no refNodes): [data-attr-presence]
+PASS In-document Element.matches: Attribute presence selector, matching attribute with non-ASCII characters (with no refNodes): ul[data-中文]
+PASS In-document Element.matches: Attribute presence selector, matching option with selected attribute (with no refNodes): #attr-presence-select2 option[selected]
+PASS In-document Element.matches: Attribute presence selector, matching multiple options with selected attributes (with no refNodes): #attr-presence-select3 option[selected]
+PASS In-document Element.matches: Attribute value selector, matching align attribute with value (with no refNodes): #attr-value [align="center"]
+PASS In-document Element.matches: Attribute value selector, matching align attribute with empty value (with no refNodes): #attr-value [align=""]
+PASS In-document Element.matches: Attribute value selector, matching custom data-* attribute with unicode escaped value (with no refNodes): [data-attr-value="\e9"]
+PASS In-document Element.matches: Attribute value selector, matching custom data-* attribute with escaped character (with no refNodes): [data-attr-value_foo="\e9"]
+PASS In-document Element.matches: Attribute value selector with single-quoted value, matching multiple inputs with type attributes (with no refNodes): #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS In-document Element.matches: Attribute value selector with double-quoted value, matching multiple inputs with type attributes (with no refNodes): #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS In-document Element.matches: Attribute value selector with unquoted value, matching multiple inputs with type attributes (with no refNodes): #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS In-document Element.matches: Attribute value selector, matching attribute with value using non-ASCII characters (with no refNodes): [data-attr-value=中文]
+PASS In-document Element.matches: Attribute whitespace-separated list selector, matching class attribute with value (with no refNodes): #attr-whitespace [class~="div1"]
+PASS In-document Element.matches: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value (with no refNodes): [data-attr-whitespace~="\0000e9"]
+PASS In-document Element.matches: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character (with no refNodes): [data-attr-whitespace_foo~="\e9"]
+PASS In-document Element.matches: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes (with no refNodes): #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS In-document Element.matches: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes (with no refNodes): #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS In-document Element.matches: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes (with no refNodes): #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS In-document Element.matches: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters (with no refNodes): #attr-whitespace [title~=中文]
+PASS In-document Element.matches: Attribute hyphen-separated list selector, matching lang attribute with exact value (with no refNodes): #attr-hyphen-div2[lang|="fr"]
+PASS In-document Element.matches: Attribute hyphen-separated list selector, matching lang attribute with partial value (with no refNodes): #attr-hyphen-div3[lang|="en"]
+PASS In-document Element.matches: Attribute begins with selector, matching href attributes beginning with specified substring (with no refNodes): #attr-begins a[href^="http://www"]
+PASS In-document Element.matches: Attribute begins with selector, matching lang attributes beginning with specified substring, (with no refNodes): #attr-begins [lang^="en-"]
+PASS In-document Element.matches: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring (with no refNodes): #attr-begins [class^=' apple']
+PASS In-document Element.matches: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring (with no refNodes): #attr-begins [class^=" apple"]
+PASS In-document Element.matches: Attribute ends with selector, matching href attributes ending with specified substring (with no refNodes): #attr-ends a[href$=".org"]
+PASS In-document Element.matches: Attribute ends with selector, matching lang attributes ending with specified substring, (with no refNodes): #attr-ends [lang$="-CH"]
+PASS In-document Element.matches: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring (with no refNodes): #attr-ends [class$='apple ']
+PASS In-document Element.matches: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring (with no refNodes): #attr-ends [class$="apple "]
+PASS In-document Element.matches: Attribute contains selector, matching href attributes beginning with specified substring (with no refNodes): #attr-contains a[href*="http://www"]
+PASS In-document Element.matches: Attribute contains selector, matching href attributes ending with specified substring (with no refNodes): #attr-contains a[href*=".org"]
+PASS In-document Element.matches: Attribute contains selector, matching href attributes containing specified substring (with no refNodes): #attr-contains a[href*=".example."]
+PASS In-document Element.matches: Attribute contains selector, matching lang attributes beginning with specified substring, (with no refNodes): #attr-contains [lang*="en-"]
+PASS In-document Element.matches: Attribute contains selector, matching lang attributes ending with specified substring, (with no refNodes): #attr-contains [lang*="-CH"]
+PASS In-document Element.matches: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring (with no refNodes): #attr-contains [class*=' apple']
+PASS In-document Element.matches: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring (with no refNodes): #attr-contains [class*='orange ']
+PASS In-document Element.matches: Attribute contains selector with single-quoted value, matching class attribute containing specified substring (with no refNodes): #attr-contains [class*='ple banana ora']
+PASS In-document Element.matches: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring (with no refNodes): #attr-contains [class*=" apple"]
+PASS In-document Element.matches: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring (with no refNodes): #attr-contains [class*="orange "]
+PASS In-document Element.matches: Attribute contains selector with double-quoted value, matching class attribute containing specified substring (with no refNodes): #attr-contains [class*="ple banana ora"]
+PASS In-document Element.matches: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring (with no refNodes): #attr-contains [class*= apple]
+PASS In-document Element.matches: Attribute contains selector with unquoted value, matching class attribute ending with specified substring (with no refNodes): #attr-contains [class*=orange ]
+PASS In-document Element.matches: Attribute contains selector with unquoted value, matching class attribute containing specified substring (with no refNodes): #attr-contains [class*= banana ]
+PASS In-document Element.matches: :root pseudo-class selector, matching document root element (with no refNodes): :root
+PASS In-document Element.matches: :nth-child selector, matching the third child element (with no refNodes): #pseudo-nth-table1 :nth-child(3)
+PASS In-document Element.matches: :nth-child selector, matching every third child element (with no refNodes): #pseudo-nth li:nth-child(3n)
+PASS In-document Element.matches: :nth-child selector, matching every second child element, starting from the fourth (with no refNodes): #pseudo-nth li:nth-child(2n+4)
+PASS In-document Element.matches: :nth-child selector, matching every fourth child element, starting from the third (with no refNodes): #pseudo-nth-p1 :nth-child(4n-1)
+PASS In-document Element.matches: :nth-last-child selector, matching the third last child element (with no refNodes): #pseudo-nth-table1 :nth-last-child(3)
+PASS In-document Element.matches: :nth-last-child selector, matching every third child element from the end (with no refNodes): #pseudo-nth li:nth-last-child(3n)
+PASS In-document Element.matches: :nth-last-child selector, matching every second child element from the end, starting from the fourth last (with no refNodes): #pseudo-nth li:nth-last-child(2n+4)
+PASS In-document Element.matches: :nth-last-child selector, matching every fourth element from the end, starting from the third last (with no refNodes): #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS In-document Element.matches: :nth-of-type selector, matching the third em element (with no refNodes): #pseudo-nth-p1 em:nth-of-type(3)
+PASS In-document Element.matches: :nth-of-type selector, matching every second element of their type (with no refNodes): #pseudo-nth-p1 :nth-of-type(2n)
+PASS In-document Element.matches: :nth-of-type selector, matching every second elemetn of their type, starting from the first (with no refNodes): #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS In-document Element.matches: :nth-last-of-type selector, matching the thrid last em element (with no refNodes): #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS In-document Element.matches: :nth-last-of-type selector, matching every second last element of their type (with no refNodes): #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS In-document Element.matches: :nth-last-of-type selector, matching every second last element of their type, starting from the last (with no refNodes): #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS In-document Element.matches: :first-of-type selector, matching the first em element (with no refNodes): #pseudo-nth-p1 em:first-of-type
+PASS In-document Element.matches: :first-of-type selector, matching the first of every type of element (with no refNodes): #pseudo-nth-p1 :first-of-type
+PASS In-document Element.matches: :first-of-type selector, matching the first td element in each table row (with no refNodes): #pseudo-nth-table1 tr :first-of-type
+PASS In-document Element.matches: :last-of-type selector, matching the last em elemnet (with no refNodes): #pseudo-nth-p1 em:last-of-type
+PASS In-document Element.matches: :last-of-type selector, matching the last of every type of element (with no refNodes): #pseudo-nth-p1 :last-of-type
+PASS In-document Element.matches: :last-of-type selector, matching the last td element in each table row (with no refNodes): #pseudo-nth-table1 tr :last-of-type
+PASS In-document Element.matches: :first-child pseudo-class selector, matching first child div element (with no refNodes): #pseudo-first-child div:first-child
+PASS In-document Element.matches: :first-child pseudo-class selector, matching first-child of multiple elements (with no refNodes): #pseudo-first-child span:first-child
+PASS In-document Element.matches: :last-child pseudo-class selector, matching last child div element (with no refNodes): #pseudo-last-child div:last-child
+PASS In-document Element.matches: :last-child pseudo-class selector, matching first-child of multiple elements (with no refNodes): #pseudo-last-child span:last-child
+PASS In-document Element.matches: :pseudo-only-child pseudo-class selector, matching all only-child elements (with no refNodes): #pseudo-only :only-child
+PASS In-document Element.matches: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type (with no refNodes): #pseudo-only :only-of-type
+PASS In-document Element.matches: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type (with no refNodes): #pseudo-only em:only-of-type
+PASS In-document Element.matches: :empty pseudo-class selector, matching empty p elements (with no refNodes): #pseudo-empty p:empty
+PASS In-document Element.matches: :empty pseudo-class selector, matching all empty elements (with no refNodes): #pseudo-empty :empty
+PASS In-document Element.matches: :link and :visited pseudo-class selectors, matching a and area elements with href attributes (with no refNodes): #pseudo-link :link, #pseudo-link :visited
+PASS In-document Element.matches: :link and :visited pseudo-class selectors, matching link elements with href attributes (with no refNodes): #head :link, #head :visited
+PASS In-document Element.matches: :target pseudo-class selector, matching the element referenced by the URL fragment identifier (with no refNodes): :target
+PASS In-document Element.matches: :lang pseudo-class selector, matching inherited language (with no refNodes): #pseudo-lang-div1:lang(en)
+PASS In-document Element.matches: :lang pseudo-class selector, matching specified language with exact value (with no refNodes): #pseudo-lang-div2:lang(fr)
+PASS In-document Element.matches: :lang pseudo-class selector, matching specified language with partial value (with no refNodes): #pseudo-lang-div3:lang(en)
+PASS In-document Element.matches: :enabled pseudo-class selector, matching all enabled form controls (with no refNodes): #pseudo-ui :enabled
+PASS In-document Element.matches: :enabled pseudo-class selector, matching all disabled form controls (with no refNodes): #pseudo-ui :disabled
+PASS In-document Element.matches: :checked pseudo-class selector, matching checked radio buttons and checkboxes (with no refNodes): #pseudo-ui :checked
+PASS In-document Element.matches: :not pseudo-class selector, matching (with no refNodes): #not>:not(div)
+PASS In-document Element.matches: :not pseudo-class selector, matching (with no refNodes): #not * :not(:first-child)
+PASS In-document Element.matches: Class selector, matching element with specified class (with no refNodes): .class-p
+PASS In-document Element.matches: Class selector, chained, matching only elements with all specified classes (with no refNodes): #class .apple.orange.banana
+PASS In-document Element.matches: Class Selector, chained, with type selector (with no refNodes): div.apple.banana.orange
+PASS In-document Element.matches: Class selector, matching element with class value using non-ASCII characters (with no refNodes): .台北Táiběi
+PASS In-document Element.matches: Class selector, matching multiple elements with class value using non-ASCII characters (with no refNodes): .台北
+PASS In-document Element.matches: Class selector, chained, matching element with multiple class values using non-ASCII characters (with no refNodes): .台北Táiběi.台北
+PASS In-document Element.matches: Class selector, matching element with class with escaped character (with no refNodes): .foo\:bar
+PASS In-document Element.matches: Class selector, matching element with class with escaped character (with no refNodes): .test\.foo\[5\]bar
+PASS In-document Element.matches: ID selector, matching element with specified id (with no refNodes): #id #id-div1
+PASS In-document Element.matches: ID selector, chained, matching element with specified id (with no refNodes): #id-div1, #id-div1
+PASS In-document Element.matches: ID selector, chained, matching element with specified id (with no refNodes): #id-div1, #id-div2
+PASS In-document Element.matches: ID Selector, chained, with type selector (with no refNodes): div#id-div1, div#id-div2
+PASS In-document Element.matches: ID selector, matching multiple elements with duplicate id (with no refNodes): #id-li-duplicate
+PASS In-document Element.matches: ID selector, matching id value using non-ASCII characters (with no refNodes): #台北Táiběi
+PASS In-document Element.matches: ID selector, matching id value using non-ASCII characters (with no refNodes): #台北
+PASS In-document Element.matches: ID selector, matching id values using non-ASCII characters (with no refNodes): #台北Táiběi, #台北
+PASS In-document Element.matches: Descendant combinator, matching element that is a descendant of an element with id (with no refNodes): #descendant div
+PASS In-document Element.matches: Descendant combinator, matching element with id that is a descendant of an element (with no refNodes): body #descendant-div1
+PASS In-document Element.matches: Descendant combinator, matching element with id that is a descendant of an element (with no refNodes): div #descendant-div1
+PASS In-document Element.matches: Descendant combinator, matching element with id that is a descendant of an element with id (with no refNodes): #descendant #descendant-div2
+PASS In-document Element.matches: Descendant combinator, matching element with class that is a descendant of an element with id (with no refNodes): #descendant .descendant-div2
+PASS In-document Element.matches: Descendant combinator, matching element with class that is a descendant of an element with class (with no refNodes): .descendant-div1 .descendant-div3
+PASS In-document Element.matches: Descendant combinator, whitespace characters (with no refNodes): #descendant        
+#descendant-div2
+PASS In-document Element.matches: Child combinator, matching element that is a child of an element with id (with no refNodes): #child>div
+PASS In-document Element.matches: Child combinator, matching element with id that is a child of an element (with no refNodes): div>#child-div1
+PASS In-document Element.matches: Child combinator, matching element with id that is a child of an element with id (with no refNodes): #child>#child-div1
+PASS In-document Element.matches: Child combinator, matching element with id that is a child of an element with class (with no refNodes): #child-div1>.child-div2
+PASS In-document Element.matches: Child combinator, matching element with class that is a child of an element with class (with no refNodes): .child-div1>.child-div2
+PASS In-document Element.matches: Child combinator, surrounded by whitespace (with no refNodes): #child-div1        
+>        
+#child-div2
+PASS In-document Element.matches: Child combinator, whitespace after (with no refNodes): #child-div1>        
+#child-div2
+PASS In-document Element.matches: Child combinator, whitespace before (with no refNodes): #child-div1        
+>#child-div2
+PASS In-document Element.matches: Child combinator, no whitespace (with no refNodes): #child-div1>#child-div2
+PASS In-document Element.matches: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id (with no refNodes): #adjacent-div2+div
+PASS In-document Element.matches: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element (with no refNodes): div+#adjacent-div4
+PASS In-document Element.matches: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id (with no refNodes): #adjacent-div2+#adjacent-div4
+PASS In-document Element.matches: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id (with no refNodes): #adjacent-div2+.adjacent-div4
+PASS In-document Element.matches: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class (with no refNodes): .adjacent-div2+.adjacent-div4
+PASS In-document Element.matches: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element (with no refNodes): #adjacent div+p
+PASS In-document Element.matches: Adjacent sibling combinator, surrounded by whitespace (with no refNodes): #adjacent-p2        
++        
+#adjacent-p3
+PASS In-document Element.matches: Adjacent sibling combinator, whitespace after (with no refNodes): #adjacent-p2+        
+#adjacent-p3
+PASS In-document Element.matches: Adjacent sibling combinator, whitespace before (with no refNodes): #adjacent-p2        
++#adjacent-p3
+PASS In-document Element.matches: Adjacent sibling combinator, no whitespace (with no refNodes): #adjacent-p2+#adjacent-p3
+PASS In-document Element.matches: General sibling combinator, matching element that is a sibling of an element with id (with no refNodes): #sibling-div2~div
+PASS In-document Element.matches: General sibling combinator, matching element with id that is a sibling of an element (with no refNodes): div~#sibling-div4
+PASS In-document Element.matches: General sibling combinator, matching element with id that is a sibling of an element with id (with no refNodes): #sibling-div2~#sibling-div4
+PASS In-document Element.matches: General sibling combinator, matching element with class that is a sibling of an element with id (with no refNodes): #sibling-div2~.sibling-div
+PASS In-document Element.matches: General sibling combinator, matching p element that is a sibling of a div element (with no refNodes): #sibling div~p
+PASS In-document Element.matches: General sibling combinator, surrounded by whitespace (with no refNodes): #sibling-p2        
+~        
+#sibling-p3
+PASS In-document Element.matches: General sibling combinator, whitespace after (with no refNodes): #sibling-p2~        
+#sibling-p3
+PASS In-document Element.matches: General sibling combinator, whitespace before (with no refNodes): #sibling-p2        
+~#sibling-p3
+PASS In-document Element.matches: General sibling combinator, no whitespace (with no refNodes): #sibling-p2~#sibling-p3
+PASS In-document Element.matches: Syntax, group of selectors separator, surrounded by whitespace (with no refNodes): #group em        
+
+,        
+
+#group strong
+PASS In-document Element.matches: Syntax, group of selectors separator, whitespace after (with no refNodes): #group em,        
+#group strong
+PASS In-document Element.matches: Syntax, group of selectors separator, whitespace before (with no refNodes): #group em        
+,#group strong
+PASS In-document Element.matches: Syntax, group of selectors separator, no whitespace (with no refNodes): #group em,#group strong
+PASS Detached Element.matches: Universal selector, matching all children of element with specified ID (with no refNodes): #universal>*
+PASS Detached Element.matches: Universal selector, matching all grandchildren of element with specified ID (with no refNodes): #universal>*>*
+PASS Detached Element.matches: Universal selector, matching all descendants of element with specified ID (with no refNodes): #universal *
+PASS Detached Element.matches: Attribute presence selector, matching align attribute with value (with no refNodes): .attr-presence-div1[align]
+PASS Detached Element.matches: Attribute presence selector, matching align attribute with empty value (with no refNodes): .attr-presence-div2[align]
+PASS Detached Element.matches: Attribute presence selector, matching title attribute, case insensitivity (with no refNodes): #attr-presence [TiTlE]
+PASS Detached Element.matches: Attribute presence selector, matching custom data-* attribute (with no refNodes): [data-attr-presence]
+PASS Detached Element.matches: Attribute presence selector, matching attribute with non-ASCII characters (with no refNodes): ul[data-中文]
+PASS Detached Element.matches: Attribute presence selector, matching option with selected attribute (with no refNodes): #attr-presence-select2 option[selected]
+PASS Detached Element.matches: Attribute presence selector, matching multiple options with selected attributes (with no refNodes): #attr-presence-select3 option[selected]
+PASS Detached Element.matches: Attribute value selector, matching align attribute with value (with no refNodes): #attr-value [align="center"]
+PASS Detached Element.matches: Attribute value selector, matching align attribute with empty value (with no refNodes): #attr-value [align=""]
+PASS Detached Element.matches: Attribute value selector, matching custom data-* attribute with unicode escaped value (with no refNodes): [data-attr-value="\e9"]
+PASS Detached Element.matches: Attribute value selector, matching custom data-* attribute with escaped character (with no refNodes): [data-attr-value_foo="\e9"]
+PASS Detached Element.matches: Attribute value selector with single-quoted value, matching multiple inputs with type attributes (with no refNodes): #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS Detached Element.matches: Attribute value selector with double-quoted value, matching multiple inputs with type attributes (with no refNodes): #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS Detached Element.matches: Attribute value selector with unquoted value, matching multiple inputs with type attributes (with no refNodes): #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS Detached Element.matches: Attribute value selector, matching attribute with value using non-ASCII characters (with no refNodes): [data-attr-value=中文]
+PASS Detached Element.matches: Attribute whitespace-separated list selector, matching class attribute with value (with no refNodes): #attr-whitespace [class~="div1"]
+PASS Detached Element.matches: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value (with no refNodes): [data-attr-whitespace~="\0000e9"]
+PASS Detached Element.matches: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character (with no refNodes): [data-attr-whitespace_foo~="\e9"]
+PASS Detached Element.matches: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes (with no refNodes): #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS Detached Element.matches: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes (with no refNodes): #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS Detached Element.matches: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes (with no refNodes): #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS Detached Element.matches: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters (with no refNodes): #attr-whitespace [title~=中文]
+PASS Detached Element.matches: Attribute hyphen-separated list selector, matching lang attribute with exact value (with no refNodes): #attr-hyphen-div2[lang|="fr"]
+PASS Detached Element.matches: Attribute hyphen-separated list selector, matching lang attribute with partial value (with no refNodes): #attr-hyphen-div3[lang|="en"]
+PASS Detached Element.matches: Attribute begins with selector, matching href attributes beginning with specified substring (with no refNodes): #attr-begins a[href^="http://www"]
+PASS Detached Element.matches: Attribute begins with selector, matching lang attributes beginning with specified substring, (with no refNodes): #attr-begins [lang^="en-"]
+PASS Detached Element.matches: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring (with no refNodes): #attr-begins [class^=' apple']
+PASS Detached Element.matches: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring (with no refNodes): #attr-begins [class^=" apple"]
+PASS Detached Element.matches: Attribute ends with selector, matching href attributes ending with specified substring (with no refNodes): #attr-ends a[href$=".org"]
+PASS Detached Element.matches: Attribute ends with selector, matching lang attributes ending with specified substring, (with no refNodes): #attr-ends [lang$="-CH"]
+PASS Detached Element.matches: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring (with no refNodes): #attr-ends [class$='apple ']
+PASS Detached Element.matches: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring (with no refNodes): #attr-ends [class$="apple "]
+PASS Detached Element.matches: Attribute contains selector, matching href attributes beginning with specified substring (with no refNodes): #attr-contains a[href*="http://www"]
+PASS Detached Element.matches: Attribute contains selector, matching href attributes ending with specified substring (with no refNodes): #attr-contains a[href*=".org"]
+PASS Detached Element.matches: Attribute contains selector, matching href attributes containing specified substring (with no refNodes): #attr-contains a[href*=".example."]
+PASS Detached Element.matches: Attribute contains selector, matching lang attributes beginning with specified substring, (with no refNodes): #attr-contains [lang*="en-"]
+PASS Detached Element.matches: Attribute contains selector, matching lang attributes ending with specified substring, (with no refNodes): #attr-contains [lang*="-CH"]
+PASS Detached Element.matches: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring (with no refNodes): #attr-contains [class*=' apple']
+PASS Detached Element.matches: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring (with no refNodes): #attr-contains [class*='orange ']
+PASS Detached Element.matches: Attribute contains selector with single-quoted value, matching class attribute containing specified substring (with no refNodes): #attr-contains [class*='ple banana ora']
+PASS Detached Element.matches: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring (with no refNodes): #attr-contains [class*=" apple"]
+PASS Detached Element.matches: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring (with no refNodes): #attr-contains [class*="orange "]
+PASS Detached Element.matches: Attribute contains selector with double-quoted value, matching class attribute containing specified substring (with no refNodes): #attr-contains [class*="ple banana ora"]
+PASS Detached Element.matches: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring (with no refNodes): #attr-contains [class*= apple]
+PASS Detached Element.matches: Attribute contains selector with unquoted value, matching class attribute ending with specified substring (with no refNodes): #attr-contains [class*=orange ]
+PASS Detached Element.matches: Attribute contains selector with unquoted value, matching class attribute containing specified substring (with no refNodes): #attr-contains [class*= banana ]
+PASS Detached Element.matches: :nth-child selector, matching the third child element (with no refNodes): #pseudo-nth-table1 :nth-child(3)
+PASS Detached Element.matches: :nth-child selector, matching every third child element (with no refNodes): #pseudo-nth li:nth-child(3n)
+PASS Detached Element.matches: :nth-child selector, matching every second child element, starting from the fourth (with no refNodes): #pseudo-nth li:nth-child(2n+4)
+PASS Detached Element.matches: :nth-child selector, matching every fourth child element, starting from the third (with no refNodes): #pseudo-nth-p1 :nth-child(4n-1)
+PASS Detached Element.matches: :nth-last-child selector, matching the third last child element (with no refNodes): #pseudo-nth-table1 :nth-last-child(3)
+PASS Detached Element.matches: :nth-last-child selector, matching every third child element from the end (with no refNodes): #pseudo-nth li:nth-last-child(3n)
+PASS Detached Element.matches: :nth-last-child selector, matching every second child element from the end, starting from the fourth last (with no refNodes): #pseudo-nth li:nth-last-child(2n+4)
+PASS Detached Element.matches: :nth-last-child selector, matching every fourth element from the end, starting from the third last (with no refNodes): #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS Detached Element.matches: :nth-of-type selector, matching the third em element (with no refNodes): #pseudo-nth-p1 em:nth-of-type(3)
+PASS Detached Element.matches: :nth-of-type selector, matching every second element of their type (with no refNodes): #pseudo-nth-p1 :nth-of-type(2n)
+PASS Detached Element.matches: :nth-of-type selector, matching every second elemetn of their type, starting from the first (with no refNodes): #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS Detached Element.matches: :nth-last-of-type selector, matching the thrid last em element (with no refNodes): #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS Detached Element.matches: :nth-last-of-type selector, matching every second last element of their type (with no refNodes): #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS Detached Element.matches: :nth-last-of-type selector, matching every second last element of their type, starting from the last (with no refNodes): #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS Detached Element.matches: :first-of-type selector, matching the first em element (with no refNodes): #pseudo-nth-p1 em:first-of-type
+PASS Detached Element.matches: :first-of-type selector, matching the first of every type of element (with no refNodes): #pseudo-nth-p1 :first-of-type
+PASS Detached Element.matches: :first-of-type selector, matching the first td element in each table row (with no refNodes): #pseudo-nth-table1 tr :first-of-type
+PASS Detached Element.matches: :last-of-type selector, matching the last em elemnet (with no refNodes): #pseudo-nth-p1 em:last-of-type
+PASS Detached Element.matches: :last-of-type selector, matching the last of every type of element (with no refNodes): #pseudo-nth-p1 :last-of-type
+PASS Detached Element.matches: :last-of-type selector, matching the last td element in each table row (with no refNodes): #pseudo-nth-table1 tr :last-of-type
+PASS Detached Element.matches: :first-child pseudo-class selector, matching first child div element (with no refNodes): #pseudo-first-child div:first-child
+PASS Detached Element.matches: :first-child pseudo-class selector, matching first-child of multiple elements (with no refNodes): #pseudo-first-child span:first-child
+PASS Detached Element.matches: :last-child pseudo-class selector, matching last child div element (with no refNodes): #pseudo-last-child div:last-child
+PASS Detached Element.matches: :last-child pseudo-class selector, matching first-child of multiple elements (with no refNodes): #pseudo-last-child span:last-child
+PASS Detached Element.matches: :pseudo-only-child pseudo-class selector, matching all only-child elements (with no refNodes): #pseudo-only :only-child
+PASS Detached Element.matches: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type (with no refNodes): #pseudo-only :only-of-type
+PASS Detached Element.matches: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type (with no refNodes): #pseudo-only em:only-of-type
+PASS Detached Element.matches: :empty pseudo-class selector, matching empty p elements (with no refNodes): #pseudo-empty p:empty
+PASS Detached Element.matches: :empty pseudo-class selector, matching all empty elements (with no refNodes): #pseudo-empty :empty
+PASS Detached Element.matches: :link and :visited pseudo-class selectors, matching a and area elements with href attributes (with no refNodes): #pseudo-link :link, #pseudo-link :visited
+PASS Detached Element.matches: :lang pseudo-class selector, matching specified language with exact value (with no refNodes): #pseudo-lang-div2:lang(fr)
+PASS Detached Element.matches: :lang pseudo-class selector, matching specified language with partial value (with no refNodes): #pseudo-lang-div3:lang(en)
+PASS Detached Element.matches: :enabled pseudo-class selector, matching all enabled form controls (with no refNodes): #pseudo-ui :enabled
+PASS Detached Element.matches: :enabled pseudo-class selector, matching all disabled form controls (with no refNodes): #pseudo-ui :disabled
+PASS Detached Element.matches: :checked pseudo-class selector, matching checked radio buttons and checkboxes (with no refNodes): #pseudo-ui :checked
+PASS Detached Element.matches: :not pseudo-class selector, matching (with no refNodes): #not>:not(div)
+PASS Detached Element.matches: :not pseudo-class selector, matching (with no refNodes): #not * :not(:first-child)
+PASS Detached Element.matches: Class selector, matching element with specified class (with no refNodes): .class-p
+PASS Detached Element.matches: Class selector, chained, matching only elements with all specified classes (with no refNodes): #class .apple.orange.banana
+PASS Detached Element.matches: Class Selector, chained, with type selector (with no refNodes): div.apple.banana.orange
+PASS Detached Element.matches: Class selector, matching element with class value using non-ASCII characters (with no refNodes): .台北Táiběi
+PASS Detached Element.matches: Class selector, matching multiple elements with class value using non-ASCII characters (with no refNodes): .台北
+PASS Detached Element.matches: Class selector, chained, matching element with multiple class values using non-ASCII characters (with no refNodes): .台北Táiběi.台北
+PASS Detached Element.matches: Class selector, matching element with class with escaped character (with no refNodes): .foo\:bar
+PASS Detached Element.matches: Class selector, matching element with class with escaped character (with no refNodes): .test\.foo\[5\]bar
+PASS Detached Element.matches: ID selector, matching element with specified id (with no refNodes): #id #id-div1
+PASS Detached Element.matches: ID selector, chained, matching element with specified id (with no refNodes): #id-div1, #id-div1
+PASS Detached Element.matches: ID selector, chained, matching element with specified id (with no refNodes): #id-div1, #id-div2
+PASS Detached Element.matches: ID Selector, chained, with type selector (with no refNodes): div#id-div1, div#id-div2
+PASS Detached Element.matches: ID selector, matching multiple elements with duplicate id (with no refNodes): #id-li-duplicate
+PASS Detached Element.matches: ID selector, matching id value using non-ASCII characters (with no refNodes): #台北Táiběi
+PASS Detached Element.matches: ID selector, matching id value using non-ASCII characters (with no refNodes): #台北
+PASS Detached Element.matches: ID selector, matching id values using non-ASCII characters (with no refNodes): #台北Táiběi, #台北
+PASS Detached Element.matches: Descendant combinator, matching element that is a descendant of an element with id (with no refNodes): #descendant div
+PASS Detached Element.matches: Descendant combinator, matching element with id that is a descendant of an element (with no refNodes): div #descendant-div1
+PASS Detached Element.matches: Descendant combinator, matching element with id that is a descendant of an element with id (with no refNodes): #descendant #descendant-div2
+PASS Detached Element.matches: Descendant combinator, matching element with class that is a descendant of an element with id (with no refNodes): #descendant .descendant-div2
+PASS Detached Element.matches: Descendant combinator, matching element with class that is a descendant of an element with class (with no refNodes): .descendant-div1 .descendant-div3
+PASS Detached Element.matches: Descendant combinator, whitespace characters (with no refNodes): #descendant        
+#descendant-div2
+PASS Detached Element.matches: Child combinator, matching element that is a child of an element with id (with no refNodes): #child>div
+PASS Detached Element.matches: Child combinator, matching element with id that is a child of an element (with no refNodes): div>#child-div1
+PASS Detached Element.matches: Child combinator, matching element with id that is a child of an element with id (with no refNodes): #child>#child-div1
+PASS Detached Element.matches: Child combinator, matching element with id that is a child of an element with class (with no refNodes): #child-div1>.child-div2
+PASS Detached Element.matches: Child combinator, matching element with class that is a child of an element with class (with no refNodes): .child-div1>.child-div2
+PASS Detached Element.matches: Child combinator, surrounded by whitespace (with no refNodes): #child-div1        
+>        
+#child-div2
+PASS Detached Element.matches: Child combinator, whitespace after (with no refNodes): #child-div1>        
+#child-div2
+PASS Detached Element.matches: Child combinator, whitespace before (with no refNodes): #child-div1        
+>#child-div2
+PASS Detached Element.matches: Child combinator, no whitespace (with no refNodes): #child-div1>#child-div2
+PASS Detached Element.matches: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id (with no refNodes): #adjacent-div2+div
+PASS Detached Element.matches: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element (with no refNodes): div+#adjacent-div4
+PASS Detached Element.matches: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id (with no refNodes): #adjacent-div2+#adjacent-div4
+PASS Detached Element.matches: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id (with no refNodes): #adjacent-div2+.adjacent-div4
+PASS Detached Element.matches: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class (with no refNodes): .adjacent-div2+.adjacent-div4
+PASS Detached Element.matches: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element (with no refNodes): #adjacent div+p
+PASS Detached Element.matches: Adjacent sibling combinator, surrounded by whitespace (with no refNodes): #adjacent-p2        
++        
+#adjacent-p3
+PASS Detached Element.matches: Adjacent sibling combinator, whitespace after (with no refNodes): #adjacent-p2+        
+#adjacent-p3
+PASS Detached Element.matches: Adjacent sibling combinator, whitespace before (with no refNodes): #adjacent-p2        
++#adjacent-p3
+PASS Detached Element.matches: Adjacent sibling combinator, no whitespace (with no refNodes): #adjacent-p2+#adjacent-p3
+PASS Detached Element.matches: General sibling combinator, matching element that is a sibling of an element with id (with no refNodes): #sibling-div2~div
+PASS Detached Element.matches: General sibling combinator, matching element with id that is a sibling of an element (with no refNodes): div~#sibling-div4
+PASS Detached Element.matches: General sibling combinator, matching element with id that is a sibling of an element with id (with no refNodes): #sibling-div2~#sibling-div4
+PASS Detached Element.matches: General sibling combinator, matching element with class that is a sibling of an element with id (with no refNodes): #sibling-div2~.sibling-div
+PASS Detached Element.matches: General sibling combinator, matching p element that is a sibling of a div element (with no refNodes): #sibling div~p
+PASS Detached Element.matches: General sibling combinator, surrounded by whitespace (with no refNodes): #sibling-p2        
+~        
+#sibling-p3
+PASS Detached Element.matches: General sibling combinator, whitespace after (with no refNodes): #sibling-p2~        
+#sibling-p3
+PASS Detached Element.matches: General sibling combinator, whitespace before (with no refNodes): #sibling-p2        
+~#sibling-p3
+PASS Detached Element.matches: General sibling combinator, no whitespace (with no refNodes): #sibling-p2~#sibling-p3
+PASS Detached Element.matches: Syntax, group of selectors separator, surrounded by whitespace (with no refNodes): #group em        
+
+,        
+
+#group strong
+PASS Detached Element.matches: Syntax, group of selectors separator, whitespace after (with no refNodes): #group em,        
+#group strong
+PASS Detached Element.matches: Syntax, group of selectors separator, whitespace before (with no refNodes): #group em        
+,#group strong
+PASS Detached Element.matches: Syntax, group of selectors separator, no whitespace (with no refNodes): #group em,#group strong
+PASS Fragment Element.matches: Universal selector, matching all children of element with specified ID (with no refNodes): #universal>*
+PASS Fragment Element.matches: Universal selector, matching all grandchildren of element with specified ID (with no refNodes): #universal>*>*
+PASS Fragment Element.matches: Universal selector, matching all descendants of element with specified ID (with no refNodes): #universal *
+PASS Fragment Element.matches: Attribute presence selector, matching align attribute with value (with no refNodes): .attr-presence-div1[align]
+PASS Fragment Element.matches: Attribute presence selector, matching align attribute with empty value (with no refNodes): .attr-presence-div2[align]
+PASS Fragment Element.matches: Attribute presence selector, matching title attribute, case insensitivity (with no refNodes): #attr-presence [TiTlE]
+PASS Fragment Element.matches: Attribute presence selector, matching custom data-* attribute (with no refNodes): [data-attr-presence]
+PASS Fragment Element.matches: Attribute presence selector, matching attribute with non-ASCII characters (with no refNodes): ul[data-中文]
+PASS Fragment Element.matches: Attribute presence selector, matching option with selected attribute (with no refNodes): #attr-presence-select2 option[selected]
+PASS Fragment Element.matches: Attribute presence selector, matching multiple options with selected attributes (with no refNodes): #attr-presence-select3 option[selected]
+PASS Fragment Element.matches: Attribute value selector, matching align attribute with value (with no refNodes): #attr-value [align="center"]
+PASS Fragment Element.matches: Attribute value selector, matching align attribute with empty value (with no refNodes): #attr-value [align=""]
+PASS Fragment Element.matches: Attribute value selector, matching custom data-* attribute with unicode escaped value (with no refNodes): [data-attr-value="\e9"]
+PASS Fragment Element.matches: Attribute value selector, matching custom data-* attribute with escaped character (with no refNodes): [data-attr-value_foo="\e9"]
+PASS Fragment Element.matches: Attribute value selector with single-quoted value, matching multiple inputs with type attributes (with no refNodes): #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS Fragment Element.matches: Attribute value selector with double-quoted value, matching multiple inputs with type attributes (with no refNodes): #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS Fragment Element.matches: Attribute value selector with unquoted value, matching multiple inputs with type attributes (with no refNodes): #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS Fragment Element.matches: Attribute value selector, matching attribute with value using non-ASCII characters (with no refNodes): [data-attr-value=中文]
+PASS Fragment Element.matches: Attribute whitespace-separated list selector, matching class attribute with value (with no refNodes): #attr-whitespace [class~="div1"]
+PASS Fragment Element.matches: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value (with no refNodes): [data-attr-whitespace~="\0000e9"]
+PASS Fragment Element.matches: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character (with no refNodes): [data-attr-whitespace_foo~="\e9"]
+PASS Fragment Element.matches: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes (with no refNodes): #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS Fragment Element.matches: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes (with no refNodes): #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS Fragment Element.matches: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes (with no refNodes): #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS Fragment Element.matches: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters (with no refNodes): #attr-whitespace [title~=中文]
+PASS Fragment Element.matches: Attribute hyphen-separated list selector, matching lang attribute with exact value (with no refNodes): #attr-hyphen-div2[lang|="fr"]
+PASS Fragment Element.matches: Attribute hyphen-separated list selector, matching lang attribute with partial value (with no refNodes): #attr-hyphen-div3[lang|="en"]
+PASS Fragment Element.matches: Attribute begins with selector, matching href attributes beginning with specified substring (with no refNodes): #attr-begins a[href^="http://www"]
+PASS Fragment Element.matches: Attribute begins with selector, matching lang attributes beginning with specified substring, (with no refNodes): #attr-begins [lang^="en-"]
+PASS Fragment Element.matches: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring (with no refNodes): #attr-begins [class^=' apple']
+PASS Fragment Element.matches: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring (with no refNodes): #attr-begins [class^=" apple"]
+PASS Fragment Element.matches: Attribute ends with selector, matching href attributes ending with specified substring (with no refNodes): #attr-ends a[href$=".org"]
+PASS Fragment Element.matches: Attribute ends with selector, matching lang attributes ending with specified substring, (with no refNodes): #attr-ends [lang$="-CH"]
+PASS Fragment Element.matches: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring (with no refNodes): #attr-ends [class$='apple ']
+PASS Fragment Element.matches: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring (with no refNodes): #attr-ends [class$="apple "]
+PASS Fragment Element.matches: Attribute contains selector, matching href attributes beginning with specified substring (with no refNodes): #attr-contains a[href*="http://www"]
+PASS Fragment Element.matches: Attribute contains selector, matching href attributes ending with specified substring (with no refNodes): #attr-contains a[href*=".org"]
+PASS Fragment Element.matches: Attribute contains selector, matching href attributes containing specified substring (with no refNodes): #attr-contains a[href*=".example."]
+PASS Fragment Element.matches: Attribute contains selector, matching lang attributes beginning with specified substring, (with no refNodes): #attr-contains [lang*="en-"]
+PASS Fragment Element.matches: Attribute contains selector, matching lang attributes ending with specified substring, (with no refNodes): #attr-contains [lang*="-CH"]
+PASS Fragment Element.matches: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring (with no refNodes): #attr-contains [class*=' apple']
+PASS Fragment Element.matches: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring (with no refNodes): #attr-contains [class*='orange ']
+PASS Fragment Element.matches: Attribute contains selector with single-quoted value, matching class attribute containing specified substring (with no refNodes): #attr-contains [class*='ple banana ora']
+PASS Fragment Element.matches: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring (with no refNodes): #attr-contains [class*=" apple"]
+PASS Fragment Element.matches: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring (with no refNodes): #attr-contains [class*="orange "]
+PASS Fragment Element.matches: Attribute contains selector with double-quoted value, matching class attribute containing specified substring (with no refNodes): #attr-contains [class*="ple banana ora"]
+PASS Fragment Element.matches: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring (with no refNodes): #attr-contains [class*= apple]
+PASS Fragment Element.matches: Attribute contains selector with unquoted value, matching class attribute ending with specified substring (with no refNodes): #attr-contains [class*=orange ]
+PASS Fragment Element.matches: Attribute contains selector with unquoted value, matching class attribute containing specified substring (with no refNodes): #attr-contains [class*= banana ]
+PASS Fragment Element.matches: :nth-child selector, matching the third child element (with no refNodes): #pseudo-nth-table1 :nth-child(3)
+PASS Fragment Element.matches: :nth-child selector, matching every third child element (with no refNodes): #pseudo-nth li:nth-child(3n)
+PASS Fragment Element.matches: :nth-child selector, matching every second child element, starting from the fourth (with no refNodes): #pseudo-nth li:nth-child(2n+4)
+PASS Fragment Element.matches: :nth-child selector, matching every fourth child element, starting from the third (with no refNodes): #pseudo-nth-p1 :nth-child(4n-1)
+PASS Fragment Element.matches: :nth-last-child selector, matching the third last child element (with no refNodes): #pseudo-nth-table1 :nth-last-child(3)
+PASS Fragment Element.matches: :nth-last-child selector, matching every third child element from the end (with no refNodes): #pseudo-nth li:nth-last-child(3n)
+PASS Fragment Element.matches: :nth-last-child selector, matching every second child element from the end, starting from the fourth last (with no refNodes): #pseudo-nth li:nth-last-child(2n+4)
+PASS Fragment Element.matches: :nth-last-child selector, matching every fourth element from the end, starting from the third last (with no refNodes): #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS Fragment Element.matches: :nth-of-type selector, matching the third em element (with no refNodes): #pseudo-nth-p1 em:nth-of-type(3)
+PASS Fragment Element.matches: :nth-of-type selector, matching every second element of their type (with no refNodes): #pseudo-nth-p1 :nth-of-type(2n)
+PASS Fragment Element.matches: :nth-of-type selector, matching every second elemetn of their type, starting from the first (with no refNodes): #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS Fragment Element.matches: :nth-last-of-type selector, matching the thrid last em element (with no refNodes): #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS Fragment Element.matches: :nth-last-of-type selector, matching every second last element of their type (with no refNodes): #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS Fragment Element.matches: :nth-last-of-type selector, matching every second last element of their type, starting from the last (with no refNodes): #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS Fragment Element.matches: :first-of-type selector, matching the first em element (with no refNodes): #pseudo-nth-p1 em:first-of-type
+PASS Fragment Element.matches: :first-of-type selector, matching the first of every type of element (with no refNodes): #pseudo-nth-p1 :first-of-type
+PASS Fragment Element.matches: :first-of-type selector, matching the first td element in each table row (with no refNodes): #pseudo-nth-table1 tr :first-of-type
+PASS Fragment Element.matches: :last-of-type selector, matching the last em elemnet (with no refNodes): #pseudo-nth-p1 em:last-of-type
+PASS Fragment Element.matches: :last-of-type selector, matching the last of every type of element (with no refNodes): #pseudo-nth-p1 :last-of-type
+PASS Fragment Element.matches: :last-of-type selector, matching the last td element in each table row (with no refNodes): #pseudo-nth-table1 tr :last-of-type
+PASS Fragment Element.matches: :first-child pseudo-class selector, matching first child div element (with no refNodes): #pseudo-first-child div:first-child
+PASS Fragment Element.matches: :first-child pseudo-class selector, matching first-child of multiple elements (with no refNodes): #pseudo-first-child span:first-child
+PASS Fragment Element.matches: :last-child pseudo-class selector, matching last child div element (with no refNodes): #pseudo-last-child div:last-child
+PASS Fragment Element.matches: :last-child pseudo-class selector, matching first-child of multiple elements (with no refNodes): #pseudo-last-child span:last-child
+PASS Fragment Element.matches: :pseudo-only-child pseudo-class selector, matching all only-child elements (with no refNodes): #pseudo-only :only-child
+PASS Fragment Element.matches: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type (with no refNodes): #pseudo-only :only-of-type
+PASS Fragment Element.matches: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type (with no refNodes): #pseudo-only em:only-of-type
+PASS Fragment Element.matches: :empty pseudo-class selector, matching empty p elements (with no refNodes): #pseudo-empty p:empty
+PASS Fragment Element.matches: :empty pseudo-class selector, matching all empty elements (with no refNodes): #pseudo-empty :empty
+PASS Fragment Element.matches: :link and :visited pseudo-class selectors, matching a and area elements with href attributes (with no refNodes): #pseudo-link :link, #pseudo-link :visited
+PASS Fragment Element.matches: :lang pseudo-class selector, matching specified language with exact value (with no refNodes): #pseudo-lang-div2:lang(fr)
+PASS Fragment Element.matches: :lang pseudo-class selector, matching specified language with partial value (with no refNodes): #pseudo-lang-div3:lang(en)
+PASS Fragment Element.matches: :enabled pseudo-class selector, matching all enabled form controls (with no refNodes): #pseudo-ui :enabled
+PASS Fragment Element.matches: :enabled pseudo-class selector, matching all disabled form controls (with no refNodes): #pseudo-ui :disabled
+PASS Fragment Element.matches: :checked pseudo-class selector, matching checked radio buttons and checkboxes (with no refNodes): #pseudo-ui :checked
+PASS Fragment Element.matches: :not pseudo-class selector, matching (with no refNodes): #not>:not(div)
+PASS Fragment Element.matches: :not pseudo-class selector, matching (with no refNodes): #not * :not(:first-child)
+PASS Fragment Element.matches: Class selector, matching element with specified class (with no refNodes): .class-p
+PASS Fragment Element.matches: Class selector, chained, matching only elements with all specified classes (with no refNodes): #class .apple.orange.banana
+PASS Fragment Element.matches: Class Selector, chained, with type selector (with no refNodes): div.apple.banana.orange
+PASS Fragment Element.matches: Class selector, matching element with class value using non-ASCII characters (with no refNodes): .台北Táiběi
+PASS Fragment Element.matches: Class selector, matching multiple elements with class value using non-ASCII characters (with no refNodes): .台北
+PASS Fragment Element.matches: Class selector, chained, matching element with multiple class values using non-ASCII characters (with no refNodes): .台北Táiběi.台北
+PASS Fragment Element.matches: Class selector, matching element with class with escaped character (with no refNodes): .foo\:bar
+PASS Fragment Element.matches: Class selector, matching element with class with escaped character (with no refNodes): .test\.foo\[5\]bar
+PASS Fragment Element.matches: ID selector, matching element with specified id (with no refNodes): #id #id-div1
+PASS Fragment Element.matches: ID selector, chained, matching element with specified id (with no refNodes): #id-div1, #id-div1
+PASS Fragment Element.matches: ID selector, chained, matching element with specified id (with no refNodes): #id-div1, #id-div2
+PASS Fragment Element.matches: ID Selector, chained, with type selector (with no refNodes): div#id-div1, div#id-div2
+PASS Fragment Element.matches: ID selector, matching multiple elements with duplicate id (with no refNodes): #id-li-duplicate
+PASS Fragment Element.matches: ID selector, matching id value using non-ASCII characters (with no refNodes): #台北Táiběi
+PASS Fragment Element.matches: ID selector, matching id value using non-ASCII characters (with no refNodes): #台北
+PASS Fragment Element.matches: ID selector, matching id values using non-ASCII characters (with no refNodes): #台北Táiběi, #台北
+PASS Fragment Element.matches: Descendant combinator, matching element that is a descendant of an element with id (with no refNodes): #descendant div
+PASS Fragment Element.matches: Descendant combinator, matching element with id that is a descendant of an element (with no refNodes): div #descendant-div1
+PASS Fragment Element.matches: Descendant combinator, matching element with id that is a descendant of an element with id (with no refNodes): #descendant #descendant-div2
+PASS Fragment Element.matches: Descendant combinator, matching element with class that is a descendant of an element with id (with no refNodes): #descendant .descendant-div2
+PASS Fragment Element.matches: Descendant combinator, matching element with class that is a descendant of an element with class (with no refNodes): .descendant-div1 .descendant-div3
+PASS Fragment Element.matches: Descendant combinator, whitespace characters (with no refNodes): #descendant        
+#descendant-div2
+PASS Fragment Element.matches: Child combinator, matching element that is a child of an element with id (with no refNodes): #child>div
+PASS Fragment Element.matches: Child combinator, matching element with id that is a child of an element (with no refNodes): div>#child-div1
+PASS Fragment Element.matches: Child combinator, matching element with id that is a child of an element with id (with no refNodes): #child>#child-div1
+PASS Fragment Element.matches: Child combinator, matching element with id that is a child of an element with class (with no refNodes): #child-div1>.child-div2
+PASS Fragment Element.matches: Child combinator, matching element with class that is a child of an element with class (with no refNodes): .child-div1>.child-div2
+PASS Fragment Element.matches: Child combinator, surrounded by whitespace (with no refNodes): #child-div1        
+>        
+#child-div2
+PASS Fragment Element.matches: Child combinator, whitespace after (with no refNodes): #child-div1>        
+#child-div2
+PASS Fragment Element.matches: Child combinator, whitespace before (with no refNodes): #child-div1        
+>#child-div2
+PASS Fragment Element.matches: Child combinator, no whitespace (with no refNodes): #child-div1>#child-div2
+PASS Fragment Element.matches: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id (with no refNodes): #adjacent-div2+div
+PASS Fragment Element.matches: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element (with no refNodes): div+#adjacent-div4
+PASS Fragment Element.matches: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id (with no refNodes): #adjacent-div2+#adjacent-div4
+PASS Fragment Element.matches: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id (with no refNodes): #adjacent-div2+.adjacent-div4
+PASS Fragment Element.matches: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class (with no refNodes): .adjacent-div2+.adjacent-div4
+PASS Fragment Element.matches: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element (with no refNodes): #adjacent div+p
+PASS Fragment Element.matches: Adjacent sibling combinator, surrounded by whitespace (with no refNodes): #adjacent-p2        
++        
+#adjacent-p3
+PASS Fragment Element.matches: Adjacent sibling combinator, whitespace after (with no refNodes): #adjacent-p2+        
+#adjacent-p3
+PASS Fragment Element.matches: Adjacent sibling combinator, whitespace before (with no refNodes): #adjacent-p2        
++#adjacent-p3
+PASS Fragment Element.matches: Adjacent sibling combinator, no whitespace (with no refNodes): #adjacent-p2+#adjacent-p3
+PASS Fragment Element.matches: General sibling combinator, matching element that is a sibling of an element with id (with no refNodes): #sibling-div2~div
+PASS Fragment Element.matches: General sibling combinator, matching element with id that is a sibling of an element (with no refNodes): div~#sibling-div4
+PASS Fragment Element.matches: General sibling combinator, matching element with id that is a sibling of an element with id (with no refNodes): #sibling-div2~#sibling-div4
+PASS Fragment Element.matches: General sibling combinator, matching element with class that is a sibling of an element with id (with no refNodes): #sibling-div2~.sibling-div
+PASS Fragment Element.matches: General sibling combinator, matching p element that is a sibling of a div element (with no refNodes): #sibling div~p
+PASS Fragment Element.matches: General sibling combinator, surrounded by whitespace (with no refNodes): #sibling-p2        
+~        
+#sibling-p3
+PASS Fragment Element.matches: General sibling combinator, whitespace after (with no refNodes): #sibling-p2~        
+#sibling-p3
+PASS Fragment Element.matches: General sibling combinator, whitespace before (with no refNodes): #sibling-p2        
+~#sibling-p3
+PASS Fragment Element.matches: General sibling combinator, no whitespace (with no refNodes): #sibling-p2~#sibling-p3
+PASS Fragment Element.matches: Syntax, group of selectors separator, surrounded by whitespace (with no refNodes): #group em        
+
+,        
+
+#group strong
+PASS Fragment Element.matches: Syntax, group of selectors separator, whitespace after (with no refNodes): #group em,        
+#group strong
+PASS Fragment Element.matches: Syntax, group of selectors separator, whitespace before (with no refNodes): #group em        
+,#group strong
+PASS Fragment Element.matches: Syntax, group of selectors separator, no whitespace (with no refNodes): #group em,#group strong
+FAIL In-document Element.matches: Universal selector, matching all children of the specified reference element (with refNode Element): >* SyntaxError: DOM Exception 12
+FAIL In-document Element.matches: Universal selector, matching all grandchildren of the specified reference element (with refNode Element): >*>* SyntaxError: DOM Exception 12
+FAIL In-document Element.matches: Universal selector, matching all descendants of the specified reference element (with refNode Element): * assert_false: The element #universal should not match the selector. expected false got true
+PASS In-document Element.matches: Attribute presence selector, matching align attribute with value (with refNode Element): .attr-presence-div1[align]
+PASS In-document Element.matches: Attribute presence selector, matching align attribute with empty value (with refNode Element): .attr-presence-div2[align]
+PASS In-document Element.matches: Attribute presence selector, matching title attribute, case insensitivity (with refNode Element): [TiTlE]
+PASS In-document Element.matches: Attribute presence selector, matching custom data-* attribute (with refNode Element): [data-attr-presence]
+PASS In-document Element.matches: Attribute presence selector, matching attribute with non-ASCII characters (with refNode Element): ul[data-中文]
+PASS In-document Element.matches: Attribute presence selector, matching option with selected attribute (with refNode Element): #attr-presence-select2 option[selected]
+PASS In-document Element.matches: Attribute presence selector, matching multiple options with selected attributes (with refNode Element): #attr-presence-select3 option[selected]
+PASS In-document Element.matches: Attribute value selector, matching align attribute with value (with refNode Element): [align="center"]
+PASS In-document Element.matches: Attribute value selector, matching align attribute with empty value (with refNode Element): [align=""]
+PASS In-document Element.matches: Attribute value selector, matching custom data-* attribute with unicode escaped value (with refNode Element): [data-attr-value="\e9"]
+PASS In-document Element.matches: Attribute value selector, matching custom data-* attribute with escaped character (with refNode Element): [data-attr-value_foo="\e9"]
+PASS In-document Element.matches: Attribute value selector with single-quoted value, matching multiple inputs with type attributes (with refNode Element): input[type='hidden'],#attr-value input[type='radio']
+PASS In-document Element.matches: Attribute value selector with double-quoted value, matching multiple inputs with type attributes (with refNode Element): input[type="hidden"],#attr-value input[type='radio']
+PASS In-document Element.matches: Attribute value selector with unquoted value, matching multiple inputs with type attributes (with refNode Element): input[type=hidden],#attr-value input[type=radio]
+PASS In-document Element.matches: Attribute value selector, matching attribute with value using non-ASCII characters (with refNode Element): [data-attr-value=中文]
+PASS In-document Element.matches: Attribute whitespace-separated list selector, matching class attribute with value (with refNode Element): [class~="div1"]
+PASS In-document Element.matches: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value (with refNode Element): [data-attr-whitespace~="\0000e9"]
+PASS In-document Element.matches: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character (with refNode Element): [data-attr-whitespace_foo~="\e9"]
+PASS In-document Element.matches: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes (with refNode Element): a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS In-document Element.matches: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes (with refNode Element): a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS In-document Element.matches: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes (with refNode Element): a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS In-document Element.matches: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters (with refNode Element): [title~=中文]
+PASS In-document Element.matches: Attribute hyphen-separated list selector, matching lang attribute with exact value (with refNode Element): #attr-hyphen-div2[lang|="fr"]
+PASS In-document Element.matches: Attribute hyphen-separated list selector, matching lang attribute with partial value (with refNode Element): #attr-hyphen-div3[lang|="en"]
+PASS In-document Element.matches: Attribute begins with selector, matching href attributes beginning with specified substring (with refNode Element): a[href^="http://www"]
+PASS In-document Element.matches: Attribute begins with selector, matching lang attributes beginning with specified substring, (with refNode Element): [lang^="en-"]
+PASS In-document Element.matches: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring (with refNode Element): [class^=' apple']
+PASS In-document Element.matches: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring (with refNode Element): [class^=" apple"]
+PASS In-document Element.matches: Attribute ends with selector, matching href attributes ending with specified substring (with refNode Element): a[href$=".org"]
+PASS In-document Element.matches: Attribute ends with selector, matching lang attributes ending with specified substring, (with refNode Element): [lang$="-CH"]
+PASS In-document Element.matches: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring (with refNode Element): [class$='apple ']
+PASS In-document Element.matches: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring (with refNode Element): [class$="apple "]
+PASS In-document Element.matches: Attribute contains selector, matching href attributes beginning with specified substring (with refNode Element): a[href*="http://www"]
+PASS In-document Element.matches: Attribute contains selector, matching href attributes ending with specified substring (with refNode Element): a[href*=".org"]
+PASS In-document Element.matches: Attribute contains selector, matching href attributes containing specified substring (with refNode Element): a[href*=".example."]
+PASS In-document Element.matches: Attribute contains selector, matching lang attributes beginning with specified substring, (with refNode Element): [lang*="en-"]
+PASS In-document Element.matches: Attribute contains selector, matching lang attributes ending with specified substring, (with refNode Element): [lang*="-CH"]
+PASS In-document Element.matches: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring (with refNode Element): [class*=' apple']
+PASS In-document Element.matches: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring (with refNode Element): [class*='orange ']
+PASS In-document Element.matches: Attribute contains selector with single-quoted value, matching class attribute containing specified substring (with refNode Element): [class*='ple banana ora']
+PASS In-document Element.matches: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring (with refNode Element): [class*=" apple"]
+PASS In-document Element.matches: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring (with refNode Element): [class*="orange "]
+PASS In-document Element.matches: Attribute contains selector with double-quoted value, matching class attribute containing specified substring (with refNode Element): [class*="ple banana ora"]
+PASS In-document Element.matches: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring (with refNode Element): [class*= apple]
+PASS In-document Element.matches: Attribute contains selector with unquoted value, matching class attribute ending with specified substring (with refNode Element): [class*=orange ]
+PASS In-document Element.matches: Attribute contains selector with unquoted value, matching class attribute containing specified substring (with refNode Element): [class*= banana ]
+PASS In-document Element.matches: :nth-child selector, matching the third child element (with refNode Element): :nth-child(3)
+PASS In-document Element.matches: :nth-child selector, matching every third child element (with refNode Element): li:nth-child(3n)
+PASS In-document Element.matches: :nth-child selector, matching every second child element, starting from the fourth (with refNode Element): li:nth-child(2n+4)
+PASS In-document Element.matches: :nth-child selector, matching every fourth child element, starting from the third (with refNode Element): :nth-child(4n-1)
+PASS In-document Element.matches: :nth-last-child selector, matching the third last child element (with refNode Element): :nth-last-child(3)
+PASS In-document Element.matches: :nth-last-child selector, matching every third child element from the end (with refNode Element): li:nth-last-child(3n)
+PASS In-document Element.matches: :nth-last-child selector, matching every second child element from the end, starting from the fourth last (with refNode Element): li:nth-last-child(2n+4)
+PASS In-document Element.matches: :nth-last-child selector, matching every fourth element from the end, starting from the third last (with refNode Element): :nth-last-child(4n-1)
+PASS In-document Element.matches: :nth-of-type selector, matching the third em element (with refNode Element): em:nth-of-type(3)
+PASS In-document Element.matches: :nth-of-type selector, matching every second element of their type (with refNode Element): :nth-of-type(2n)
+PASS In-document Element.matches: :nth-of-type selector, matching every second elemetn of their type, starting from the first (with refNode Element): span:nth-of-type(2n-1)
+PASS In-document Element.matches: :nth-last-of-type selector, matching the thrid last em element (with refNode Element): em:nth-last-of-type(3)
+PASS In-document Element.matches: :nth-last-of-type selector, matching every second last element of their type (with refNode Element): :nth-last-of-type(2n)
+PASS In-document Element.matches: :nth-last-of-type selector, matching every second last element of their type, starting from the last (with refNode Element): span:nth-last-of-type(2n-1)
+PASS In-document Element.matches: :first-of-type selector, matching the first em element (with refNode Element): em:first-of-type
+PASS In-document Element.matches: :first-of-type selector, matching the first of every type of element (with refNode Element): :first-of-type
+PASS In-document Element.matches: :first-of-type selector, matching the first td element in each table row (with refNode Element): tr :first-of-type
+PASS In-document Element.matches: :last-of-type selector, matching the last em elemnet (with refNode Element): em:last-of-type
+PASS In-document Element.matches: :last-of-type selector, matching the last of every type of element (with refNode Element): :last-of-type
+PASS In-document Element.matches: :last-of-type selector, matching the last td element in each table row (with refNode Element): tr :last-of-type
+PASS In-document Element.matches: :first-child pseudo-class selector, matching first child div element (with refNode Element): div:first-child
+PASS In-document Element.matches: :first-child pseudo-class selector, matching first-child of multiple elements (with refNode Element): span:first-child
+PASS In-document Element.matches: :last-child pseudo-class selector, matching last child div element (with refNode Element): div:last-child
+PASS In-document Element.matches: :last-child pseudo-class selector, matching first-child of multiple elements (with refNode Element): span:last-child
+PASS In-document Element.matches: :pseudo-only-child pseudo-class selector, matching all only-child elements (with refNode Element): :only-child
+PASS In-document Element.matches: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type (with refNode Element): :only-of-type
+PASS In-document Element.matches: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type (with refNode Element): em:only-of-type
+PASS In-document Element.matches: :empty pseudo-class selector, matching empty p elements (with refNode Element): p:empty
+PASS In-document Element.matches: :empty pseudo-class selector, matching all empty elements (with refNode Element): :empty
+PASS In-document Element.matches: :link and :visited pseudo-class selectors, matching a and area elements with href attributes (with refNode Element): :link, #pseudo-link :visited
+PASS In-document Element.matches: :link and :visited pseudo-class selectors, matching link elements with href attributes (with refNode Element): :link, #head :visited
+PASS In-document Element.matches: :lang pseudo-class selector, matching inherited language (1) (with no refNodes): #pseudo-lang-div1:lang(en)
+PASS In-document Element.matches: :lang pseudo-class selector, matching specified language with exact value (1) (with no refNodes): #pseudo-lang-div2:lang(fr)
+PASS In-document Element.matches: :lang pseudo-class selector, matching specified language with partial value (1) (with no refNodes): #pseudo-lang-div3:lang(en)
+PASS In-document Element.matches: :enabled pseudo-class selector, matching all enabled form controls (1) (with no refNodes): #pseudo-ui :enabled
+PASS In-document Element.matches: :enabled pseudo-class selector, matching all disabled form controls (1) (with no refNodes): #pseudo-ui :disabled
+PASS In-document Element.matches: :checked pseudo-class selector, matching checked radio buttons and checkboxes (1) (with no refNodes): #pseudo-ui :checked
+PASS In-document Element.matches: :not pseudo-class selector, matching (1) (with no refNodes): #not>:not(div)
+PASS In-document Element.matches: :not pseudo-class selector, matching (1) (with no refNodes): #not * :not(:first-child)
+PASS In-document Element.matches: Class selector, matching element with specified class (1) (with no refNodes): .class-p
+PASS In-document Element.matches: Class selector, chained, matching only elements with all specified classes (1) (with no refNodes): #class .apple.orange.banana
+PASS In-document Element.matches: Class Selector, chained, with type selector (1) (with no refNodes): div.apple.banana.orange
+FAIL In-document Element.matches: Class selector, matching element with class value using non-ASCII characters (with no refNodes): .台北Táiběi assert_true: The element #class-span1 should match the selector. expected true got false
+PASS In-document Element.matches: Class selector, matching multiple elements with class value using non-ASCII characters (1) (with no refNodes): .台北
+FAIL In-document Element.matches: Class selector, chained, matching element with multiple class values using non-ASCII characters (with no refNodes): .台北Táiběi.台北 assert_true: The element #class-span1 should match the selector. expected true got false
+PASS In-document Element.matches: Class selector, matching element with class with escaped character (1) (with no refNodes): .foo\:bar
+PASS In-document Element.matches: Class selector, matching element with class with escaped character (1) (with no refNodes): .test\.foo\[5\]bar
+PASS In-document Element.matches: ID selector, matching element with specified id (1) (with no refNodes): #id #id-div1
+PASS In-document Element.matches: ID selector, chained, matching element with specified id (1) (with no refNodes): #id-div1, #id-div1
+PASS In-document Element.matches: ID selector, chained, matching element with specified id (1) (with no refNodes): #id-div1, #id-div2
+PASS In-document Element.matches: ID Selector, chained, with type selector (1) (with no refNodes): div#id-div1, div#id-div2
+PASS In-document Element.matches: ID selector, matching multiple elements with duplicate id (1) (with no refNodes): #id-li-duplicate
+FAIL In-document Element.matches: ID selector, matching id value using non-ASCII characters (with no refNodes): #台北Táiběi null is not an object (evaluating 'element.matches')
+PASS In-document Element.matches: ID selector, matching id value using non-ASCII characters (1) (with no refNodes): #台北
+FAIL In-document Element.matches: ID selector, matching id values using non-ASCII characters (with no refNodes): #台北Táiběi, #台北 null is not an object (evaluating 'element.matches')
+PASS In-document Element.matches: Descendant combinator, matching element that is a descendant of an element with id (1) (with no refNodes): #descendant div
+PASS In-document Element.matches: Descendant combinator, matching element with id that is a descendant of an element (1) (with no refNodes): body #descendant-div1
+PASS In-document Element.matches: Descendant combinator, matching element with id that is a descendant of an element (1) (with no refNodes): div #descendant-div1
+PASS In-document Element.matches: Descendant combinator, matching element with id that is a descendant of an element with id (1) (with no refNodes): #descendant #descendant-div2
+PASS In-document Element.matches: Descendant combinator, matching element with class that is a descendant of an element with id (1) (with no refNodes): #descendant .descendant-div2
+PASS In-document Element.matches: Descendant combinator, matching element with class that is a descendant of an element with class (1) (with no refNodes): .descendant-div1 .descendant-div3
+PASS In-document Element.matches: Descendant combinator, whitespace characters (1) (with no refNodes): #descendant        
+#descendant-div2
+PASS In-document Element.matches: Child combinator, matching element that is a child of an element with id (1) (with no refNodes): #child>div
+PASS In-document Element.matches: Child combinator, matching element with id that is a child of an element (1) (with no refNodes): div>#child-div1
+PASS In-document Element.matches: Child combinator, matching element with id that is a child of an element with id (1) (with no refNodes): #child>#child-div1
+PASS In-document Element.matches: Child combinator, matching element with id that is a child of an element with class (1) (with no refNodes): #child-div1>.child-div2
+PASS In-document Element.matches: Child combinator, matching element with class that is a child of an element with class (1) (with no refNodes): .child-div1>.child-div2
+PASS In-document Element.matches: Child combinator, surrounded by whitespace (1) (with no refNodes): #child-div1        
+>        
+#child-div2
+PASS In-document Element.matches: Child combinator, whitespace after (1) (with no refNodes): #child-div1>        
+#child-div2
+PASS In-document Element.matches: Child combinator, whitespace before (1) (with no refNodes): #child-div1        
+>#child-div2
+PASS In-document Element.matches: Child combinator, no whitespace (1) (with no refNodes): #child-div1>#child-div2
+PASS In-document Element.matches: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id (1) (with no refNodes): #adjacent-div2+div
+PASS In-document Element.matches: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element (1) (with no refNodes): div+#adjacent-div4
+PASS In-document Element.matches: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id (1) (with no refNodes): #adjacent-div2+#adjacent-div4
+PASS In-document Element.matches: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id (1) (with no refNodes): #adjacent-div2+.adjacent-div4
+PASS In-document Element.matches: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class (1) (with no refNodes): .adjacent-div2+.adjacent-div4
+PASS In-document Element.matches: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element (1) (with no refNodes): #adjacent div+p
+PASS In-document Element.matches: Adjacent sibling combinator, surrounded by whitespace (1) (with no refNodes): #adjacent-p2        
++        
+#adjacent-p3
+PASS In-document Element.matches: Adjacent sibling combinator, whitespace after (1) (with no refNodes): #adjacent-p2+        
+#adjacent-p3
+PASS In-document Element.matches: Adjacent sibling combinator, whitespace before (1) (with no refNodes): #adjacent-p2        
++#adjacent-p3
+PASS In-document Element.matches: Adjacent sibling combinator, no whitespace (1) (with no refNodes): #adjacent-p2+#adjacent-p3
+PASS In-document Element.matches: General sibling combinator, matching element that is a sibling of an element with id (1) (with no refNodes): #sibling-div2~div
+PASS In-document Element.matches: General sibling combinator, matching element with id that is a sibling of an element (1) (with no refNodes): div~#sibling-div4
+PASS In-document Element.matches: General sibling combinator, matching element with id that is a sibling of an element with id (1) (with no refNodes): #sibling-div2~#sibling-div4
+PASS In-document Element.matches: General sibling combinator, matching element with class that is a sibling of an element with id (1) (with no refNodes): #sibling-div2~.sibling-div
+PASS In-document Element.matches: General sibling combinator, matching p element that is a sibling of a div element (1) (with no refNodes): #sibling div~p
+PASS In-document Element.matches: General sibling combinator, surrounded by whitespace (1) (with no refNodes): #sibling-p2        
+~        
+#sibling-p3
+PASS In-document Element.matches: General sibling combinator, whitespace after (1) (with no refNodes): #sibling-p2~        
+#sibling-p3
+PASS In-document Element.matches: General sibling combinator, whitespace before (1) (with no refNodes): #sibling-p2        
+~#sibling-p3
+PASS In-document Element.matches: General sibling combinator, no whitespace (1) (with no refNodes): #sibling-p2~#sibling-p3
+PASS In-document Element.matches: Syntax, group of selectors separator, surrounded by whitespace (1) (with no refNodes): #group em        
+
+,        
+
+#group strong
+PASS In-document Element.matches: Syntax, group of selectors separator, whitespace after (1) (with no refNodes): #group em,        
+#group strong
+PASS In-document Element.matches: Syntax, group of selectors separator, whitespace before (1) (with no refNodes): #group em        
+,#group strong
+PASS In-document Element.matches: Syntax, group of selectors separator, no whitespace (1) (with no refNodes): #group em,#group strong
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementmatcheshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-matches.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-matches.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-matches.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,87 @@
</span><ins>+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>Selectors-API Level 2 Test Suite: HTML with Selectors Level 3</title>
+<!-- Selectors API Test Suite Version 3 -->
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="selectors.js"></script>
+<script src="ParentNode-querySelector-All.js"></script>
+<script src="Element-matches.js"></script>
+<style>iframe { visibility: hidden; position: absolute; }</style>
+
+<div id="log">This test requires JavaScript.</div>
+
+<script>
+async_test(function() {
+ var frame = document.createElement("iframe");
+ frame.onload = this.step_func_done(init);
+ frame.src = "resources/ParentNode-querySelector-All-content.html#target";
+ document.body.appendChild(frame);
+});
+
+function init(e) {
+ /*
+ * This test suite tests Selectors API methods in 4 different contexts:
+ * 1. Document node
+ * 2. In-document Element node
+ * 3. Detached Element node (an element with no parent, not in the document)
+ * 4. Document Fragment node
+ *
+ * For each context, the following tests are run:
+ *
+ * The interface check tests ensure that each type of node exposes the Selectors API methods.
+ *
+ * The matches() tests are run
+ * All the selectors tested for both the valid and invalid selector tests are found in selectors.js.
+ * See comments in that file for documentation of the format used.
+ *
+ * The level2-lib.js file contains all the common test functions for running each of the aforementioned tests
+ */
+
+ var docType = "html"; // Only run tests suitable for HTML
+
+ // Prepare the nodes for testing
+ var doc = e.target.contentDocument; // Document Node tests
+
+ var element = doc.getElementById("root"); // In-document Element Node tests
+
+ //Setup the namespace tests
+ setupSpecialElements(doc, element);
+
+ var outOfScope = element.cloneNode(true); // Append this to the body before running the in-document
+ // Element tests, but after running the Document tests. This
+ // tests that no elements that are not descendants of element
+ // are selected.
+
+ traverse(outOfScope, function(elem) { // Annotate each element as being a clone; used for verifying
+ elem.setAttribute("data-clone", ""); // that none of these elements ever match.
+ });
+
+
+ var detached = element.cloneNode(true); // Detached Element Node tests
+
+ var fragment = doc.createDocumentFragment(); // Fragment Node tests
+ fragment.appendChild(element.cloneNode(true));
+
+ // Setup Tests
+ interfaceCheckMatches("Document", doc);
+ interfaceCheckMatches("Detached Element", detached);
+ interfaceCheckMatches("Fragment", fragment);
+ interfaceCheckMatches("In-document Element", element);
+
+ runSpecialMatchesTests("DIV Element", element);
+ runSpecialMatchesTests("NULL Element", document.createElement("null"));
+ runSpecialMatchesTests("UNDEFINED Element", document.createElement("undefined"));
+
+ runInvalidSelectorTestMatches("Document", doc, invalidSelectors);
+ runInvalidSelectorTestMatches("Detached Element", detached, invalidSelectors);
+ runInvalidSelectorTestMatches("Fragment", fragment, invalidSelectors);
+ runInvalidSelectorTestMatches("In-document Element", element, invalidSelectors);
+
+ runMatchesTest("In-document", doc, validSelectors, "html");
+ runMatchesTest("Detached", detached, validSelectors, "html");
+ runMatchesTest("Fragment", fragment, validSelectors, "html");
+
+ runMatchesTest("In-document", doc, scopedSelectors, "html");
+}
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementmatchesjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-matches.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-matches.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-matches.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,127 @@
</span><ins>+/*
+ * Check that the matches() method exists on the given Node
+ */
+function interfaceCheckMatches(type, obj) {
+ if (obj.nodeType === obj.ELEMENT_NODE) {
+ test(function() {
+ assert_idl_attribute(obj, "matches", type + " supports matches");
+ }, type + " supports matches")
+ }
+}
+
+function runSpecialMatchesTests(type, element) {
+ test(function() { // 1
+ if (element.tagName.toLowerCase() === "null") {
+ assert_true(element.matches(null), "An element with the tag name '" + element.tagName.toLowerCase() + "' should match.");
+ } else {
+ assert_false(element.matches(null), "An element with the tag name '" + element.tagName.toLowerCase() + "' should not match.");
+ }
+ }, type + ".matches(null)")
+
+ test(function() { // 2
+ if (element.tagName.toLowerCase() === "undefined") {
+ assert_true(element.matches(undefined), "An element with the tag name '" + element.tagName.toLowerCase() + "' should match.");
+ } else {
+ assert_false(element.matches(undefined), "An element with the tag name '" + element.tagName.toLowerCase() + "' should not match.");
+ }
+ }, type + ".matches(undefined)")
+
+ test(function() { // 3
+ assert_throws(TypeError(), function() {
+ element.matches();
+ }, "This should throw a TypeError.")
+ }, type + ".matches no parameter")
+}
+
+/*
+ * Execute queries with the specified invalid selectors for matches()
+ * Only run these tests when errors are expected. Don't run for valid selector tests.
+ */
+function runInvalidSelectorTestMatches(type, root, selectors) {
+ if (root.nodeType === root.ELEMENT_NODE) {
+ for (var i = 0; i < selectors.length; i++) {
+ var s = selectors[i];
+ var n = s["name"];
+ var q = s["selector"];
+
+ test(function() {
+ assert_throws("SyntaxError", function() {
+ root.matches(q)
+ })
+ }, type + ".matches: " + n + ": " + q);
+ }
+ }
+}
+
+function runMatchesTest(type, root, selectors, docType) {
+ var nodeType = getNodeType(root);
+
+ for (var i = 0; i < selectors.length; i++) {
+ var s = selectors[i];
+ var n = s["name"];
+ var q = s["selector"];
+ var e = s["expect"];
+ var u = s["unexpected"];
+
+ var ctx = s["ctx"];
+ var ref = s["ref"];
+
+ if ((!s["exclude"] || (s["exclude"].indexOf(nodeType) === -1 && s["exclude"].indexOf(docType) === -1))
+ && (s["testType"] & TEST_MATCH) ) {
+
+ if (ctx && !ref) {
+ test(function() {
+ var j, element, refNode;
+ for (j = 0; j < e.length; j++) {
+ element = root.querySelector("#" + e[j]);
+ refNode = root.querySelector(ctx);
+ assert_true(element.matches(q, refNode), "The element #" + e[j] + " should match the selector.")
+ }
+
+ if (u) {
+ for (j = 0; j < u.length; j++) {
+ element = root.querySelector("#" + u[j]);
+ refNode = root.querySelector(ctx);
+ assert_false(element.matches(q, refNode), "The element #" + u[j] + " should not match the selector.")
+ }
+ }
+ }, type + " Element.matches: " + n + " (with refNode Element): " + q);
+ }
+
+ if (ref) {
+ test(function() {
+ var j, element, refNodes;
+ for (j = 0; j < e.length; j++) {
+ element = root.querySelector("#" + e[j]);
+ refNodes = root.querySelectorAll(ref);
+ assert_true(element.matches(q, refNodes), "The element #" + e[j] + " should match the selector.")
+ }
+
+ if (u) {
+ for (j = 0; j < u.length; j++) {
+ element = root.querySelector("#" + u[j]);
+ refNodes = root.querySelectorAll(ref);
+ assert_false(element.matches(q, refNodes), "The element #" + u[j] + " should not match the selector.")
+ }
+ }
+ }, type + " Element.matches: " + n + " (with refNodes NodeList): " + q);
+ }
+
+ if (!ctx && !ref) {
+ test(function() {
+ for (var j = 0; j < e.length; j++) {
+ var element = root.querySelector("#" + e[j]);
+ assert_true(element.matches(q), "The element #" + e[j] + " should match the selector.")
+ }
+
+ if (u) {
+ for (j = 0; j < u.length; j++) {
+ element = root.querySelector("#" + u[j]);
+ assert_false(element.matches(q), "The element #" + u[j] + " should not match the selector.")
+ }
+ }
+ }, type + " Element.matches: " + n + " (with no refNodes): " + q);
+ }
+ }
+ }
+}
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementnextElementSiblingexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of nextElementSibling
+
+The result of this test is unknown.
+
+
+PASS nextElementSibling
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementnextElementSiblingxhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of nextElementSibling
+
+The result of this test is unknown.
+
+
+PASS nextElementSibling
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementnextElementSiblingxhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>nextElementSibling</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<h1>Test of nextElementSibling</h1>
+<div id="log"></div>
+<p id="parentEl">The result of <span id="first_element_child">this test</span> is <span id="last_element_child" style="font-weight:bold;">unknown.</span></p>
+<script><![CDATA[
+test(function() {
+ var parentEl = document.getElementById("parentEl");
+ var fec = document.getElementById("first_element_child");
+ var nes = fec.nextElementSibling;
+ assert_true(!!nes)
+ assert_equals(nes.nodeType, 1)
+ assert_equals(nes.getAttribute("id"), "last_element_child")
+})
+]]></script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementnextElementSiblinghtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>nextElementSibling</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<h1>Test of nextElementSibling</h1>
+<div id="log"></div>
+<p id="parentEl">The result of <span id="first_element_child">this test</span> is <span id="last_element_child" style="font-weight:bold;">unknown.</span></p>
+<script>
+test(function() {
+ var parentEl = document.getElementById("parentEl");
+ var fec = document.getElementById("first_element_child");
+ var nes = fec.nextElementSibling;
+ assert_true(!!nes)
+ assert_equals(nes.nodeType, 1)
+ assert_equals(nes.getAttribute("id"), "last_element_child")
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementpreviousElementSiblingexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of previousElementSibling
+
+The result of this test is unknown.
+
+
+PASS previousElementSibling
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementpreviousElementSiblingxhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of previousElementSibling
+
+The result of this test is unknown.
+
+
+PASS previousElementSibling
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementpreviousElementSiblingxhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,28 @@
</span><ins>+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>previousElementSibling</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<h1>Test of previousElementSibling</h1>
+<div id="log"></div>
+<p id="parentEl">The result of <span id="first_element_child">this test</span> is
+<span id="middle_element_child" style="font-weight:bold;">unknown.</span>
+
+
+
+<span id="last_element_child" style="display:none;">fnord</span> </p>
+<script><![CDATA[
+test(function() {
+ var parentEl = document.getElementById("parentEl");
+ var lec = document.getElementById("last_element_child");
+ var pes = lec.previousElementSibling;
+ assert_true(!!pes)
+ assert_equals(pes.nodeType, 1)
+ assert_equals(pes.getAttribute("id"), "middle_element_child")
+})
+]]></script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementpreviousElementSiblinghtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>previousElementSibling</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<h1>Test of previousElementSibling</h1>
+<div id="log"></div>
+<p id="parentEl">The result of <span id="first_element_child">this test</span> is
+<span id="middle_element_child" style="font-weight:bold;">unknown.</span>
+
+
+
+<span id="last_element_child" style="display:none;">fnord</span> </p>
+<script>
+test(function() {
+ var parentEl = document.getElementById("parentEl");
+ var lec = document.getElementById("last_element_child");
+ var pes = lec.previousElementSibling;
+ assert_true(!!pes)
+ assert_equals(pes.nodeType, 1)
+ assert_equals(pes.getAttribute("id"), "middle_element_child")
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementremoveexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-remove-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-remove-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-remove-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+
+PASS element should support remove()
+PASS remove() should work if element doesn't have a parent
+PASS remove() should work if element does have a parent
+PASS remove() should work if element does have a parent and siblings
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementremovehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-remove.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-remove.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-remove.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Element.remove</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-childnode-remove">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="ChildNode-remove.js"></script>
+<div id=log></div>
+<script>
+var node, parentNode;
+setup(function() {
+ node = document.createElement("div");
+ parentNode = document.createElement("div");
+});
+testRemove(node, parentNode, "element");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementremoveAttributeNSexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-removeAttributeNS-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-removeAttributeNS-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-removeAttributeNS-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS removeAttributeNS should take a local name.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementremoveAttributeNShtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-removeAttributeNS.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-removeAttributeNS.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-removeAttributeNS.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+<!DOCTYPE html>
+<title>Element.removeAttributeNS</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="attributes.js"></script>
+<div id="log"></div>
+<script>
+var XML = "http://www.w3.org/XML/1998/namespace"
+
+test(function() {
+ var el = document.createElement("foo")
+ el.setAttributeNS(XML, "a:bb", "pass")
+ attr_is(el.attributes[0], "pass", "bb", XML, "a", "a:bb")
+ el.removeAttributeNS(XML, "a:bb")
+ assert_equals(el.attributes.length, 1)
+ attr_is(el.attributes[0], "pass", "bb", XML, "a", "a:bb")
+}, "removeAttributeNS should take a local name.")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementsiblingElementnullexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of previousElementSibling and nextElementSibling returning null
+
+The result of this test is unknown.
+
+
+PASS Null test
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementsiblingElementnullxhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+Test of previousElementSibling and nextElementSibling returning null
+
+The result of this test is unknown.
+
+
+PASS Null Test
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementsiblingElementnullxhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Null Test</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<h1>Test of previousElementSibling and nextElementSibling returning null</h1>
+<div id="log"></div>
+<p id="parentEl">The result of this test is <span id="first_element_child" style="font-weight:bold;">unknown.</span></p>
+<script><![CDATA[
+test(function() {
+ var fec = document.getElementById("first_element_child");
+ assert_equals(fec.previousElementSibling, null)
+ assert_equals(fec.nextElementSibling, null)
+})
+]]></script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementsiblingElementnullhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>Null test</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<h1>Test of previousElementSibling and nextElementSibling returning null</h1>
+<div id="log"></div>
+<p id="parentEl">The result of this test is <span id="first_element_child" style="font-weight:bold;">unknown.</span></p>
+<script>
+test(function() {
+ var fec = document.getElementById("first_element_child");
+ assert_equals(fec.previousElementSibling, null)
+ assert_equals(fec.nextElementSibling, null)
+})
+</script>
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementtagNameexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-tagName-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-tagName-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-tagName-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+
+FAIL tagName should upper-case for HTML elements in HTML documents. assert_equals: expected "X:B" but got "x:b"
+PASS tagName should not upper-case for SVG elements in HTML documents.
+PASS tagName should be updated when changing ownerDocument
+PASS tagName should be updated when changing ownerDocument (createDocument without prefix)
+FAIL tagName should be updated when changing ownerDocument (createDocument with prefix) assert_equals: tagName should be uppercase in HTML expected "FOO:DIV" but got "foo:div"
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesElementtagNamehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-tagName.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-tagName.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Element-tagName.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,50 @@
</span><ins>+<!DOCTYPE html>
+<title>Element.tagName</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ var HTMLNS = "http://www.w3.org/1999/xhtml"
+ assert_equals(document.createElementNS(HTMLNS, "I").tagName, "I")
+ assert_equals(document.createElementNS(HTMLNS, "i").tagName, "I")
+ assert_equals(document.createElementNS(HTMLNS, "x:b").tagName, "X:B")
+}, "tagName should upper-case for HTML elements in HTML documents.")
+
+test(function() {
+ var SVGNS = "http://www.w3.org/2000/svg"
+ assert_equals(document.createElementNS(SVGNS, "svg").tagName, "svg")
+ assert_equals(document.createElementNS(SVGNS, "SVG").tagName, "SVG")
+ assert_equals(document.createElementNS(SVGNS, "s:svg").tagName, "s:svg")
+ assert_equals(document.createElementNS(SVGNS, "s:SVG").tagName, "s:SVG")
+}, "tagName should not upper-case for SVG elements in HTML documents.")
+
+test(function() {
+ if ("DOMParser" in window) {
+ var xmlel = new DOMParser()
+ .parseFromString('<div xmlns="http://www.w3.org/1999/xhtml">Test</div>', 'text/xml')
+ .documentElement;
+ assert_equals(xmlel.tagName, "div", "tagName should be lowercase in XML")
+ var htmlel = document.importNode(xmlel, true)
+ assert_equals(htmlel.tagName, "DIV", "tagName should be uppercase in HTML")
+ }
+}, "tagName should be updated when changing ownerDocument")
+
+test(function() {
+ var xmlel = document.implementation
+ .createDocument("http://www.w3.org/1999/xhtml", "div", null)
+ .documentElement;
+ assert_equals(xmlel.tagName, "div", "tagName should be lowercase in XML")
+ var htmlel = document.importNode(xmlel, true)
+ assert_equals(htmlel.tagName, "DIV", "tagName should be uppercase in HTML")
+}, "tagName should be updated when changing ownerDocument (createDocument without prefix)")
+
+test(function() {
+ var xmlel = document.implementation
+ .createDocument("http://www.w3.org/1999/xhtml", "foo:div", null)
+ .documentElement;
+ assert_equals(xmlel.tagName, "foo:div", "tagName should be lowercase in XML")
+ var htmlel = document.importNode(xmlel, true)
+ assert_equals(htmlel.tagName, "FOO:DIV", "tagName should be uppercase in HTML")
+}, "tagName should be updated when changing ownerDocument (createDocument with prefix)")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesMutationObserverattributesexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-attributes-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-attributes-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-attributes-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,46 @@
</span><ins>+MutationObservers: attributes mutations
+
+
+PASS attributes Element.id: update, no oldValue, mutation
+PASS attributes Element.id: update mutation
+PASS attributes Element.id: empty string update mutation
+PASS attributes Element.id: same value mutation
+PASS attributes Element.unknown: IDL attribute no mutation
+PASS attributes HTMLInputElement.type: type update mutation
+PASS attributes Element.className: new value mutation
+PASS attributes Element.className: empty string update mutation
+PASS attributes Element.className: same value mutation
+PASS attributes Element.className: same multiple values mutation
+PASS attributes Element.classList.add: single token addition mutation
+PASS attributes Element.classList.add: multiple tokens addition mutation
+PASS attributes Element.classList.add: syntax err/no mutation
+PASS attributes Element.classList.add: invalid character/no mutation
+FAIL attributes Element.classList.add: same value mutation assert_equals: mutation records must match expected 2 but got 1
+PASS attributes Element.classList.remove: single token removal mutation
+PASS attributes Element.classList.remove: multiple tokens removal mutation
+FAIL attributes Element.classList.remove: missing token removal mutation assert_equals: mutation records must match expected 2 but got 1
+PASS attributes Element.classList.toggle: token removal mutation
+PASS attributes Element.classList.toggle: token addition mutation
+PASS attributes Element.classList.toggle: forced token removal mutation
+PASS attributes Element.classList.toggle: forced missing token removal no mutation
+PASS attributes Element.classList.toggle: forced existing token addition no mutation
+PASS attributes Element.classList.toggle: forced token addition mutation
+PASS attributes Element.attributes.value: update mutation
+PASS attributes Element.attributes.value: same id mutation
+PASS attributes Element.setAttribute: id mutation
+PASS attributes Element.setAttribute: same class mutation
+PASS attributes Element.setAttribute: classname mutation
+PASS attributes Element.removeAttribute: removal mutation
+PASS attributes Element.removeAttribute: removal no mutation
+PASS childList HTMLInputElement.removeAttribute: type removal mutation
+PASS attributes Element.setAttributeNS: creation mutation
+PASS attributes Element.setAttributeNS: prefixed attribute creation mutation
+PASS attributes Element.removeAttributeNS: removal mutation
+PASS attributes Element.removeAttributeNS: removal no mutation
+PASS attributes Element.removeAttributeNS: prefixed attribute removal no mutation
+PASS attributes/attributeFilter Element.id/Element.className: update mutation
+PASS attributes/attributeFilter Element.id/Element.className: multiple filter update mutation
+FAIL attributeOldValue alone Element.id: update mutation SyntaxError: DOM Exception 12
+FAIL attributeFilter alone Element.id/Element.className: multiple filter update mutation SyntaxError: DOM Exception 12
+PASS childList false: no childList mutation
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesMutationObserverattributeshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-attributes.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-attributes.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-attributes.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,406 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>MutationObservers: attributes mutations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="mutationobservers.js"></script>
+<h1>MutationObservers: attributes mutations</h1>
+<div id="log"></div>
+
+<section style="display: none">
+<p id='n'></p>
+
+<p id='n00'></p>
+<p id='n01'></p>
+<p id='n02'></p>
+<p id='n03'></p>
+<input id="n04" type="text">
+
+<p id='n10'></p>
+<p id='n11'></p>
+<p id='n12' class='c01'></p>
+<p id='n13' class='c01 c02'></p>
+
+<p id='n20'></p>
+<p id='n21'></p>
+<p id='n22'></p>
+<p id='n23'></p>
+<p id='n24' class="c01 c02"></p>
+
+<p id='n30' class="c01 c02"></p>
+<p id='n31' class="c01 c02"></p>
+<p id='n32' class="c01 c02"></p>
+
+<p id='n40' class="c01 c02"></p>
+<p id='n41' class="c01 c02"></p>
+<p id='n42' class="c01 c02"></p>
+<p id='n43' class="c01 c02"></p>
+<p id='n44' class="c01 c02"></p>
+<p id='n45' class="c01 c02"></p>
+
+<p id='n50' class="c01 c02"></p>
+<p id='n51'></p>
+
+<p id='n60'></p>
+<p id='n61' class="c01"></p>
+<p id='n62'></p>
+
+<p id='n70' class="c01"></p>
+<p id='n71'></p>
+<input id="n72" type="text">
+
+<p id='n80'></p>
+<p id='n81'></p>
+
+<p id='n90'></p>
+<p id='n91'></p>
+<p id='n92'></p>
+
+<p id='n1000'></p>
+<p id='n1001' class='c01'></p>
+
+<p id='n2000'></p>
+<p id='n2001' class='c01'></p>
+
+<p id='n3000'></p>
+
+</section>
+
+<script>
+
+var n = document.getElementById('n');
+
+runMutationTest(n,
+ {"attributes":true},
+ [{type: "attributes", attributeName: "id"}],
+ function() { n.id = "n000";},
+ "attributes Element.id: update, no oldValue, mutation");
+
+var n00 = document.getElementById('n00');
+runMutationTest(n00,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "n00", attributeName: "id"}],
+ function() { n00.id = "n000";},
+ "attributes Element.id: update mutation");
+
+var n01 = document.getElementById('n01');
+runMutationTest(n01,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "n01", attributeName: "id"}],
+ function() { n01.id = "";},
+ "attributes Element.id: empty string update mutation");
+
+var n02 = document.getElementById('n02');
+runMutationTest(n02,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "n02", attributeName: "id"}, {type: "attributes", attributeName: "class"}],
+ function() { n02.id = "n02"; n02.setAttribute("class", "c01");},
+ "attributes Element.id: same value mutation");
+
+var n03 = document.getElementById('n03');
+runMutationTest(n03,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "n03", attributeName: "id"}],
+ function() { n03.unknown = "c02"; n03.id = "n030";},
+ "attributes Element.unknown: IDL attribute no mutation");
+
+var n04 = document.getElementById('n04');
+runMutationTest(n04,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "text", attributeName: "type"}, {type: "attributes", oldValue: "n04", attributeName: "id"}],
+ function() { n04.type = "unknown"; n04.id = "n040";},
+ "attributes HTMLInputElement.type: type update mutation");
+
+ var n10 = document.getElementById('n10');
+runMutationTest(n10,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", attributeName: "class"}],
+ function() { n10.className = "c01";},
+ "attributes Element.className: new value mutation");
+
+ var n11 = document.getElementById('n11');
+runMutationTest(n11,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", attributeName: "class"}],
+ function() { n11.className = "";},
+ "attributes Element.className: empty string update mutation");
+
+ var n12 = document.getElementById('n12');
+runMutationTest(n12,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "c01", attributeName: "class"}],
+ function() { n12.className = "c01";},
+ "attributes Element.className: same value mutation");
+
+ var n13 = document.getElementById('n13');
+runMutationTest(n13,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "c01 c02", attributeName: "class"}],
+ function() { n13.className = "c01 c02";},
+ "attributes Element.className: same multiple values mutation");
+
+ var n20 = document.getElementById('n20');
+runMutationTest(n20,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", attributeName: "class"}],
+ function() { n20.classList.add("c01");},
+ "attributes Element.classList.add: single token addition mutation");
+
+ var n21 = document.getElementById('n21');
+runMutationTest(n21,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", attributeName: "class"}],
+ function() { n21.classList.add("c01", "c02", "c03");},
+ "attributes Element.classList.add: multiple tokens addition mutation");
+
+ var n22 = document.getElementById('n22');
+runMutationTest(n22,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "n22", attributeName: "id"}],
+ function() { try { n22.classList.add("c01", "", "c03"); } catch (e) { };
+ n22.id = "n220"; },
+ "attributes Element.classList.add: syntax err/no mutation");
+
+ var n23 = document.getElementById('n23');
+runMutationTest(n23,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "n23", attributeName: "id"}],
+ function() { try { n23.classList.add("c01", "c 02", "c03"); } catch (e) { };
+ n23.id = "n230"; },
+ "attributes Element.classList.add: invalid character/no mutation");
+
+ var n24 = document.getElementById('n24');
+runMutationTest(n24,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "c01 c02", attributeName: "class"}, {type: "attributes", oldValue: "n24", attributeName: "id"}],
+ function() { n24.classList.add("c02"); n24.id = "n240";},
+ "attributes Element.classList.add: same value mutation");
+
+ var n30 = document.getElementById('n30');
+runMutationTest(n30,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "c01 c02", attributeName: "class"}],
+ function() { n30.classList.remove("c01");},
+ "attributes Element.classList.remove: single token removal mutation");
+
+ var n31 = document.getElementById('n31');
+runMutationTest(n31,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "c01 c02", attributeName: "class"}],
+ function() { n31.classList.remove("c01", "c02");},
+ "attributes Element.classList.remove: multiple tokens removal mutation");
+
+ var n32 = document.getElementById('n32');
+runMutationTest(n32,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "c01 c02", attributeName: "class"}, {type: "attributes", oldValue: "n32", attributeName: "id"}],
+ function() { n32.classList.remove("c03"); n32.id = "n320";},
+ "attributes Element.classList.remove: missing token removal mutation");
+
+ var n40 = document.getElementById('n40');
+runMutationTest(n40,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "c01 c02", attributeName: "class"}],
+ function() { n40.classList.toggle("c01");},
+ "attributes Element.classList.toggle: token removal mutation");
+
+ var n41 = document.getElementById('n41');
+runMutationTest(n41,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "c01 c02", attributeName: "class"}],
+ function() { n41.classList.toggle("c03");},
+ "attributes Element.classList.toggle: token addition mutation");
+
+ var n42 = document.getElementById('n42');
+runMutationTest(n42,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "c01 c02", attributeName: "class"}],
+ function() { n42.classList.toggle("c01", false);},
+ "attributes Element.classList.toggle: forced token removal mutation");
+
+ var n43 = document.getElementById('n43');
+runMutationTest(n43,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "n43", attributeName: "id"}],
+ function() { n43.classList.toggle("c03", false); n43.id = "n430"; },
+ "attributes Element.classList.toggle: forced missing token removal no mutation");
+
+ var n44 = document.getElementById('n44');
+runMutationTest(n44,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "n44", attributeName: "id"}],
+ function() { n44.classList.toggle("c01", true); n44.id = "n440"; },
+ "attributes Element.classList.toggle: forced existing token addition no mutation");
+
+ var n45 = document.getElementById('n45');
+runMutationTest(n45,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "c01 c02", attributeName: "class"}],
+ function() { n45.classList.toggle("c03", true);},
+ "attributes Element.classList.toggle: forced token addition mutation");
+
+ var n50 = document.getElementById('n50');
+runMutationTest(n50,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "c01 c02", attributeName: "class"}],
+ function() {
+ for (var i = 0; i < n50.attributes.length; i++) {
+ var attr = n50.attributes[i];
+ if (attr.localName === "class") {
+ attr.value = "c03";
+ }
+ };
+ },
+ "attributes Element.attributes.value: update mutation");
+
+ var n51 = document.getElementById('n51');
+runMutationTest(n51,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "n51", attributeName: "id"}],
+ function() {
+ n51.attributes[0].value = "n51";
+ },
+ "attributes Element.attributes.value: same id mutation");
+
+ var n60 = document.getElementById('n60');
+runMutationTest(n60,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "n60", attributeName: "id"}],
+ function() {
+ n60.setAttribute("id", "n601");
+ },
+ "attributes Element.setAttribute: id mutation");
+
+ var n61 = document.getElementById('n61');
+runMutationTest(n61,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "c01", attributeName: "class"}],
+ function() {
+ n61.setAttribute("class", "c01");
+ },
+ "attributes Element.setAttribute: same class mutation");
+
+ var n62 = document.getElementById('n62');
+runMutationTest(n62,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", attributeName: "classname"}],
+ function() {
+ n62.setAttribute("classname", "c01");
+ },
+ "attributes Element.setAttribute: classname mutation");
+
+ var n70 = document.getElementById('n70');
+runMutationTest(n70,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "c01", attributeName: "class"}],
+ function() {
+ n70.removeAttribute("class");
+ },
+ "attributes Element.removeAttribute: removal mutation");
+
+ var n71 = document.getElementById('n71');
+runMutationTest(n71,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "n71", attributeName: "id"}],
+ function() {
+ n71.removeAttribute("class");
+ n71.id = "n710";
+ },
+ "attributes Element.removeAttribute: removal no mutation");
+
+ var n72 = document.getElementById('n72');
+runMutationTest(n72,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "text", attributeName: "type"}, {type: "attributes", oldValue: "n72", attributeName: "id"}],
+ function() {
+ n72.removeAttribute("type");
+ n72.id = "n720";
+ },
+ "childList HTMLInputElement.removeAttribute: type removal mutation");
+
+ var n80 = document.getElementById('n80');
+runMutationTest(n80,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", attributeName: "private", attributeNamespace: "http://example.org/"}],
+ function() {
+ n80.setAttributeNS("http://example.org/", "private", "42");
+ },
+ "attributes Element.setAttributeNS: creation mutation");
+
+ var n81 = document.getElementById('n81');
+runMutationTest(n81,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", attributeName: "lang", attributeNamespace: "http://www.w3.org/XML/1998/namespace"}],
+ function() {
+ n81.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:lang", "42");
+ },
+ "attributes Element.setAttributeNS: prefixed attribute creation mutation");
+
+ var n90 = document.getElementById('n90');
+ n90.setAttributeNS("http://example.org/", "private", "42");
+runMutationTest(n90,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "42", attributeName: "private", attributeNamespace: "http://example.org/"}],
+ function() {
+ n90.removeAttributeNS("http://example.org/", "private");
+ },
+ "attributes Element.removeAttributeNS: removal mutation");
+
+ var n91 = document.getElementById('n91');
+runMutationTest(n91,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "n91", attributeName: "id"}],
+ function() {
+ n91.removeAttributeNS("http://example.org/", "private");
+ n91.id = "n910";
+ },
+ "attributes Element.removeAttributeNS: removal no mutation");
+
+ var n92 = document.getElementById('n92');
+runMutationTest(n92,
+ {"attributes":true, "attributeOldValue": true},
+ [{type: "attributes", oldValue: "n92", attributeName: "id"}],
+ function() {
+ n92.removeAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:lang");
+ n92.id = "n920";
+ },
+ "attributes Element.removeAttributeNS: prefixed attribute removal no mutation");
+
+ var n1000 = document.getElementById('n1000');
+runMutationTest(n1000,
+ {"attributes":true, "attributeOldValue": true,"attributeFilter": ["id"]},
+ [{type: "attributes", oldValue: "n1000", attributeName: "id"}],
+ function() { n1000.id = "abc"; n1000.className = "c01"},
+ "attributes/attributeFilter Element.id/Element.className: update mutation");
+
+ var n1001 = document.getElementById('n1001');
+runMutationTest(n1001,
+ {"attributes":true, "attributeOldValue": true,"attributeFilter": ["id", "class"]},
+ [{type: "attributes", oldValue: "n1001", attributeName: "id"},
+ {type: "attributes", oldValue: "c01", attributeName: "class"}],
+ function() { n1001.id = "abc"; n1001.className = "c02"; n1001.setAttribute("lang", "fr");},
+ "attributes/attributeFilter Element.id/Element.className: multiple filter update mutation");
+
+ var n2000 = document.getElementById('n2000');
+runMutationTest(n2000,
+ {"attributeOldValue": true},
+ [{type: "attributes", oldValue: "n2000", attributeName: "id"}],
+ function() { n2000.id = "abc";},
+ "attributeOldValue alone Element.id: update mutation");
+
+ var n2001 = document.getElementById('n2001');
+runMutationTest(n2001,
+ {"attributeFilter": ["id", "class"]},
+ [{type: "attributes", attributeName: "id"},
+ {type: "attributes", attributeName: "class"}],
+ function() { n2001.id = "abcd"; n2001.className = "c02"; n2001.setAttribute("lang", "fr");},
+ "attributeFilter alone Element.id/Element.className: multiple filter update mutation");
+
+ var n3000 = document.getElementById('n3000');
+runMutationTest(n3000,
+ {"subtree": true, "childList":false, "attributes" : true},
+ [{type: "attributes", attributeName: "id" }],
+ function() { n3000.textContent = "CHANGED"; n3000.id = "abc";},
+ "childList false: no childList mutation");
+
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesMutationObservercharacterDataexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-characterData-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-characterData-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-characterData-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,27 @@
</span><ins>+MutationObservers: characterData mutations
+
+
+PASS characterData Text.data: simple mutation without oldValue
+PASS characterData Text.data: simple mutation
+PASS characterData Text.appendData: simple mutation
+PASS characterData Text.appendData: empty string mutation
+PASS characterData Text.appendData: null string mutation
+PASS characterData Text.insertData: simple mutation
+PASS characterData Text.insertData: empty string mutation
+PASS characterData Text.insertData: null string mutation
+PASS characterData Text.deleteData: simple mutation
+PASS characterData Text.deleteData: empty mutation
+PASS characterData Text.replaceData: simple mutation
+PASS characterData Text.replaceData: empty mutation
+PASS characterData ProcessingInstruction: data mutations
+FAIL characterData Comment: data mutations assert_equals: oldValue didn't match expected " data " but got " data "
+PASS Range (r70) is created
+PASS characterData Range.deleteContents: child and data removal mutation
+PASS Range (r71) is created
+PASS characterData Range.deleteContents: child and data removal mutation (2)
+PASS Range (r80) is created
+PASS characterData Range.extractContents: child and data removal mutation
+PASS Range (r81) is created
+PASS characterData Range.extractContents: child and data removal mutation (2)
+FAIL characterData/characterDataOldValue alone Text.data: simple mutation SyntaxError: DOM Exception 12
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesMutationObservercharacterDatahtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-characterData.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-characterData.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-characterData.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,215 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>MutationObservers: characterData mutations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="mutationobservers.js"></script>
+<h1>MutationObservers: characterData mutations</h1>
+<div id="log"></div>
+
+<section style="display: none">
+
+<p id='n'>text content</p>
+
+<p id='n00'>text content</p>
+
+<p id='n10'>CHAN</p>
+<p id='n11'>CHANGED</p>
+<p id='n12'>CHANGED</p>
+
+<p id='n20'>CHGED</p>
+<p id='n21'>CHANGED</p>
+<p id='n22'>CHANGED</p>
+
+<p id='n30'>CCCHANGED</p>
+<p id='n31'>CHANGED</p>
+
+<p id='n40'>CCCHANGED</p>
+<p id='n41'>CHANGED</p>
+
+<p id="n50"><?processing data?></p>
+
+<p id="n60"><!-- data --></p>
+
+<p id='n70'>CHANN</p>
+<p id='n71'>CHANN</p>
+
+<p id='n80'>CHANN</p>
+<p id='n81'>CHANN</p>
+
+<p id='n90'>CHANN</p>
+
+</section>
+
+<script>
+ var n = document.getElementById('n').firstChild;
+runMutationTest(n,
+ {"characterData":true},
+ [{type: "characterData"}],
+ function() { n.data = "NEW VALUE"; },
+ "characterData Text.data: simple mutation without oldValue");
+
+ var n00 = document.getElementById('n00').firstChild;
+runMutationTest(n00,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "text content" }],
+ function() { n00.data = "CHANGED"; },
+ "characterData Text.data: simple mutation");
+
+ var n10 = document.getElementById('n10').firstChild;
+runMutationTest(n10,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "CHAN" }],
+ function() { n10.appendData("GED"); },
+ "characterData Text.appendData: simple mutation");
+
+ var n11 = document.getElementById('n11').firstChild;
+runMutationTest(n11,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "CHANGED" }],
+ function() { n11.appendData(""); },
+ "characterData Text.appendData: empty string mutation");
+
+ var n12 = document.getElementById('n12').firstChild;
+runMutationTest(n12,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "CHANGED" }],
+ function() { n12.appendData(null); },
+ "characterData Text.appendData: null string mutation");
+
+ var n20 = document.getElementById('n20').firstChild;
+runMutationTest(n20,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "CHGED" }],
+ function() { n20.insertData(2, "AN"); },
+ "characterData Text.insertData: simple mutation");
+
+ var n21 = document.getElementById('n21').firstChild;
+runMutationTest(n21,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "CHANGED" }],
+ function() { n21.insertData(2, ""); },
+ "characterData Text.insertData: empty string mutation");
+
+ var n22 = document.getElementById('n22').firstChild;
+runMutationTest(n22,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "CHANGED" }],
+ function() { n22.insertData(2, null); },
+ "characterData Text.insertData: null string mutation");
+
+ var n30 = document.getElementById('n30').firstChild;
+runMutationTest(n30,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "CCCHANGED" }],
+ function() { n30.deleteData(0, 2); },
+ "characterData Text.deleteData: simple mutation");
+
+ var n31 = document.getElementById('n31').firstChild;
+runMutationTest(n31,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "CHANGED" }, {type: "characterData", oldValue: "CHANGED" }],
+ function() { n31.deleteData(0, 0); n31.data = "n31"; },
+ "characterData Text.deleteData: empty mutation");
+
+ var n40 = document.getElementById('n40').firstChild;
+runMutationTest(n40,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "CCCHANGED" }],
+ function() { n40.replaceData(0, 2, "CH"); },
+ "characterData Text.replaceData: simple mutation");
+
+ var n41 = document.getElementById('n41').firstChild;
+runMutationTest(n41,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "CHANGED" }],
+ function() { n41.replaceData(0, 0, "CH"); },
+ "characterData Text.replaceData: empty mutation");
+
+ var n50 = document.getElementById('n50').firstChild;
+runMutationTest(n50,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "?processing data?" },{type: "characterData", oldValue: "CHANGED" },{type: "characterData", oldValue: "CHANGED" }],
+ function() {
+ n50.data = "CHANGED";
+ n50.deleteData(0, 0);
+ n50.replaceData(0, 2, "CH"); },
+ "characterData ProcessingInstruction: data mutations");
+
+ var n60 = document.getElementById('n60').firstChild;
+runMutationTest(n60,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: " data " },{type: "characterData", oldValue: "CHANGED" },{type: "characterData", oldValue: "CHANGED" }],
+ function() {
+ n60.data = "CHANGED";
+ n60.deleteData(0, 0);
+ n60.replaceData(0, 2, "CH"); },
+ "characterData Comment: data mutations");
+
+ var n70 = document.getElementById('n70');
+ var r70 = null;
+ test(function () {
+ n70.appendChild(document.createTextNode("NNN"));
+ n70.appendChild(document.createTextNode("NGED"));
+ r70 = document.createRange();
+ r70.setStart(n70.firstChild, 4);
+ r70.setEnd(n70.lastChild, 1);
+ }, "Range (r70) is created");
+runMutationTest(n70.firstChild,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "CHANN" }],
+ function() { r70.deleteContents(); },
+ "characterData Range.deleteContents: child and data removal mutation");
+
+ var n71 = document.getElementById('n71');
+ var r71 = null;
+ test(function () {
+ n71.appendChild(document.createTextNode("NNN"));
+ n71.appendChild(document.createTextNode("NGED"));
+ r71 = document.createRange();
+ r71.setStart(n71.firstChild, 4);
+ r71.setEnd(n71.lastChild, 1);
+ }, "Range (r71) is created");
+runMutationTest(n71.lastChild,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "NGED"}],
+ function() { r71.deleteContents(); },
+ "characterData Range.deleteContents: child and data removal mutation (2)");
+
+ var n80 = document.getElementById('n80');
+ var r80 = null;
+ test(function () {
+ n80.appendChild(document.createTextNode("NNN"));
+ n80.appendChild(document.createTextNode("NGED"));
+ r80 = document.createRange();
+ r80.setStart(n80.firstChild, 4);
+ r80.setEnd(n80.lastChild, 1);
+ }, "Range (r80) is created");
+runMutationTest(n80.firstChild,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "CHANN" }],
+ function() { r80.extractContents(); },
+ "characterData Range.extractContents: child and data removal mutation");
+
+ var n81 = document.getElementById('n81');
+ var r81 = null;
+ test(function () {
+ n81.appendChild(document.createTextNode("NNN"));
+ n81.appendChild(document.createTextNode("NGED"));
+ r81 = document.createRange();
+ r81.setStart(n81.firstChild, 4);
+ r81.setEnd(n81.lastChild, 1);
+ }, "Range (r81) is created");
+runMutationTest(n81.lastChild,
+ {"characterData":true,"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "NGED" }],
+ function() { r81.extractContents(); },
+ "characterData Range.extractContents: child and data removal mutation (2)");
+
+ var n90 = document.getElementById('n90').firstChild;
+runMutationTest(n90,
+ {"characterDataOldValue":true},
+ [{type: "characterData", oldValue: "CHANN" }],
+ function() { n90.data = "CHANGED"; },
+ "characterData/characterDataOldValue alone Text.data: simple mutation");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesMutationObserverchildListexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-childList-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-childList-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-childList-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+MutationObservers: childList mutations
+
+
+PASS childList Node.nodeValue: no mutation
+PASS childList Node.textContent: replace content mutation
+PASS childList Node.textContent: no previous content mutation
+PASS childList Node.textContent: textContent no mutation
+PASS childList Node.textContent: empty string mutation
+PASS childList Node.normalize mutation
+PASS childList Node.normalize mutations
+PASS childList Node.insertBefore: addition mutation
+PASS childList Node.insertBefore: removal mutation
+PASS childList Node.insertBefore: removal and addition mutations
+PASS childList Node.insertBefore: fragment addition mutations
+PASS childList Node.insertBefore: fragment removal mutations
+PASS childList Node.insertBefore: last child addition mutation
+PASS childList Node.appendChild: addition mutation
+PASS childList Node.appendChild: removal mutation
+PASS childList Node.appendChild: removal and addition mutations
+PASS childList Node.appendChild: fragment addition mutations
+PASS childList Node.appendChild: fragment removal mutations
+PASS childList Node.appendChild: addition outside document tree mutation
+PASS childList Node.replaceChild: replacement mutation
+PASS childList Node.replaceChild: removal mutation
+FAIL childList Node.replaceChild: internal replacement mutation assert_equals: mutation records must match expected 2 but got 1
+PASS childList Node.removeChild: removal mutation
+PASS Range (r70) is created
+PASS childList Range.deleteContents: child removal mutation
+PASS Range (r71) is created
+PASS childList Range.deleteContents: child and data removal mutation
+PASS Range (r80) is created
+PASS childList Range.extractContents: child removal mutation
+PASS Range (r81) is created
+PASS childList Range.extractContents: child and data removal mutation
+PASS Range (r90) is created
+PASS childList Range.insertNode: child insertion mutation
+PASS Range (r91) is created
+PASS childList Range.insertNode: children insertion mutation
+PASS Range (r100) is created
+PASS childList Range.surroundContents: children removal and addition mutation
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesMutationObserverchildListhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-childList.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-childList.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-childList.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,423 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>MutationObservers: childList mutations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="mutationobservers.js"></script>
+<h1>MutationObservers: childList mutations</h1>
+<div id="log"></div>
+
+<section style="display: none">
+<p id='dummies'>
+<span id='d30'>text content</span>
+<span id='d35'>text content</span>
+<span id='d40'>text content</span>
+<span id='d45'>text content</span>
+<span id='d50'>text content</span>
+<span id='d51'>text content</span>
+</p>
+
+</section>
+<section style="display: none">
+<p id='n00'><span>text content</span></p>
+
+<p id='n10'><span>text content</span></p>
+<p id='n11'></p>
+<p id='n12'></p>
+<p id='n13'><span>text content</span></p>
+
+<p id='n20'>PAS</p>
+<p id='n21'>CH</p>
+
+<p id='n30'><span>text content</span></p>
+<p id='n31'><span>text content</span></p>
+<p id='n32'><span>AN</span><span>CH</span><span>GED</span></p>
+<p id='n33'><span>text content</span></p>
+<p id='n34'><span>text content</span></p>
+<p id='n35'><span>text content</span></p>
+
+<p id='n40'><span>text content</span></p>
+<p id='n41'><span>text content</span></p>
+<p id='n42'><span>CH</span><span>GED</span><span>AN</span></p>
+<p id='n43'><span>text content</span></p>
+<p id='n44'><span>text content</span></p>
+<p id='n45'><span>text content</span></p>
+
+
+<p id='n50'><span>text content</span></p>
+<p id='n51'><span>text content</span></p>
+<p id='n52'><span>NO </span><span>CHANGED</span></p>
+
+<p id='n60'><span>text content</span></p>
+
+<p id='n70'><span>NO </span><span>CHANGED</span></p>
+<p id='n71'>CHANN</p>
+
+<p id='n80'><span>NO </span><span>CHANGED</span></p>
+<p id='n81'>CHANN</p>
+
+<p id='n90'><span>CHA</span><span>ED</span></p>
+<p id='n91'>CHAE</p>
+
+<p id='n100'><span id="s1">CHAN</span><span id="s2">GED</span></p>
+
+</section>
+
+<script>
+ var dummies = document.getElementById('dummies');
+
+ function createFragment() {
+ var fragment = document.createDocumentFragment();
+ fragment.appendChild(document.createTextNode("11"));
+ fragment.appendChild(document.createTextNode("22"));
+ return fragment;
+ }
+
+ var n00 = document.getElementById('n00');
+
+ runMutationTest(n00,
+ {"childList":true, "attributes":true},
+ [{type: "attributes", attributeName: "class"}],
+ function() { n00.nodeValue = ""; n00.setAttribute("class", "dummy");},
+ "childList Node.nodeValue: no mutation");
+
+ var n10 = document.getElementById('n10');
+ runMutationTest(n10,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [n10.firstChild],
+ addedNodes: function() {return [n10.firstChild]}}],
+ function() { n10.textContent = "new data"; },
+ "childList Node.textContent: replace content mutation");
+
+ var n11 = document.getElementById('n11');
+ runMutationTest(n11,
+ {"childList":true},
+ [{type: "childList",
+ addedNodes: function() {return [n11.firstChild]}}],
+ function() { n11.textContent = "new data"; },
+ "childList Node.textContent: no previous content mutation");
+
+ var n12 = document.getElementById('n12');
+ runMutationTest(n12,
+ {"childList":true, "attributes":true},
+ [{type: "attributes", attributeName: "class"}],
+ function() { n12.textContent = ""; n12.setAttribute("class", "dummy");},
+ "childList Node.textContent: textContent no mutation");
+
+ var n13 = document.getElementById('n13');
+ runMutationTest(n13,
+ {"childList":true},
+ [{type: "childList", removedNodes: [n13.firstChild]}],
+ function() { n13.textContent = ""; },
+ "childList Node.textContent: empty string mutation");
+
+ var n20 = document.getElementById('n20');
+ n20.appendChild(document.createTextNode("S"));
+ runMutationTest(n20,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [n20.lastChild],
+ previousSibling: n20.firstChild}],
+ function() { n20.normalize(); },
+ "childList Node.normalize mutation");
+
+ var n21 = document.getElementById('n21');
+ n21.appendChild(document.createTextNode("AN"));
+ n21.appendChild(document.createTextNode("GED"));
+ runMutationTest(n21,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [n21.lastChild.previousSibling],
+ previousSibling: n21.firstChild,
+ nextSibling: n21.lastChild},
+ {type: "childList",
+ removedNodes: [n21.lastChild],
+ previousSibling: n21.firstChild}],
+ function() { n21.normalize(); },
+ "childList Node.normalize mutations");
+
+ var n30 = document.getElementById('n30');
+ var d30 = document.getElementById('d30');
+ runMutationTest(n30,
+ {"childList":true},
+ [{type: "childList",
+ addedNodes: [d30],
+ nextSibling: n30.firstChild}],
+ function() { n30.insertBefore(d30, n30.firstChild); },
+ "childList Node.insertBefore: addition mutation");
+
+ var n31 = document.getElementById('n31');
+ runMutationTest(n31,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [n31.firstChild]}],
+ function() { dummies.insertBefore(n31.firstChild, dummies.firstChild); },
+ "childList Node.insertBefore: removal mutation");
+
+ var n32 = document.getElementById('n32');
+ runMutationTest(n32,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [n32.firstChild.nextSibling],
+ previousSibling: n32.firstChild, nextSibling: n32.lastChild},
+ {type: "childList",
+ addedNodes: [n32.firstChild.nextSibling],
+ nextSibling: n32.firstChild}],
+ function() { n32.insertBefore(n32.firstChild.nextSibling, n32.firstChild); },
+ "childList Node.insertBefore: removal and addition mutations");
+
+ var n33 = document.getElementById('n33');
+ var f33 = createFragment();
+ runMutationTest(n33,
+ {"childList":true},
+ [{type: "childList",
+ addedNodes: [f33.firstChild, f33.lastChild],
+ nextSibling: n33.firstChild}],
+ function() { n33.insertBefore(f33, n33.firstChild); },
+ "childList Node.insertBefore: fragment addition mutations");
+
+ var n34 = document.getElementById('n34');
+ var f34 = createFragment();
+ runMutationTest(f34,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [f34.firstChild, f34.lastChild]}],
+ function() { n34.insertBefore(f34, n34.firstChild); },
+ "childList Node.insertBefore: fragment removal mutations");
+
+ var n35 = document.getElementById('n35');
+ var d35 = document.getElementById('d35');
+ runMutationTest(n35,
+ {"childList":true},
+ [{type: "childList",
+ addedNodes: [d35],
+ previousSibling: n35.firstChild}],
+ function() { n35.insertBefore(d35, null); },
+ "childList Node.insertBefore: last child addition mutation");
+
+ var n40 = document.getElementById('n40');
+ var d40 = document.getElementById('d40');
+ runMutationTest(n40,
+ {"childList":true},
+ [{type: "childList",
+ addedNodes: [d40],
+ previousSibling: n40.firstChild}],
+ function() { n40.appendChild(d40); },
+ "childList Node.appendChild: addition mutation");
+
+ var n41 = document.getElementById('n41');
+ runMutationTest(n41,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [n41.firstChild]}],
+ function() { dummies.appendChild(n41.firstChild); },
+ "childList Node.appendChild: removal mutation");
+
+ var n42 = document.getElementById('n42');
+ runMutationTest(n42,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [n42.firstChild.nextSibling],
+ previousSibling: n42.firstChild, nextSibling: n42.lastChild},
+ {type: "childList",
+ addedNodes: [n42.firstChild.nextSibling],
+ previousSibling: n42.lastChild}],
+ function() { n42.appendChild(n42.firstChild.nextSibling); },
+ "childList Node.appendChild: removal and addition mutations");
+
+ var n43 = document.getElementById('n43');
+ var f43 = createFragment();
+ runMutationTest(n43,
+ {"childList":true},
+ [{type: "childList",
+ addedNodes: [f43.firstChild, f43.lastChild],
+ previousSibling: n43.firstChild}],
+ function() { n43.appendChild(f43); },
+ "childList Node.appendChild: fragment addition mutations");
+
+ var n44 = document.getElementById('n44');
+ var f44 = createFragment();
+ runMutationTest(f44,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [f44.firstChild, f44.lastChild]}],
+ function() { n44.appendChild(f44); },
+ "childList Node.appendChild: fragment removal mutations");
+
+ var n45 = document.createElement('p');
+ var d45 = document.createElement('span');
+ runMutationTest(n45,
+ {"childList":true},
+ [{type: "childList",
+ addedNodes: [d45]}],
+ function() { n45.appendChild(d45); },
+ "childList Node.appendChild: addition outside document tree mutation");
+
+ var n50 = document.getElementById('n50');
+ var d50 = document.getElementById('d50');
+ runMutationTest(n50,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [n50.firstChild],
+ addedNodes: [d50]}],
+ function() { n50.replaceChild(d50, n50.firstChild); },
+ "childList Node.replaceChild: replacement mutation");
+
+ var n51 = document.getElementById('n51');
+ var d51 = document.getElementById('d51');
+ runMutationTest(n51,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [n51.firstChild]}],
+ function() { d51.parentNode.replaceChild(n51.firstChild, d51); },
+ "childList Node.replaceChild: removal mutation");
+
+ var n52 = document.getElementById('n52');
+ runMutationTest(n52,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [n52.lastChild],
+ previousSibling: n52.firstChild},
+ {type: "childList",
+ removedNodes: [n52.firstChild],
+ addedNodes: [n52.lastChild]}],
+ function() { n52.replaceChild(n52.lastChild, n52.firstChild); },
+ "childList Node.replaceChild: internal replacement mutation");
+
+ var n60 = document.getElementById('n60');
+ runMutationTest(n60,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [n60.firstChild]}],
+ function() { n60.removeChild(n60.firstChild); },
+ "childList Node.removeChild: removal mutation");
+
+ var n70 = document.getElementById('n70');
+ var r70 = null;
+ test(function () {
+ r70 = document.createRange();
+ r70.setStartBefore(n70.firstChild);
+ r70.setEndAfter(n70.firstChild);
+ }, "Range (r70) is created");
+ runMutationTest(n70,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [n70.firstChild],
+ nextSibling: n70.lastChild}],
+ function() { r70.deleteContents(); },
+ "childList Range.deleteContents: child removal mutation");
+
+ var n71 = document.getElementById('n71');
+ var r71 = null;
+ test(function () {
+ n71.appendChild(document.createTextNode("NNN"));
+ n71.appendChild(document.createTextNode("NGED"));
+ r71 = document.createRange();
+ r71.setStart(n71.firstChild, 4);
+ r71.setEnd(n71.lastChild, 1);
+ }, "Range (r71) is created");
+ runMutationTest(n71,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [n71.firstChild.nextSibling],
+ previousSibling: n71.firstChild,
+ nextSibling: n71.lastChild}],
+ function() { r71.deleteContents(); },
+ "childList Range.deleteContents: child and data removal mutation");
+
+ var n80 = document.getElementById('n80');
+ var r80 = null;
+ test(function () {
+ r80 = document.createRange();
+ r80.setStartBefore(n80.firstChild);
+ r80.setEndAfter(n80.firstChild);
+ }, "Range (r80) is created");
+ runMutationTest(n80,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [n80.firstChild],
+ nextSibling: n80.lastChild}],
+ function() { r80.extractContents(); },
+ "childList Range.extractContents: child removal mutation");
+
+ var n81 = document.getElementById('n81');
+ var r81 = null;
+ test(function () {
+ n81.appendChild(document.createTextNode("NNN"));
+ n81.appendChild(document.createTextNode("NGED"));
+ r81 = document.createRange();
+ r81.setStart(n81.firstChild, 4);
+ r81.setEnd(n81.lastChild, 1);
+ }, "Range (r81) is created");
+ runMutationTest(n81,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [n81.firstChild.nextSibling],
+ previousSibling: n81.firstChild,
+ nextSibling: n81.lastChild}],
+ function() { r81.extractContents(); },
+ "childList Range.extractContents: child and data removal mutation");
+
+ var n90 = document.getElementById('n90');
+ var f90 = document.createTextNode("NG");
+ var r90 = null;
+ test(function () {
+ r90 = document.createRange();
+ r90.setStartAfter(n90.firstChild);
+ r90.setEndBefore(n90.lastChild);
+ }, "Range (r90) is created");
+ runMutationTest(n90,
+ {"childList":true},
+ [{type: "childList",
+ addedNodes: [f90],
+ previousSibling: n90.firstChild,
+ nextSibling: n90.lastChild}],
+ function() { r90.insertNode(f90); },
+ "childList Range.insertNode: child insertion mutation");
+
+ var n91 = document.getElementById('n91');
+ var f91 = document.createTextNode("NG");
+ var r91 = null;
+ test(function () {
+ n91.appendChild(document.createTextNode("D"));
+ r91 = document.createRange();
+ r91.setStart(n91.firstChild, 3);
+ r91.setEnd(n91.lastChild, 0);
+ }, "Range (r91) is created");
+ runMutationTest(n91,
+ {"childList":true},
+ [{type: "childList",
+ addedNodes: function() { return [n91.lastChild.previousSibling]; },
+ previousSibling: n91.firstChild,
+ nextSibling: n91.lastChild},
+ {type: "childList",
+ addedNodes: [f91],
+ previousSibling: n91.firstChild,
+ nextSibling: function () { return n91.lastChild.previousSibling; } }],
+ function() { r91.insertNode(f91); },
+ "childList Range.insertNode: children insertion mutation");
+
+ var n100 = document.getElementById('n100');
+ var f100 = document.createElement("span");
+ var r100 = null;
+ test(function () {
+ r100 = document.createRange();
+ r100.setStartBefore(n100.firstChild);
+ r100.setEndAfter(n100.lastChild);
+ }, "Range (r100) is created");
+ runMutationTest(n100,
+ {"childList":true},
+ [{type: "childList",
+ removedNodes: [n100.firstChild],
+ nextSibling: n100.lastChild},
+ {type: "childList",
+ removedNodes: [n100.lastChild]},
+ {type: "childList",
+ addedNodes: [f100] }],
+ function() { r100.surroundContents(f100); },
+ "childList Range.surroundContents: children removal and addition mutation");
+
+</script>
+
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesMutationObserverdisconnectexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-disconnect-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-disconnect-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-disconnect-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+MutationObservers: disconnect
+
+
+PASS subtree mutations
+PASS disconnect discarded some mutations
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesMutationObserverdisconnecthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-disconnect.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-disconnect.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-disconnect.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,48 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>MutationObservers: disconnect</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<h1>MutationObservers: disconnect</h1>
+<div id="log"></div>
+<section style="display: none">
+<p id='n00'></p>
+</section>
+<script>
+var n00 = document.getElementById('n00');
+var parentTest = async_test("subtree mutations");
+function masterMO(sequence, obs) {
+ parentTest.step(function() {
+ assert_equals(sequence.length, 4, "mutation records must match");
+ });
+ parentTest.done();
+}
+parentTest.step(function() {
+ (new MutationObserver(masterMO)).observe(n00.parentNode, {"subtree": true, "attributes": true});
+});
+
+var disconnectTest = async_test("disconnect discarded some mutations");
+function observerCallback(sequence, obs) {
+ disconnectTest.step(function() {
+ assert_equals(sequence.length, 1);
+ assert_equals(sequence[0].type, "attributes");
+ assert_equals(sequence[0].attributeName, "id");
+ assert_equals(sequence[0].oldValue, "latest");
+ disconnectTest.done();
+ });
+}
+
+var observer;
+disconnectTest.step(function() {
+ observer = new MutationObserver(observerCallback);
+ observer.observe(n00, {"attributes": true});
+ n00.id = "foo";
+ n00.id = "bar";
+ observer.disconnect();
+ observer.observe(n00, {"attributes": true, "attributeOldValue": true});
+ n00.id = "latest";
+ observer.disconnect();
+ observer.observe(n00, {"attributes": true, "attributeOldValue": true});
+ n00.id = "n0000";
+});
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesMutationObserverdocumentexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-document-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-document-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-document-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+MutationObservers: document mutations
+
+
+PASS setup test
+PASS parser insertion mutations
+PASS parser script insertion mutation
+PASS removal of parent during parsing
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesMutationObserverdocumenthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-document.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-document.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-document.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,167 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>MutationObservers: takeRecords</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="mutationobservers.js"></script>
+<h1>MutationObservers: document mutations</h1>
+<div id="log"></div>
+
+<script id='s001'>
+ var setupTest = async_test("setup test");
+ var insertionTest = async_test("parser insertion mutations");
+ var insertionTest2 = async_test("parser script insertion mutation");
+ var testCounter = 0;
+
+ function masterMO(sequence, obs) {
+ testCounter++;
+ if (testCounter == 1) {
+ insertionTest.step(
+ function () {
+ checkRecords(document, sequence,
+ [{type: "childList",
+ addedNodes: function () {
+ return [ document.getElementById("n00") ];
+ },
+ previousSibling: function () {
+ return document.getElementById("s001");
+ },
+ target: document.body},
+ {type: "childList",
+ addedNodes: function () {
+ return [ document.getElementById("s002") ];
+ },
+ previousSibling: function () {
+ return document.getElementById("n00");
+ },
+ target: document.body},
+ {type: "childList",
+ addedNodes: function () {
+ return [ document.getElementById("s002").firstChild ];
+ },
+ target: function () {
+ return document.getElementById("s002");
+ }}]);
+ });
+ } else if (testCounter == 2) {
+ insertionTest2.step(
+ function () {
+ checkRecords(document, sequence,
+ [{type: "childList",
+ addedNodes: function () {
+ return [ document.getElementById("inserted_element") ];
+ },
+ previousSibling: function () {
+ return document.getElementById("s002");
+ },
+ target: document.body},
+ {type: "childList",
+ addedNodes: function () {
+ return [ document.getElementById("inserted_script") ];
+ },
+ target: function () {
+ return document.getElementById("n00");
+ }}
+ ]);
+ });
+ }
+ }
+ var document_observer;
+ var newElement;
+ setupTest.step(function() {
+ document_observer = new MutationObserver(masterMO);
+ newElement = document.createElement("span");
+ document_observer.observe(document, {subtree:true,childList:true});
+ newElement.id = "inserted_element";
+ newElement.setAttribute("style", "display: none");
+ newElement.textContent = "my new span for n00";
+ });
+</script><p id='n00'></p><script id='s002'>
+ var newScript = document.createElement("script");
+ setupTest.step(function() {
+ newScript.textContent = "document.body.appendChild(newElement);";
+ newScript.id = "inserted_script";
+ document.getElementById("n00").appendChild(newScript);
+ });
+ if (testCounter < 1) {
+ insertionTest.step(
+ function () {
+ assert_unreached("document observer did not trigger");
+ });
+ }
+</script><script id='s003'>
+ setupTest.step(function() {
+ document_observer.disconnect();
+ });
+ if (testCounter < 2) {
+ insertionTest2.step(
+ function () {
+ assert_unreached("document observer did not trigger");
+ });
+ }
+ insertionTest.done();
+ insertionTest2.done();
+</script>
+
+<p id='n012'></p><div id='d01'>
+<script id='s011'>
+ var removalTest = async_test("removal of parent during parsing");
+ var d01 = document.getElementById("d01");
+ testCounter = 0;
+
+ function removalMO(sequence, obs) {
+ testCounter++;
+ if (testCounter == 1) {
+ removalTest.step(
+ function () {
+ checkRecords(document, sequence,
+ [{type: "childList",
+ removedNodes: function () {
+ return [ d01 ];
+ },
+ previousSibling: function () {
+ return document.getElementById("n012");
+ },
+ target: document.body}]);
+ });
+ } else if (testCounter == 2) {
+ removalTest.step(
+ function () {
+ checkRecords(document, sequence,
+ [{type: "childList",
+ addedNodes: function () {
+ return [ document.getElementById("s012") ];
+ },
+ previousSibling: function () {
+ return document.getElementById("n012");
+ },
+ target: document.body},
+ {type: "childList",
+ addedNodes: function () {
+ return [ document.getElementById("s012").firstChild ];
+ },
+ target: function () {
+ return document.getElementById("s012");
+ }}]);
+ });
+ }
+ }
+ var document2_observer;
+ setupTest.step(function() {
+ document2_observer = new MutationObserver(removalMO);
+ document2_observer.observe(document, {subtree:true,childList:true});
+ d01.parentNode.removeChild(d01);
+ });
+</script><p id='n01'></p></div><script id='s012'>
+ setupTest.step(function() {
+ document2_observer.disconnect();
+ });
+ if (testCounter < 2) {
+ removalTest.step(
+ function () {
+ assert_unreached("document observer did not trigger");
+ });
+ }
+ removalTest.done();
+ setupTest.done();
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesMutationObserverinnerouterexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-inner-outer-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-inner-outer-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-inner-outer-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+MutationObservers: innerHTML, outerHTML mutations
+
+
+FAIL innerHTML mutation assert_equals: mutation records must match expected 2 but got 1
+PASS innerHTML with 2 children mutation
+PASS outerHTML mutation
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesMutationObserverinnerouterhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-inner-outer.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-inner-outer.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-inner-outer.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,65 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>MutationObservers: innerHTML, outerHTML mutations</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="mutationobservers.js"></script>
+<h1>MutationObservers: innerHTML, outerHTML mutations</h1>
+<div id="log"></div>
+
+<section style="display: none">
+
+<p id='n00'>old text</p>
+
+<p id='n01'>old text</p>
+
+<div id='n02'><p>old text</p></div>
+</section>
+
+<script>
+ var n00;
+ var n00oldText;
+ var n01;
+ var n01oldText;
+ var n02;
+
+ setup(function() {
+ n00 = document.getElementById('n00');
+ n00oldText = n00.firstChild;
+ n01 = document.getElementById('n01');
+ n01oldText = n01.firstChild;
+ n02 = document.getElementById('n02');
+ })
+
+ runMutationTest(n00,
+ {childList:true,attributes:true},
+ [{type: "childList",
+ removedNodes: [n00oldText],
+ addedNodes: function() {
+ return [document.getElementById("n00").firstChild];
+ }},
+ {type: "attributes", attributeName: "class"}],
+ function() { n00.innerHTML = "new text"; n00.className = "c01"},
+ "innerHTML mutation");
+
+ runMutationTest(n01,
+ {childList:true},
+ [{type: "childList",
+ removedNodes: [n01oldText],
+ addedNodes: function() {
+ return [document.getElementById("n01").firstChild,
+ document.getElementById("n01").lastChild];
+ }}],
+ function() { n01.innerHTML = "<span>new</span><span>text</span>"; },
+ "innerHTML with 2 children mutation");
+
+ runMutationTest(n02,
+ {childList:true},
+ [{type: "childList",
+ removedNodes: [n02.firstChild],
+ addedNodes: function() {
+ return [n02.firstChild];
+ }}],
+ function() { n02.firstChild.outerHTML = "<p>next text</p>"; },
+ "outerHTML mutation");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesMutationObservertakeRecordsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-takeRecords-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-takeRecords-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-takeRecords-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+MutationObservers: takeRecords
+
+
+PASS unreachabled test
+PASS All records present
+PASS No more records present
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesMutationObservertakeRecordshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-takeRecords.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-takeRecords.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-takeRecords.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,53 @@
</span><ins>+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>MutationObservers: takeRecords</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="mutationobservers.js"></script>
+<h1>MutationObservers: takeRecords</h1>
+<div id="log"></div>
+
+<section style="display: none">
+
+<p id='n00'></p>
+
+</section>
+
+<script>
+
+ var n00 = document.getElementById('n00');
+
+ var unused = async_test("unreachabled test");
+
+ var observer;
+ unused.step(function () {
+ observer = new MutationObserver(unused.unreached_func("the observer callback should not fire"));
+ observer.observe(n00, { "subtree": true,
+ "childList": true,
+ "attributes": true,
+ "characterData": true,
+ "attributeOldValue": true,
+ "characterDataOldValue": true});
+ n00.id = "foo";
+ n00.id = "bar";
+ n00.className = "bar";
+ n00.textContent = "old data";
+ n00.firstChild.data = "new data";
+ });
+
+ test(function() {
+ checkRecords(n00, observer.takeRecords(), [{type: "attributes", attributeName: "id", oldValue: "n00"},
+ {type: "attributes", attributeName: "id", oldValue: "foo"},
+ {type: "attributes", attributeName: "class"},
+ {type: "childList", addedNodes: [n00.firstChild]},
+ {type: "characterData", oldValue: "old data", target: n00.firstChild}]);
+ }, "All records present");
+
+ test(function() {
+ checkRecords(n00, observer.takeRecords(), []);
+ }, "No more records present");
+</script>
+<script>
+ unused.done();
+
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodeappendChildexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-appendChild-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-appendChild-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-appendChild-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+
+
+FAIL WebIDL tests assert_throws: function "function () { document.body.appendChild(null) }" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+PASS Appending to a leaf node.
+FAIL Appending null to a text node assert_throws: function "function () { node.appendChild(null) }" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Appending to a text node
+FAIL Appending null to a comment assert_throws: function "function () { node.appendChild(null) }" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Appending to a comment
+FAIL Appending null to a doctype assert_throws: function "function () { node.appendChild(null) }" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Appending to a doctype
+PASS Appending a document
+PASS Adopting an orphan
+PASS Adopting a non-orphan
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodeappendChildhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-appendChild.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-appendChild.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-appendChild.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,59 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Node.appendChild</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-appendchild">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<iframe src=about:blank></iframe>
+<script>
+// TODO: Exhaustive tests
+function testLeaf(node, desc) {
+ // WebIDL.
+ test(function() {
+ assert_throws(new TypeError(), function() { node.appendChild(null) })
+ }, "Appending null to a " + desc)
+
+ // Pre-insert step 1.
+ test(function() {
+ assert_throws("HIERARCHY_REQUEST_ERR", function() { node.appendChild(document.createTextNode("fail")) })
+ }, "Appending to a " + desc)
+}
+
+// WebIDL.
+test(function() {
+ assert_throws(new TypeError(), function() { document.body.appendChild(null) })
+ assert_throws(new TypeError(), function() { document.body.appendChild({'a':'b'}) })
+}, "WebIDL tests")
+
+// WebIDL and pre-insert step 1.
+test(function() {
+ testLeaf(document.createTextNode("Foo"), "text node")
+ testLeaf(document.createComment("Foo"), "comment")
+ testLeaf(document.doctype, "doctype")
+}, "Appending to a leaf node.")
+
+// Pre-insert step 5.
+test(function() {
+ var frameDoc = frames[0].document
+ assert_throws("HIERARCHY_REQUEST_ERR", function() { document.body.appendChild(frameDoc) })
+}, "Appending a document")
+
+// Pre-insert step 8.
+test(function() {
+ var frameDoc = frames[0].document
+ var s = frameDoc.createElement("a")
+ assert_equals(s.ownerDocument, frameDoc)
+ document.body.appendChild(s)
+ assert_equals(s.ownerDocument, document)
+}, "Adopting an orphan")
+test(function() {
+ var frameDoc = frames[0].document
+ var s = frameDoc.createElement("b")
+ assert_equals(s.ownerDocument, frameDoc)
+ frameDoc.body.appendChild(s)
+ assert_equals(s.ownerDocument, frameDoc)
+ document.body.appendChild(s)
+ assert_equals(s.ownerDocument, document)
+}, "Adopting a non-orphan")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodebaseURIexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-baseURI-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-baseURI-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-baseURI-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+
+PASS For elements belonging to document, baseURI should be document url
+FAIL For elements unassigned to document, baseURI should be document url assert_equals: expected (string) "http://127.0.0.1:8000/w3c/dom/nodes/Node-baseURI.html" but got (object) null
+FAIL For elements belonging to document fragments, baseURI should be document url assert_equals: expected (string) "http://127.0.0.1:8000/w3c/dom/nodes/Node-baseURI.html" but got (object) null
+PASS After inserting fragment into document, element baseURI should be document url
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodebaseURIhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-baseURI.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-baseURI.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-baseURI.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+<!DOCTYPE html>
+<title>Node.baseURI</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ var element = document.createElement("div");
+ document.body.appendChild(element);
+ assert_equals(element.baseURI, document.URL);
+}, "For elements belonging to document, baseURI should be document url")
+
+test(function() {
+ var element = document.createElement("div");
+ assert_equals(element.baseURI, document.URL);
+}, "For elements unassigned to document, baseURI should be document url")
+
+test(function() {
+ var fragment = document.createDocumentFragment();
+ var element = document.createElement("div");
+ fragment.appendChild(element);
+ assert_equals(element.baseURI, document.URL)
+}, "For elements belonging to document fragments, baseURI should be document url")
+
+test(function() {
+ var fragment = document.createDocumentFragment();
+ var element = document.createElement("div");
+ fragment.appendChild(element);
+ document.body.appendChild(fragment);
+ assert_equals(element.baseURI, document.URL)
+}, "After inserting fragment into document, element baseURI should be document url")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodechildNodesexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-childNodes-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-childNodes-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-childNodes-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+
+PASS Caching of Node.childNodes
+PASS Node.childNodes on an Element.
+PASS Node.childNodes on a DocumentFragment.
+PASS Node.childNodes on a Document.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodechildNodeshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-childNodes.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-childNodes.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-childNodes.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,48 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Node.childNodes</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-childnodes">
+<link rel=author title="Tim Taubert" href="mailto:ttaubert@mozilla.com">
+<link rel=author title="Ms2ger" href="mailto:Ms2ger@gmail.com">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ var element = document.createElement("p");
+ assert_equals(element.childNodes, element.childNodes);
+}, "Caching of Node.childNodes");
+
+var check_parent_node = function(node) {
+ assert_array_equals(node.childNodes, []);
+
+ var children = node.childNodes;
+ var child = document.createElement("p");
+ node.appendChild(child);
+ assert_equals(node.childNodes, children);
+ assert_array_equals(children, [child]);
+ assert_equals(children.item(0), child);
+
+ var child2 = document.createComment("comment");
+ node.appendChild(child2);
+ assert_array_equals(children, [child, child2]);
+ assert_equals(children.item(0), child);
+ assert_equals(children.item(1), child2);
+
+ assert_false(2 in children);
+ assert_equals(children[2], undefined);
+ assert_equals(children.item(2), null);
+};
+
+test(function() {
+ check_parent_node(document.createElement("p"));
+}, "Node.childNodes on an Element.");
+
+test(function() {
+ check_parent_node(document.createDocumentFragment());
+}, "Node.childNodes on a DocumentFragment.");
+
+test(function() {
+ check_parent_node(new Document());
+}, "Node.childNodes on a Document.");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodecloneNodeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-cloneNode-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-cloneNode-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-cloneNode-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+
+FAIL Node.cloneNode Can't find variable: HTMLDataElement
+PASS createElement(a)
+PASS createElement(abbr)
+PASS createElement(acronym)
+PASS createElement(address)
+PASS createElement(applet)
+PASS createElement(area)
+PASS createElement(article)
+PASS createElement(aside)
+PASS createElement(audio)
+PASS createElement(b)
+PASS createElement(base)
+PASS createElement(bdi)
+PASS createElement(bdo)
+PASS createElement(bgsound)
+PASS createElement(big)
+PASS createElement(blockquote)
+PASS createElement(body)
+PASS createElement(br)
+PASS createElement(button)
+PASS createElement(canvas)
+PASS createElement(caption)
+PASS createElement(center)
+PASS createElement(cite)
+PASS createElement(code)
+PASS createElement(col)
+PASS createElement(colgroup)
+PASS createDocumentFragment
+PASS createTextNode
+PASS createComment
+PASS createElement with attributes
+PASS createElementNS HTML
+PASS createElementNS non-HTML
+FAIL createProcessingInstruction NotSupportedError: DOM Exception 9
+PASS implementation.createDocumentType
+PASS implementation.createDocument
+FAIL implementation.createHTMLDocument assert_equals: expected "" but got "title"
+PASS node with children
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodecloneNodehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-cloneNode.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-cloneNode.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-cloneNode.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,272 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Node.cloneNode</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-clonenode">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+function assert_equal_node(nodeA, nodeB) {
+ assert_equals(nodeB.nodeType, nodeA.nodeType, "nodeType");
+ assert_equals(nodeB.nodeName, nodeA.nodeName, "nodeName");
+
+ if (nodeA.nodeType === Node.ELEMENT_NODE) {
+ assert_equals(nodeB.prefix, nodeA.prefix);
+ assert_equals(nodeB.namespaceURI, nodeA.namespaceURI);
+ assert_equals(nodeB.localName, nodeA.localName);
+ assert_equals(nodeB.tagName, nodeA.tagName);
+ assert_not_equals(nodeB.attributes != nodeA.attributes);
+ assert_equals(nodeB.attributes.length, nodeA.attributes.length);
+ for (var i = 0, il = nodeA.attributes.length; i < il; ++i) {
+ assert_not_equals(nodeB.attributes[i], nodeA.attributes[i]);
+ assert_equals(nodeB.attributes[i].name, nodeA.attributes[i].name);
+ assert_equals(nodeB.attributes[i].prefix, nodeA.attributes[i].prefix);
+ assert_equals(nodeB.attributes[i].namespaceURI, nodeA.attributes[i].namespaceURI);
+ assert_equals(nodeB.attributes[i].value, nodeA.attributes[i].value);
+ }
+ }
+}
+
+function check_copy(orig, copy, type) {
+ assert_not_equals(orig, copy);
+ assert_equal_node(orig, copy);
+ assert_true(orig instanceof type, "Should be type");
+ assert_true(copy instanceof type, "Should be type");
+}
+
+function create_element_and_check(localName, type) {
+ test(function() {
+ var element = document.createElement(localName);
+ var copy = element.cloneNode();
+ check_copy(element, copy, type);
+ }, "createElement(" + localName + ")");
+}
+
+// test1: createElement
+test(function() {
+ create_element_and_check("a", HTMLAnchorElement);
+ create_element_and_check("abbr", HTMLElement);
+ create_element_and_check("acronym", HTMLElement);
+ create_element_and_check("address", HTMLElement);
+ create_element_and_check("applet", HTMLAppletElement);
+ create_element_and_check("area", HTMLAreaElement);
+ create_element_and_check("article", HTMLElement);
+ create_element_and_check("aside", HTMLElement);
+ create_element_and_check("audio", HTMLAudioElement);
+ create_element_and_check("b", HTMLElement);
+ create_element_and_check("base", HTMLBaseElement);
+ create_element_and_check("bdi", HTMLElement);
+ create_element_and_check("bdo", HTMLElement);
+ create_element_and_check("bgsound", HTMLElement);
+ create_element_and_check("big", HTMLElement);
+ create_element_and_check("blockquote",HTMLElement);
+ create_element_and_check("body", HTMLBodyElement);
+ create_element_and_check("br", HTMLBRElement);
+ create_element_and_check("button", HTMLButtonElement);
+ create_element_and_check("canvas", HTMLCanvasElement);
+ create_element_and_check("caption", HTMLTableCaptionElement);
+ create_element_and_check("center", HTMLElement);
+ create_element_and_check("cite", HTMLElement);
+ create_element_and_check("code", HTMLElement);
+ create_element_and_check("col", HTMLTableColElement);
+ create_element_and_check("colgroup", HTMLTableColElement);
+ create_element_and_check("data", HTMLDataElement);
+ create_element_and_check("datalist", HTMLDataListElement);
+ create_element_and_check("dialog", HTMLDialogElement);
+ create_element_and_check("dd", HTMLElement);
+ create_element_and_check("del", HTMLModElement);
+ create_element_and_check("details", HTMLElement);
+ create_element_and_check("dfn", HTMLElement);
+ create_element_and_check("dir", HTMLDirectoryElement);
+ create_element_and_check("div", HTMLDivElement);
+ create_element_and_check("dl", HTMLDListElement);
+ create_element_and_check("dt", HTMLElement);
+ create_element_and_check("embed", HTMLEmbedElement);
+ create_element_and_check("fieldset", HTMLFieldSetElement);
+ create_element_and_check("figcaption",HTMLElement);
+ create_element_and_check("figure", HTMLElement);
+ create_element_and_check("font", HTMLFontElement);
+ create_element_and_check("footer", HTMLElement);
+ create_element_and_check("form", HTMLFormElement);
+ create_element_and_check("frame", HTMLFrameElement);
+ create_element_and_check("frameset", HTMLFrameSetElement);
+ create_element_and_check("h1", HTMLHeadingElement);
+ create_element_and_check("h2", HTMLHeadingElement);
+ create_element_and_check("h3", HTMLHeadingElement);
+ create_element_and_check("h4", HTMLHeadingElement);
+ create_element_and_check("h5", HTMLHeadingElement);
+ create_element_and_check("h6", HTMLHeadingElement);
+ create_element_and_check("head", HTMLHeadElement);
+ create_element_and_check("header", HTMLElement);
+ create_element_and_check("hgroup", HTMLElement);
+ create_element_and_check("hr", HTMLHRElement);
+ create_element_and_check("html", HTMLHtmlElement);
+ create_element_and_check("i", HTMLElement);
+ create_element_and_check("iframe", HTMLIFrameElement);
+ create_element_and_check("img", HTMLImageElement);
+ create_element_and_check("input", HTMLInputElement);
+ create_element_and_check("ins", HTMLModElement);
+ create_element_and_check("isindex", HTMLElement);
+ create_element_and_check("kbd", HTMLElement);
+ create_element_and_check("label", HTMLLabelElement);
+ create_element_and_check("legend", HTMLLegendElement);
+ create_element_and_check("li", HTMLLIElement);
+ create_element_and_check("link", HTMLLinkElement);
+ create_element_and_check("main", HTMLElement);
+ create_element_and_check("map", HTMLMapElement);
+ create_element_and_check("mark", HTMLElement);
+ create_element_and_check("marquee", HTMLElement);
+ create_element_and_check("meta", HTMLMetaElement);
+ create_element_and_check("meter", HTMLMeterElement);
+ create_element_and_check("nav", HTMLElement);
+ create_element_and_check("nobr", HTMLElement);
+ create_element_and_check("noframes", HTMLElement);
+ create_element_and_check("noscript", HTMLElement);
+ create_element_and_check("object", HTMLObjectElement);
+ create_element_and_check("ol", HTMLOListElement);
+ create_element_and_check("optgroup", HTMLOptGroupElement);
+ create_element_and_check("option", HTMLOptionElement);
+ create_element_and_check("output", HTMLOutputElement);
+ create_element_and_check("p", HTMLParagraphElement);
+ create_element_and_check("param", HTMLParamElement);
+ create_element_and_check("pre", HTMLPreElement);
+ create_element_and_check("progress", HTMLProgressElement);
+ create_element_and_check("q", HTMLQuoteElement);
+ create_element_and_check("rp", HTMLElement);
+ create_element_and_check("rt", HTMLElement);
+ create_element_and_check("ruby", HTMLElement);
+ create_element_and_check("s", HTMLElement);
+ create_element_and_check("samp", HTMLElement);
+ create_element_and_check("script", HTMLScriptElement);
+ create_element_and_check("section", HTMLElement);
+ create_element_and_check("select", HTMLSelectElement);
+ create_element_and_check("small", HTMLElement);
+ create_element_and_check("source", HTMLSourceElement);
+ create_element_and_check("spacer", HTMLElement);
+ create_element_and_check("span", HTMLSpanElement);
+ create_element_and_check("strike", HTMLElement);
+ create_element_and_check("style", HTMLStyleElement);
+ create_element_and_check("sub", HTMLElement);
+ create_element_and_check("summary", HTMLElement);
+ create_element_and_check("sup", HTMLElement);
+ create_element_and_check("table", HTMLTableElement);
+ create_element_and_check("tbody", HTMLTableSectionElement);
+ create_element_and_check("td", HTMLTableDataCellElement);
+ create_element_and_check("template", HTMLTemplateElement);
+ create_element_and_check("textarea", HTMLTextAreaElement);
+ create_element_and_check("th", HTMLTableHeaderCellElement);
+ create_element_and_check("time", HTMLTimeElement);
+ create_element_and_check("title", HTMLTitleElement);
+ create_element_and_check("tr", HTMLTableRowElement);
+ create_element_and_check("tt", HTMLElement);
+ create_element_and_check("track", HTMLTrackElement);
+ create_element_and_check("u", HTMLElement);
+ create_element_and_check("ul", HTMLUListElement);
+ create_element_and_check("var", HTMLElement);
+ create_element_and_check("video", HTMLVideoElement);
+ create_element_and_check("unknown", HTMLUnknownElement);
+ create_element_and_check("wbr", HTMLElement);
+}, "");
+
+test(function() {
+ var fragment = document.createDocumentFragment();
+ var copy = fragment.cloneNode();
+ check_copy(fragment, copy, DocumentFragment);
+}, "createDocumentFragment");
+
+test(function() {
+ var text = document.createTextNode("hello world");
+ var copy = text.cloneNode();
+ check_copy(text, copy, Text);
+ assert_equals(text.data, copy.data);
+ assert_equals(text.wholeText, copy.wholeText);
+}, "createTextNode");
+
+test(function() {
+ var comment = document.createComment("a comment");
+ var copy = comment.cloneNode();
+ check_copy(comment, copy, Comment);
+ assert_equals(comment.data, copy.data);
+}, "createComment");
+
+test(function() {
+ var el = document.createElement("foo");
+ el.setAttribute("a", "b");
+ el.setAttribute("c", "d");
+ var c = el.cloneNode();
+ check_copy(el, c, Element);
+}, "createElement with attributes")
+
+test(function() {
+ var el = document.createElementNS("http://www.w3.org/1999/xhtml", "foo:div");
+ var c = el.cloneNode();
+ check_copy(el, c, HTMLDivElement);
+}, "createElementNS HTML")
+
+test(function() {
+ var el = document.createElementNS("http://www.example.com/", "foo:div");
+ var c = el.cloneNode();
+ check_copy(el, c, Element);
+}, "createElementNS non-HTML")
+
+test(function() {
+ var pi = document.createProcessingInstruction("target", "data");
+ var copy = pi.cloneNode();
+ check_copy(pi, copy, ProcessingInstruction);
+ assert_equals(pi.data, copy.data);
+ assert_equals(pi.target, pi.target);
+}, "createProcessingInstruction");
+
+test(function() {
+ var doctype = document.implementation.createDocumentType("html", "public", "system");
+ var copy = doctype.cloneNode();
+ check_copy(doctype, copy, DocumentType);
+ assert_equals(doctype.name, copy.name);
+ assert_equals(doctype.publicId, copy.publicId);
+ assert_equals(doctype.systemId, copy.systemId);
+}, "implementation.createDocumentType");
+
+test(function() {
+ var doc = document.implementation.createDocument(null, null);
+ var copy = doc.cloneNode();
+ check_copy(doc, copy, Document);
+ assert_equals(doc.contentType, copy.contentType);
+}, "implementation.createDocument");
+
+test(function() {
+ var html = document.implementation.createHTMLDocument("title");
+ var copy = html.cloneNode();
+ check_copy(html, copy, Document);
+ assert_equals(html.title, copy.title);
+}, "implementation.createHTMLDocument");
+
+test(function() {
+ var parent = document.createElement("div");
+ var child1 = document.createElement("div");
+ var child2 = document.createElement("div");
+ var grandChild = document.createElement("div");
+
+ child2.appendChild(grandChild);
+ parent.appendChild(child1);
+ parent.appendChild(child2);
+
+ var deep = true;
+ var copy = parent.cloneNode(deep);
+
+ check_copy(parent, copy, HTMLDivElement);
+ assert_equals(copy.childNodes.length, 2);
+
+ check_copy(child1, copy.childNodes[0], HTMLDivElement);
+ assert_equals(copy.childNodes[0].childNodes.length, 0);
+
+ check_copy(child2, copy.childNodes[1], HTMLDivElement);
+ assert_equals(copy.childNodes[1].childNodes.length, 1);
+ check_copy(grandChild, copy.childNodes[1].childNodes[0], HTMLDivElement);
+
+ deep = false;
+ copy = parent.cloneNode(deep);
+
+ check_copy(parent, copy, HTMLDivElement);
+ assert_equals(copy.childNodes.length, 0);
+}, "node with children");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodecompareDocumentPositionexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-compareDocumentPosition-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-compareDocumentPosition-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-compareDocumentPosition-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,1371 @@
</span><ins>+
+PASS paras[0].compareDocumentPosition(paras[0])
+PASS paras[0].compareDocumentPosition(paras[0].firstChild)
+PASS paras[0].compareDocumentPosition(paras[1].firstChild)
+PASS paras[0].compareDocumentPosition(foreignPara1)
+PASS paras[0].compareDocumentPosition(foreignPara1.firstChild)
+PASS paras[0].compareDocumentPosition(detachedPara1)
+PASS paras[0].compareDocumentPosition(detachedPara1.firstChild)
+PASS paras[0].compareDocumentPosition(document)
+PASS paras[0].compareDocumentPosition(detachedDiv)
+PASS paras[0].compareDocumentPosition(foreignDoc)
+PASS paras[0].compareDocumentPosition(foreignPara2)
+PASS paras[0].compareDocumentPosition(xmlDoc)
+PASS paras[0].compareDocumentPosition(xmlElement)
+PASS paras[0].compareDocumentPosition(detachedTextNode)
+PASS paras[0].compareDocumentPosition(foreignTextNode)
+PASS paras[0].compareDocumentPosition(processingInstruction)
+PASS paras[0].compareDocumentPosition(detachedProcessingInstruction)
+PASS paras[0].compareDocumentPosition(comment)
+PASS paras[0].compareDocumentPosition(detachedComment)
+PASS paras[0].compareDocumentPosition(docfrag)
+PASS paras[0].compareDocumentPosition(doctype)
+PASS paras[0].compareDocumentPosition(foreignDoctype)
+PASS paras[0].compareDocumentPosition(paras[1])
+PASS paras[0].compareDocumentPosition(detachedPara2)
+PASS paras[0].compareDocumentPosition(detachedPara2.firstChild)
+PASS paras[0].compareDocumentPosition(testDiv)
+PASS paras[0].compareDocumentPosition(detachedXmlElement)
+PASS paras[0].compareDocumentPosition(detachedForeignTextNode)
+PASS paras[0].compareDocumentPosition(xmlTextNode)
+PASS paras[0].compareDocumentPosition(detachedXmlTextNode)
+PASS paras[0].compareDocumentPosition(xmlComment)
+PASS paras[0].compareDocumentPosition(foreignComment)
+PASS paras[0].compareDocumentPosition(detachedForeignComment)
+PASS paras[0].compareDocumentPosition(detachedXmlComment)
+PASS paras[0].compareDocumentPosition(foreignDocfrag)
+PASS paras[0].compareDocumentPosition(xmlDocfrag)
+PASS paras[0].compareDocumentPosition(xmlDoctype)
+PASS paras[0].firstChild.compareDocumentPosition(paras[0])
+PASS paras[0].firstChild.compareDocumentPosition(paras[0].firstChild)
+PASS paras[0].firstChild.compareDocumentPosition(paras[1].firstChild)
+PASS paras[0].firstChild.compareDocumentPosition(foreignPara1)
+PASS paras[0].firstChild.compareDocumentPosition(foreignPara1.firstChild)
+PASS paras[0].firstChild.compareDocumentPosition(detachedPara1)
+PASS paras[0].firstChild.compareDocumentPosition(detachedPara1.firstChild)
+PASS paras[0].firstChild.compareDocumentPosition(document)
+PASS paras[0].firstChild.compareDocumentPosition(detachedDiv)
+PASS paras[0].firstChild.compareDocumentPosition(foreignDoc)
+PASS paras[0].firstChild.compareDocumentPosition(foreignPara2)
+PASS paras[0].firstChild.compareDocumentPosition(xmlDoc)
+PASS paras[0].firstChild.compareDocumentPosition(xmlElement)
+PASS paras[0].firstChild.compareDocumentPosition(detachedTextNode)
+PASS paras[0].firstChild.compareDocumentPosition(foreignTextNode)
+PASS paras[0].firstChild.compareDocumentPosition(processingInstruction)
+PASS paras[0].firstChild.compareDocumentPosition(detachedProcessingInstruction)
+PASS paras[0].firstChild.compareDocumentPosition(comment)
+PASS paras[0].firstChild.compareDocumentPosition(detachedComment)
+PASS paras[0].firstChild.compareDocumentPosition(docfrag)
+PASS paras[0].firstChild.compareDocumentPosition(doctype)
+PASS paras[0].firstChild.compareDocumentPosition(foreignDoctype)
+PASS paras[0].firstChild.compareDocumentPosition(paras[1])
+PASS paras[0].firstChild.compareDocumentPosition(detachedPara2)
+PASS paras[0].firstChild.compareDocumentPosition(detachedPara2.firstChild)
+PASS paras[0].firstChild.compareDocumentPosition(testDiv)
+PASS paras[0].firstChild.compareDocumentPosition(detachedXmlElement)
+PASS paras[0].firstChild.compareDocumentPosition(detachedForeignTextNode)
+PASS paras[0].firstChild.compareDocumentPosition(xmlTextNode)
+PASS paras[0].firstChild.compareDocumentPosition(detachedXmlTextNode)
+PASS paras[0].firstChild.compareDocumentPosition(xmlComment)
+PASS paras[0].firstChild.compareDocumentPosition(foreignComment)
+PASS paras[0].firstChild.compareDocumentPosition(detachedForeignComment)
+PASS paras[0].firstChild.compareDocumentPosition(detachedXmlComment)
+PASS paras[0].firstChild.compareDocumentPosition(foreignDocfrag)
+PASS paras[0].firstChild.compareDocumentPosition(xmlDocfrag)
+PASS paras[0].firstChild.compareDocumentPosition(xmlDoctype)
+PASS paras[1].firstChild.compareDocumentPosition(paras[0])
+PASS paras[1].firstChild.compareDocumentPosition(paras[0].firstChild)
+PASS paras[1].firstChild.compareDocumentPosition(paras[1].firstChild)
+PASS paras[1].firstChild.compareDocumentPosition(foreignPara1)
+PASS paras[1].firstChild.compareDocumentPosition(foreignPara1.firstChild)
+PASS paras[1].firstChild.compareDocumentPosition(detachedPara1)
+PASS paras[1].firstChild.compareDocumentPosition(detachedPara1.firstChild)
+PASS paras[1].firstChild.compareDocumentPosition(document)
+PASS paras[1].firstChild.compareDocumentPosition(detachedDiv)
+PASS paras[1].firstChild.compareDocumentPosition(foreignDoc)
+PASS paras[1].firstChild.compareDocumentPosition(foreignPara2)
+PASS paras[1].firstChild.compareDocumentPosition(xmlDoc)
+PASS paras[1].firstChild.compareDocumentPosition(xmlElement)
+PASS paras[1].firstChild.compareDocumentPosition(detachedTextNode)
+PASS paras[1].firstChild.compareDocumentPosition(foreignTextNode)
+PASS paras[1].firstChild.compareDocumentPosition(processingInstruction)
+PASS paras[1].firstChild.compareDocumentPosition(detachedProcessingInstruction)
+PASS paras[1].firstChild.compareDocumentPosition(comment)
+PASS paras[1].firstChild.compareDocumentPosition(detachedComment)
+PASS paras[1].firstChild.compareDocumentPosition(docfrag)
+PASS paras[1].firstChild.compareDocumentPosition(doctype)
+PASS paras[1].firstChild.compareDocumentPosition(foreignDoctype)
+PASS paras[1].firstChild.compareDocumentPosition(paras[1])
+PASS paras[1].firstChild.compareDocumentPosition(detachedPara2)
+PASS paras[1].firstChild.compareDocumentPosition(detachedPara2.firstChild)
+PASS paras[1].firstChild.compareDocumentPosition(testDiv)
+PASS paras[1].firstChild.compareDocumentPosition(detachedXmlElement)
+PASS paras[1].firstChild.compareDocumentPosition(detachedForeignTextNode)
+PASS paras[1].firstChild.compareDocumentPosition(xmlTextNode)
+PASS paras[1].firstChild.compareDocumentPosition(detachedXmlTextNode)
+PASS paras[1].firstChild.compareDocumentPosition(xmlComment)
+PASS paras[1].firstChild.compareDocumentPosition(foreignComment)
+PASS paras[1].firstChild.compareDocumentPosition(detachedForeignComment)
+PASS paras[1].firstChild.compareDocumentPosition(detachedXmlComment)
+PASS paras[1].firstChild.compareDocumentPosition(foreignDocfrag)
+PASS paras[1].firstChild.compareDocumentPosition(xmlDocfrag)
+PASS paras[1].firstChild.compareDocumentPosition(xmlDoctype)
+PASS foreignPara1.compareDocumentPosition(paras[0])
+PASS foreignPara1.compareDocumentPosition(paras[0].firstChild)
+PASS foreignPara1.compareDocumentPosition(paras[1].firstChild)
+PASS foreignPara1.compareDocumentPosition(foreignPara1)
+PASS foreignPara1.compareDocumentPosition(foreignPara1.firstChild)
+PASS foreignPara1.compareDocumentPosition(detachedPara1)
+PASS foreignPara1.compareDocumentPosition(detachedPara1.firstChild)
+PASS foreignPara1.compareDocumentPosition(document)
+PASS foreignPara1.compareDocumentPosition(detachedDiv)
+PASS foreignPara1.compareDocumentPosition(foreignDoc)
+PASS foreignPara1.compareDocumentPosition(foreignPara2)
+PASS foreignPara1.compareDocumentPosition(xmlDoc)
+PASS foreignPara1.compareDocumentPosition(xmlElement)
+PASS foreignPara1.compareDocumentPosition(detachedTextNode)
+PASS foreignPara1.compareDocumentPosition(foreignTextNode)
+PASS foreignPara1.compareDocumentPosition(processingInstruction)
+PASS foreignPara1.compareDocumentPosition(detachedProcessingInstruction)
+PASS foreignPara1.compareDocumentPosition(comment)
+PASS foreignPara1.compareDocumentPosition(detachedComment)
+PASS foreignPara1.compareDocumentPosition(docfrag)
+PASS foreignPara1.compareDocumentPosition(doctype)
+PASS foreignPara1.compareDocumentPosition(foreignDoctype)
+PASS foreignPara1.compareDocumentPosition(paras[1])
+PASS foreignPara1.compareDocumentPosition(detachedPara2)
+PASS foreignPara1.compareDocumentPosition(detachedPara2.firstChild)
+PASS foreignPara1.compareDocumentPosition(testDiv)
+PASS foreignPara1.compareDocumentPosition(detachedXmlElement)
+PASS foreignPara1.compareDocumentPosition(detachedForeignTextNode)
+PASS foreignPara1.compareDocumentPosition(xmlTextNode)
+PASS foreignPara1.compareDocumentPosition(detachedXmlTextNode)
+PASS foreignPara1.compareDocumentPosition(xmlComment)
+PASS foreignPara1.compareDocumentPosition(foreignComment)
+PASS foreignPara1.compareDocumentPosition(detachedForeignComment)
+PASS foreignPara1.compareDocumentPosition(detachedXmlComment)
+PASS foreignPara1.compareDocumentPosition(foreignDocfrag)
+PASS foreignPara1.compareDocumentPosition(xmlDocfrag)
+PASS foreignPara1.compareDocumentPosition(xmlDoctype)
+PASS foreignPara1.firstChild.compareDocumentPosition(paras[0])
+PASS foreignPara1.firstChild.compareDocumentPosition(paras[0].firstChild)
+PASS foreignPara1.firstChild.compareDocumentPosition(paras[1].firstChild)
+PASS foreignPara1.firstChild.compareDocumentPosition(foreignPara1)
+PASS foreignPara1.firstChild.compareDocumentPosition(foreignPara1.firstChild)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedPara1)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedPara1.firstChild)
+PASS foreignPara1.firstChild.compareDocumentPosition(document)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedDiv)
+PASS foreignPara1.firstChild.compareDocumentPosition(foreignDoc)
+PASS foreignPara1.firstChild.compareDocumentPosition(foreignPara2)
+PASS foreignPara1.firstChild.compareDocumentPosition(xmlDoc)
+PASS foreignPara1.firstChild.compareDocumentPosition(xmlElement)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedTextNode)
+PASS foreignPara1.firstChild.compareDocumentPosition(foreignTextNode)
+PASS foreignPara1.firstChild.compareDocumentPosition(processingInstruction)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedProcessingInstruction)
+PASS foreignPara1.firstChild.compareDocumentPosition(comment)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedComment)
+PASS foreignPara1.firstChild.compareDocumentPosition(docfrag)
+PASS foreignPara1.firstChild.compareDocumentPosition(doctype)
+PASS foreignPara1.firstChild.compareDocumentPosition(foreignDoctype)
+PASS foreignPara1.firstChild.compareDocumentPosition(paras[1])
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedPara2)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedPara2.firstChild)
+PASS foreignPara1.firstChild.compareDocumentPosition(testDiv)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedXmlElement)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedForeignTextNode)
+PASS foreignPara1.firstChild.compareDocumentPosition(xmlTextNode)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedXmlTextNode)
+PASS foreignPara1.firstChild.compareDocumentPosition(xmlComment)
+PASS foreignPara1.firstChild.compareDocumentPosition(foreignComment)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedForeignComment)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedXmlComment)
+PASS foreignPara1.firstChild.compareDocumentPosition(foreignDocfrag)
+PASS foreignPara1.firstChild.compareDocumentPosition(xmlDocfrag)
+PASS foreignPara1.firstChild.compareDocumentPosition(xmlDoctype)
+PASS detachedPara1.compareDocumentPosition(paras[0])
+PASS detachedPara1.compareDocumentPosition(paras[0].firstChild)
+PASS detachedPara1.compareDocumentPosition(paras[1].firstChild)
+PASS detachedPara1.compareDocumentPosition(foreignPara1)
+PASS detachedPara1.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedPara1.compareDocumentPosition(detachedPara1)
+PASS detachedPara1.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedPara1.compareDocumentPosition(document)
+PASS detachedPara1.compareDocumentPosition(detachedDiv)
+PASS detachedPara1.compareDocumentPosition(foreignDoc)
+PASS detachedPara1.compareDocumentPosition(foreignPara2)
+PASS detachedPara1.compareDocumentPosition(xmlDoc)
+PASS detachedPara1.compareDocumentPosition(xmlElement)
+PASS detachedPara1.compareDocumentPosition(detachedTextNode)
+PASS detachedPara1.compareDocumentPosition(foreignTextNode)
+PASS detachedPara1.compareDocumentPosition(processingInstruction)
+PASS detachedPara1.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedPara1.compareDocumentPosition(comment)
+PASS detachedPara1.compareDocumentPosition(detachedComment)
+PASS detachedPara1.compareDocumentPosition(docfrag)
+PASS detachedPara1.compareDocumentPosition(doctype)
+PASS detachedPara1.compareDocumentPosition(foreignDoctype)
+PASS detachedPara1.compareDocumentPosition(paras[1])
+PASS detachedPara1.compareDocumentPosition(detachedPara2)
+PASS detachedPara1.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedPara1.compareDocumentPosition(testDiv)
+PASS detachedPara1.compareDocumentPosition(detachedXmlElement)
+PASS detachedPara1.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedPara1.compareDocumentPosition(xmlTextNode)
+PASS detachedPara1.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedPara1.compareDocumentPosition(xmlComment)
+PASS detachedPara1.compareDocumentPosition(foreignComment)
+PASS detachedPara1.compareDocumentPosition(detachedForeignComment)
+PASS detachedPara1.compareDocumentPosition(detachedXmlComment)
+PASS detachedPara1.compareDocumentPosition(foreignDocfrag)
+PASS detachedPara1.compareDocumentPosition(xmlDocfrag)
+PASS detachedPara1.compareDocumentPosition(xmlDoctype)
+PASS detachedPara1.firstChild.compareDocumentPosition(paras[0])
+PASS detachedPara1.firstChild.compareDocumentPosition(paras[0].firstChild)
+PASS detachedPara1.firstChild.compareDocumentPosition(paras[1].firstChild)
+PASS detachedPara1.firstChild.compareDocumentPosition(foreignPara1)
+PASS detachedPara1.firstChild.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedPara1)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedPara1.firstChild.compareDocumentPosition(document)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedDiv)
+PASS detachedPara1.firstChild.compareDocumentPosition(foreignDoc)
+PASS detachedPara1.firstChild.compareDocumentPosition(foreignPara2)
+PASS detachedPara1.firstChild.compareDocumentPosition(xmlDoc)
+PASS detachedPara1.firstChild.compareDocumentPosition(xmlElement)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedTextNode)
+PASS detachedPara1.firstChild.compareDocumentPosition(foreignTextNode)
+PASS detachedPara1.firstChild.compareDocumentPosition(processingInstruction)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedPara1.firstChild.compareDocumentPosition(comment)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedComment)
+PASS detachedPara1.firstChild.compareDocumentPosition(docfrag)
+PASS detachedPara1.firstChild.compareDocumentPosition(doctype)
+PASS detachedPara1.firstChild.compareDocumentPosition(foreignDoctype)
+PASS detachedPara1.firstChild.compareDocumentPosition(paras[1])
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedPara2)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedPara1.firstChild.compareDocumentPosition(testDiv)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedXmlElement)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedPara1.firstChild.compareDocumentPosition(xmlTextNode)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedPara1.firstChild.compareDocumentPosition(xmlComment)
+PASS detachedPara1.firstChild.compareDocumentPosition(foreignComment)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedForeignComment)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedXmlComment)
+PASS detachedPara1.firstChild.compareDocumentPosition(foreignDocfrag)
+PASS detachedPara1.firstChild.compareDocumentPosition(xmlDocfrag)
+PASS detachedPara1.firstChild.compareDocumentPosition(xmlDoctype)
+PASS document.compareDocumentPosition(paras[0])
+PASS document.compareDocumentPosition(paras[0].firstChild)
+PASS document.compareDocumentPosition(paras[1].firstChild)
+PASS document.compareDocumentPosition(foreignPara1)
+PASS document.compareDocumentPosition(foreignPara1.firstChild)
+PASS document.compareDocumentPosition(detachedPara1)
+PASS document.compareDocumentPosition(detachedPara1.firstChild)
+PASS document.compareDocumentPosition(document)
+PASS document.compareDocumentPosition(detachedDiv)
+PASS document.compareDocumentPosition(foreignDoc)
+PASS document.compareDocumentPosition(foreignPara2)
+PASS document.compareDocumentPosition(xmlDoc)
+PASS document.compareDocumentPosition(xmlElement)
+PASS document.compareDocumentPosition(detachedTextNode)
+PASS document.compareDocumentPosition(foreignTextNode)
+PASS document.compareDocumentPosition(processingInstruction)
+PASS document.compareDocumentPosition(detachedProcessingInstruction)
+PASS document.compareDocumentPosition(comment)
+PASS document.compareDocumentPosition(detachedComment)
+PASS document.compareDocumentPosition(docfrag)
+PASS document.compareDocumentPosition(doctype)
+PASS document.compareDocumentPosition(foreignDoctype)
+PASS document.compareDocumentPosition(paras[1])
+PASS document.compareDocumentPosition(detachedPara2)
+PASS document.compareDocumentPosition(detachedPara2.firstChild)
+PASS document.compareDocumentPosition(testDiv)
+PASS document.compareDocumentPosition(detachedXmlElement)
+PASS document.compareDocumentPosition(detachedForeignTextNode)
+PASS document.compareDocumentPosition(xmlTextNode)
+PASS document.compareDocumentPosition(detachedXmlTextNode)
+PASS document.compareDocumentPosition(xmlComment)
+PASS document.compareDocumentPosition(foreignComment)
+PASS document.compareDocumentPosition(detachedForeignComment)
+PASS document.compareDocumentPosition(detachedXmlComment)
+PASS document.compareDocumentPosition(foreignDocfrag)
+PASS document.compareDocumentPosition(xmlDocfrag)
+PASS document.compareDocumentPosition(xmlDoctype)
+PASS detachedDiv.compareDocumentPosition(paras[0])
+PASS detachedDiv.compareDocumentPosition(paras[0].firstChild)
+PASS detachedDiv.compareDocumentPosition(paras[1].firstChild)
+PASS detachedDiv.compareDocumentPosition(foreignPara1)
+PASS detachedDiv.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedDiv.compareDocumentPosition(detachedPara1)
+PASS detachedDiv.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedDiv.compareDocumentPosition(document)
+PASS detachedDiv.compareDocumentPosition(detachedDiv)
+PASS detachedDiv.compareDocumentPosition(foreignDoc)
+PASS detachedDiv.compareDocumentPosition(foreignPara2)
+PASS detachedDiv.compareDocumentPosition(xmlDoc)
+PASS detachedDiv.compareDocumentPosition(xmlElement)
+PASS detachedDiv.compareDocumentPosition(detachedTextNode)
+PASS detachedDiv.compareDocumentPosition(foreignTextNode)
+PASS detachedDiv.compareDocumentPosition(processingInstruction)
+PASS detachedDiv.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedDiv.compareDocumentPosition(comment)
+PASS detachedDiv.compareDocumentPosition(detachedComment)
+PASS detachedDiv.compareDocumentPosition(docfrag)
+PASS detachedDiv.compareDocumentPosition(doctype)
+PASS detachedDiv.compareDocumentPosition(foreignDoctype)
+PASS detachedDiv.compareDocumentPosition(paras[1])
+PASS detachedDiv.compareDocumentPosition(detachedPara2)
+PASS detachedDiv.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedDiv.compareDocumentPosition(testDiv)
+PASS detachedDiv.compareDocumentPosition(detachedXmlElement)
+PASS detachedDiv.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedDiv.compareDocumentPosition(xmlTextNode)
+PASS detachedDiv.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedDiv.compareDocumentPosition(xmlComment)
+PASS detachedDiv.compareDocumentPosition(foreignComment)
+PASS detachedDiv.compareDocumentPosition(detachedForeignComment)
+PASS detachedDiv.compareDocumentPosition(detachedXmlComment)
+PASS detachedDiv.compareDocumentPosition(foreignDocfrag)
+PASS detachedDiv.compareDocumentPosition(xmlDocfrag)
+PASS detachedDiv.compareDocumentPosition(xmlDoctype)
+PASS foreignDoc.compareDocumentPosition(paras[0])
+PASS foreignDoc.compareDocumentPosition(paras[0].firstChild)
+PASS foreignDoc.compareDocumentPosition(paras[1].firstChild)
+PASS foreignDoc.compareDocumentPosition(foreignPara1)
+PASS foreignDoc.compareDocumentPosition(foreignPara1.firstChild)
+PASS foreignDoc.compareDocumentPosition(detachedPara1)
+PASS foreignDoc.compareDocumentPosition(detachedPara1.firstChild)
+PASS foreignDoc.compareDocumentPosition(document)
+PASS foreignDoc.compareDocumentPosition(detachedDiv)
+PASS foreignDoc.compareDocumentPosition(foreignDoc)
+PASS foreignDoc.compareDocumentPosition(foreignPara2)
+PASS foreignDoc.compareDocumentPosition(xmlDoc)
+PASS foreignDoc.compareDocumentPosition(xmlElement)
+PASS foreignDoc.compareDocumentPosition(detachedTextNode)
+PASS foreignDoc.compareDocumentPosition(foreignTextNode)
+PASS foreignDoc.compareDocumentPosition(processingInstruction)
+PASS foreignDoc.compareDocumentPosition(detachedProcessingInstruction)
+PASS foreignDoc.compareDocumentPosition(comment)
+PASS foreignDoc.compareDocumentPosition(detachedComment)
+PASS foreignDoc.compareDocumentPosition(docfrag)
+PASS foreignDoc.compareDocumentPosition(doctype)
+PASS foreignDoc.compareDocumentPosition(foreignDoctype)
+PASS foreignDoc.compareDocumentPosition(paras[1])
+PASS foreignDoc.compareDocumentPosition(detachedPara2)
+PASS foreignDoc.compareDocumentPosition(detachedPara2.firstChild)
+PASS foreignDoc.compareDocumentPosition(testDiv)
+PASS foreignDoc.compareDocumentPosition(detachedXmlElement)
+PASS foreignDoc.compareDocumentPosition(detachedForeignTextNode)
+PASS foreignDoc.compareDocumentPosition(xmlTextNode)
+PASS foreignDoc.compareDocumentPosition(detachedXmlTextNode)
+PASS foreignDoc.compareDocumentPosition(xmlComment)
+PASS foreignDoc.compareDocumentPosition(foreignComment)
+PASS foreignDoc.compareDocumentPosition(detachedForeignComment)
+PASS foreignDoc.compareDocumentPosition(detachedXmlComment)
+PASS foreignDoc.compareDocumentPosition(foreignDocfrag)
+PASS foreignDoc.compareDocumentPosition(xmlDocfrag)
+PASS foreignDoc.compareDocumentPosition(xmlDoctype)
+PASS foreignPara2.compareDocumentPosition(paras[0])
+PASS foreignPara2.compareDocumentPosition(paras[0].firstChild)
+PASS foreignPara2.compareDocumentPosition(paras[1].firstChild)
+PASS foreignPara2.compareDocumentPosition(foreignPara1)
+PASS foreignPara2.compareDocumentPosition(foreignPara1.firstChild)
+PASS foreignPara2.compareDocumentPosition(detachedPara1)
+PASS foreignPara2.compareDocumentPosition(detachedPara1.firstChild)
+PASS foreignPara2.compareDocumentPosition(document)
+PASS foreignPara2.compareDocumentPosition(detachedDiv)
+PASS foreignPara2.compareDocumentPosition(foreignDoc)
+PASS foreignPara2.compareDocumentPosition(foreignPara2)
+PASS foreignPara2.compareDocumentPosition(xmlDoc)
+PASS foreignPara2.compareDocumentPosition(xmlElement)
+PASS foreignPara2.compareDocumentPosition(detachedTextNode)
+PASS foreignPara2.compareDocumentPosition(foreignTextNode)
+PASS foreignPara2.compareDocumentPosition(processingInstruction)
+PASS foreignPara2.compareDocumentPosition(detachedProcessingInstruction)
+PASS foreignPara2.compareDocumentPosition(comment)
+PASS foreignPara2.compareDocumentPosition(detachedComment)
+PASS foreignPara2.compareDocumentPosition(docfrag)
+PASS foreignPara2.compareDocumentPosition(doctype)
+PASS foreignPara2.compareDocumentPosition(foreignDoctype)
+PASS foreignPara2.compareDocumentPosition(paras[1])
+PASS foreignPara2.compareDocumentPosition(detachedPara2)
+PASS foreignPara2.compareDocumentPosition(detachedPara2.firstChild)
+PASS foreignPara2.compareDocumentPosition(testDiv)
+PASS foreignPara2.compareDocumentPosition(detachedXmlElement)
+PASS foreignPara2.compareDocumentPosition(detachedForeignTextNode)
+PASS foreignPara2.compareDocumentPosition(xmlTextNode)
+PASS foreignPara2.compareDocumentPosition(detachedXmlTextNode)
+PASS foreignPara2.compareDocumentPosition(xmlComment)
+PASS foreignPara2.compareDocumentPosition(foreignComment)
+PASS foreignPara2.compareDocumentPosition(detachedForeignComment)
+PASS foreignPara2.compareDocumentPosition(detachedXmlComment)
+PASS foreignPara2.compareDocumentPosition(foreignDocfrag)
+PASS foreignPara2.compareDocumentPosition(xmlDocfrag)
+PASS foreignPara2.compareDocumentPosition(xmlDoctype)
+PASS xmlDoc.compareDocumentPosition(paras[0])
+PASS xmlDoc.compareDocumentPosition(paras[0].firstChild)
+PASS xmlDoc.compareDocumentPosition(paras[1].firstChild)
+PASS xmlDoc.compareDocumentPosition(foreignPara1)
+PASS xmlDoc.compareDocumentPosition(foreignPara1.firstChild)
+PASS xmlDoc.compareDocumentPosition(detachedPara1)
+PASS xmlDoc.compareDocumentPosition(detachedPara1.firstChild)
+PASS xmlDoc.compareDocumentPosition(document)
+PASS xmlDoc.compareDocumentPosition(detachedDiv)
+PASS xmlDoc.compareDocumentPosition(foreignDoc)
+PASS xmlDoc.compareDocumentPosition(foreignPara2)
+PASS xmlDoc.compareDocumentPosition(xmlDoc)
+PASS xmlDoc.compareDocumentPosition(xmlElement)
+PASS xmlDoc.compareDocumentPosition(detachedTextNode)
+PASS xmlDoc.compareDocumentPosition(foreignTextNode)
+PASS xmlDoc.compareDocumentPosition(processingInstruction)
+PASS xmlDoc.compareDocumentPosition(detachedProcessingInstruction)
+PASS xmlDoc.compareDocumentPosition(comment)
+PASS xmlDoc.compareDocumentPosition(detachedComment)
+PASS xmlDoc.compareDocumentPosition(docfrag)
+PASS xmlDoc.compareDocumentPosition(doctype)
+PASS xmlDoc.compareDocumentPosition(foreignDoctype)
+PASS xmlDoc.compareDocumentPosition(paras[1])
+PASS xmlDoc.compareDocumentPosition(detachedPara2)
+PASS xmlDoc.compareDocumentPosition(detachedPara2.firstChild)
+PASS xmlDoc.compareDocumentPosition(testDiv)
+PASS xmlDoc.compareDocumentPosition(detachedXmlElement)
+PASS xmlDoc.compareDocumentPosition(detachedForeignTextNode)
+PASS xmlDoc.compareDocumentPosition(xmlTextNode)
+PASS xmlDoc.compareDocumentPosition(detachedXmlTextNode)
+PASS xmlDoc.compareDocumentPosition(xmlComment)
+PASS xmlDoc.compareDocumentPosition(foreignComment)
+PASS xmlDoc.compareDocumentPosition(detachedForeignComment)
+PASS xmlDoc.compareDocumentPosition(detachedXmlComment)
+PASS xmlDoc.compareDocumentPosition(foreignDocfrag)
+PASS xmlDoc.compareDocumentPosition(xmlDocfrag)
+PASS xmlDoc.compareDocumentPosition(xmlDoctype)
+PASS xmlElement.compareDocumentPosition(paras[0])
+PASS xmlElement.compareDocumentPosition(paras[0].firstChild)
+PASS xmlElement.compareDocumentPosition(paras[1].firstChild)
+PASS xmlElement.compareDocumentPosition(foreignPara1)
+PASS xmlElement.compareDocumentPosition(foreignPara1.firstChild)
+PASS xmlElement.compareDocumentPosition(detachedPara1)
+PASS xmlElement.compareDocumentPosition(detachedPara1.firstChild)
+PASS xmlElement.compareDocumentPosition(document)
+PASS xmlElement.compareDocumentPosition(detachedDiv)
+PASS xmlElement.compareDocumentPosition(foreignDoc)
+PASS xmlElement.compareDocumentPosition(foreignPara2)
+PASS xmlElement.compareDocumentPosition(xmlDoc)
+PASS xmlElement.compareDocumentPosition(xmlElement)
+PASS xmlElement.compareDocumentPosition(detachedTextNode)
+PASS xmlElement.compareDocumentPosition(foreignTextNode)
+PASS xmlElement.compareDocumentPosition(processingInstruction)
+PASS xmlElement.compareDocumentPosition(detachedProcessingInstruction)
+PASS xmlElement.compareDocumentPosition(comment)
+PASS xmlElement.compareDocumentPosition(detachedComment)
+PASS xmlElement.compareDocumentPosition(docfrag)
+PASS xmlElement.compareDocumentPosition(doctype)
+PASS xmlElement.compareDocumentPosition(foreignDoctype)
+PASS xmlElement.compareDocumentPosition(paras[1])
+PASS xmlElement.compareDocumentPosition(detachedPara2)
+PASS xmlElement.compareDocumentPosition(detachedPara2.firstChild)
+PASS xmlElement.compareDocumentPosition(testDiv)
+PASS xmlElement.compareDocumentPosition(detachedXmlElement)
+PASS xmlElement.compareDocumentPosition(detachedForeignTextNode)
+PASS xmlElement.compareDocumentPosition(xmlTextNode)
+PASS xmlElement.compareDocumentPosition(detachedXmlTextNode)
+PASS xmlElement.compareDocumentPosition(xmlComment)
+PASS xmlElement.compareDocumentPosition(foreignComment)
+PASS xmlElement.compareDocumentPosition(detachedForeignComment)
+PASS xmlElement.compareDocumentPosition(detachedXmlComment)
+PASS xmlElement.compareDocumentPosition(foreignDocfrag)
+PASS xmlElement.compareDocumentPosition(xmlDocfrag)
+PASS xmlElement.compareDocumentPosition(xmlDoctype)
+PASS detachedTextNode.compareDocumentPosition(paras[0])
+PASS detachedTextNode.compareDocumentPosition(paras[0].firstChild)
+PASS detachedTextNode.compareDocumentPosition(paras[1].firstChild)
+PASS detachedTextNode.compareDocumentPosition(foreignPara1)
+PASS detachedTextNode.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedTextNode.compareDocumentPosition(detachedPara1)
+PASS detachedTextNode.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedTextNode.compareDocumentPosition(document)
+PASS detachedTextNode.compareDocumentPosition(detachedDiv)
+PASS detachedTextNode.compareDocumentPosition(foreignDoc)
+PASS detachedTextNode.compareDocumentPosition(foreignPara2)
+PASS detachedTextNode.compareDocumentPosition(xmlDoc)
+PASS detachedTextNode.compareDocumentPosition(xmlElement)
+PASS detachedTextNode.compareDocumentPosition(detachedTextNode)
+PASS detachedTextNode.compareDocumentPosition(foreignTextNode)
+PASS detachedTextNode.compareDocumentPosition(processingInstruction)
+PASS detachedTextNode.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedTextNode.compareDocumentPosition(comment)
+PASS detachedTextNode.compareDocumentPosition(detachedComment)
+PASS detachedTextNode.compareDocumentPosition(docfrag)
+PASS detachedTextNode.compareDocumentPosition(doctype)
+PASS detachedTextNode.compareDocumentPosition(foreignDoctype)
+PASS detachedTextNode.compareDocumentPosition(paras[1])
+PASS detachedTextNode.compareDocumentPosition(detachedPara2)
+PASS detachedTextNode.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedTextNode.compareDocumentPosition(testDiv)
+PASS detachedTextNode.compareDocumentPosition(detachedXmlElement)
+PASS detachedTextNode.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedTextNode.compareDocumentPosition(xmlTextNode)
+PASS detachedTextNode.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedTextNode.compareDocumentPosition(xmlComment)
+PASS detachedTextNode.compareDocumentPosition(foreignComment)
+PASS detachedTextNode.compareDocumentPosition(detachedForeignComment)
+PASS detachedTextNode.compareDocumentPosition(detachedXmlComment)
+PASS detachedTextNode.compareDocumentPosition(foreignDocfrag)
+PASS detachedTextNode.compareDocumentPosition(xmlDocfrag)
+PASS detachedTextNode.compareDocumentPosition(xmlDoctype)
+PASS foreignTextNode.compareDocumentPosition(paras[0])
+PASS foreignTextNode.compareDocumentPosition(paras[0].firstChild)
+PASS foreignTextNode.compareDocumentPosition(paras[1].firstChild)
+PASS foreignTextNode.compareDocumentPosition(foreignPara1)
+PASS foreignTextNode.compareDocumentPosition(foreignPara1.firstChild)
+PASS foreignTextNode.compareDocumentPosition(detachedPara1)
+PASS foreignTextNode.compareDocumentPosition(detachedPara1.firstChild)
+PASS foreignTextNode.compareDocumentPosition(document)
+PASS foreignTextNode.compareDocumentPosition(detachedDiv)
+PASS foreignTextNode.compareDocumentPosition(foreignDoc)
+PASS foreignTextNode.compareDocumentPosition(foreignPara2)
+PASS foreignTextNode.compareDocumentPosition(xmlDoc)
+PASS foreignTextNode.compareDocumentPosition(xmlElement)
+PASS foreignTextNode.compareDocumentPosition(detachedTextNode)
+PASS foreignTextNode.compareDocumentPosition(foreignTextNode)
+PASS foreignTextNode.compareDocumentPosition(processingInstruction)
+PASS foreignTextNode.compareDocumentPosition(detachedProcessingInstruction)
+PASS foreignTextNode.compareDocumentPosition(comment)
+PASS foreignTextNode.compareDocumentPosition(detachedComment)
+PASS foreignTextNode.compareDocumentPosition(docfrag)
+PASS foreignTextNode.compareDocumentPosition(doctype)
+PASS foreignTextNode.compareDocumentPosition(foreignDoctype)
+PASS foreignTextNode.compareDocumentPosition(paras[1])
+PASS foreignTextNode.compareDocumentPosition(detachedPara2)
+PASS foreignTextNode.compareDocumentPosition(detachedPara2.firstChild)
+PASS foreignTextNode.compareDocumentPosition(testDiv)
+PASS foreignTextNode.compareDocumentPosition(detachedXmlElement)
+PASS foreignTextNode.compareDocumentPosition(detachedForeignTextNode)
+PASS foreignTextNode.compareDocumentPosition(xmlTextNode)
+PASS foreignTextNode.compareDocumentPosition(detachedXmlTextNode)
+PASS foreignTextNode.compareDocumentPosition(xmlComment)
+PASS foreignTextNode.compareDocumentPosition(foreignComment)
+PASS foreignTextNode.compareDocumentPosition(detachedForeignComment)
+PASS foreignTextNode.compareDocumentPosition(detachedXmlComment)
+PASS foreignTextNode.compareDocumentPosition(foreignDocfrag)
+PASS foreignTextNode.compareDocumentPosition(xmlDocfrag)
+PASS foreignTextNode.compareDocumentPosition(xmlDoctype)
+PASS processingInstruction.compareDocumentPosition(paras[0])
+PASS processingInstruction.compareDocumentPosition(paras[0].firstChild)
+PASS processingInstruction.compareDocumentPosition(paras[1].firstChild)
+PASS processingInstruction.compareDocumentPosition(foreignPara1)
+PASS processingInstruction.compareDocumentPosition(foreignPara1.firstChild)
+PASS processingInstruction.compareDocumentPosition(detachedPara1)
+PASS processingInstruction.compareDocumentPosition(detachedPara1.firstChild)
+PASS processingInstruction.compareDocumentPosition(document)
+PASS processingInstruction.compareDocumentPosition(detachedDiv)
+PASS processingInstruction.compareDocumentPosition(foreignDoc)
+PASS processingInstruction.compareDocumentPosition(foreignPara2)
+PASS processingInstruction.compareDocumentPosition(xmlDoc)
+PASS processingInstruction.compareDocumentPosition(xmlElement)
+PASS processingInstruction.compareDocumentPosition(detachedTextNode)
+PASS processingInstruction.compareDocumentPosition(foreignTextNode)
+PASS processingInstruction.compareDocumentPosition(processingInstruction)
+PASS processingInstruction.compareDocumentPosition(detachedProcessingInstruction)
+PASS processingInstruction.compareDocumentPosition(comment)
+PASS processingInstruction.compareDocumentPosition(detachedComment)
+PASS processingInstruction.compareDocumentPosition(docfrag)
+PASS processingInstruction.compareDocumentPosition(doctype)
+PASS processingInstruction.compareDocumentPosition(foreignDoctype)
+PASS processingInstruction.compareDocumentPosition(paras[1])
+PASS processingInstruction.compareDocumentPosition(detachedPara2)
+PASS processingInstruction.compareDocumentPosition(detachedPara2.firstChild)
+PASS processingInstruction.compareDocumentPosition(testDiv)
+PASS processingInstruction.compareDocumentPosition(detachedXmlElement)
+PASS processingInstruction.compareDocumentPosition(detachedForeignTextNode)
+PASS processingInstruction.compareDocumentPosition(xmlTextNode)
+PASS processingInstruction.compareDocumentPosition(detachedXmlTextNode)
+PASS processingInstruction.compareDocumentPosition(xmlComment)
+PASS processingInstruction.compareDocumentPosition(foreignComment)
+PASS processingInstruction.compareDocumentPosition(detachedForeignComment)
+PASS processingInstruction.compareDocumentPosition(detachedXmlComment)
+PASS processingInstruction.compareDocumentPosition(foreignDocfrag)
+PASS processingInstruction.compareDocumentPosition(xmlDocfrag)
+PASS processingInstruction.compareDocumentPosition(xmlDoctype)
+PASS detachedProcessingInstruction.compareDocumentPosition(paras[0])
+PASS detachedProcessingInstruction.compareDocumentPosition(paras[0].firstChild)
+PASS detachedProcessingInstruction.compareDocumentPosition(paras[1].firstChild)
+PASS detachedProcessingInstruction.compareDocumentPosition(foreignPara1)
+PASS detachedProcessingInstruction.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedPara1)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedProcessingInstruction.compareDocumentPosition(document)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedDiv)
+PASS detachedProcessingInstruction.compareDocumentPosition(foreignDoc)
+PASS detachedProcessingInstruction.compareDocumentPosition(foreignPara2)
+PASS detachedProcessingInstruction.compareDocumentPosition(xmlDoc)
+PASS detachedProcessingInstruction.compareDocumentPosition(xmlElement)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedTextNode)
+PASS detachedProcessingInstruction.compareDocumentPosition(foreignTextNode)
+PASS detachedProcessingInstruction.compareDocumentPosition(processingInstruction)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedProcessingInstruction.compareDocumentPosition(comment)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedComment)
+PASS detachedProcessingInstruction.compareDocumentPosition(docfrag)
+PASS detachedProcessingInstruction.compareDocumentPosition(doctype)
+PASS detachedProcessingInstruction.compareDocumentPosition(foreignDoctype)
+PASS detachedProcessingInstruction.compareDocumentPosition(paras[1])
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedPara2)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedProcessingInstruction.compareDocumentPosition(testDiv)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedXmlElement)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedProcessingInstruction.compareDocumentPosition(xmlTextNode)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedProcessingInstruction.compareDocumentPosition(xmlComment)
+PASS detachedProcessingInstruction.compareDocumentPosition(foreignComment)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedForeignComment)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedXmlComment)
+PASS detachedProcessingInstruction.compareDocumentPosition(foreignDocfrag)
+PASS detachedProcessingInstruction.compareDocumentPosition(xmlDocfrag)
+PASS detachedProcessingInstruction.compareDocumentPosition(xmlDoctype)
+PASS comment.compareDocumentPosition(paras[0])
+PASS comment.compareDocumentPosition(paras[0].firstChild)
+PASS comment.compareDocumentPosition(paras[1].firstChild)
+PASS comment.compareDocumentPosition(foreignPara1)
+PASS comment.compareDocumentPosition(foreignPara1.firstChild)
+PASS comment.compareDocumentPosition(detachedPara1)
+PASS comment.compareDocumentPosition(detachedPara1.firstChild)
+PASS comment.compareDocumentPosition(document)
+PASS comment.compareDocumentPosition(detachedDiv)
+PASS comment.compareDocumentPosition(foreignDoc)
+PASS comment.compareDocumentPosition(foreignPara2)
+PASS comment.compareDocumentPosition(xmlDoc)
+PASS comment.compareDocumentPosition(xmlElement)
+PASS comment.compareDocumentPosition(detachedTextNode)
+PASS comment.compareDocumentPosition(foreignTextNode)
+PASS comment.compareDocumentPosition(processingInstruction)
+PASS comment.compareDocumentPosition(detachedProcessingInstruction)
+PASS comment.compareDocumentPosition(comment)
+PASS comment.compareDocumentPosition(detachedComment)
+PASS comment.compareDocumentPosition(docfrag)
+PASS comment.compareDocumentPosition(doctype)
+PASS comment.compareDocumentPosition(foreignDoctype)
+PASS comment.compareDocumentPosition(paras[1])
+PASS comment.compareDocumentPosition(detachedPara2)
+PASS comment.compareDocumentPosition(detachedPara2.firstChild)
+PASS comment.compareDocumentPosition(testDiv)
+PASS comment.compareDocumentPosition(detachedXmlElement)
+PASS comment.compareDocumentPosition(detachedForeignTextNode)
+PASS comment.compareDocumentPosition(xmlTextNode)
+PASS comment.compareDocumentPosition(detachedXmlTextNode)
+PASS comment.compareDocumentPosition(xmlComment)
+PASS comment.compareDocumentPosition(foreignComment)
+PASS comment.compareDocumentPosition(detachedForeignComment)
+PASS comment.compareDocumentPosition(detachedXmlComment)
+PASS comment.compareDocumentPosition(foreignDocfrag)
+PASS comment.compareDocumentPosition(xmlDocfrag)
+PASS comment.compareDocumentPosition(xmlDoctype)
+PASS detachedComment.compareDocumentPosition(paras[0])
+PASS detachedComment.compareDocumentPosition(paras[0].firstChild)
+PASS detachedComment.compareDocumentPosition(paras[1].firstChild)
+PASS detachedComment.compareDocumentPosition(foreignPara1)
+PASS detachedComment.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedComment.compareDocumentPosition(detachedPara1)
+PASS detachedComment.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedComment.compareDocumentPosition(document)
+PASS detachedComment.compareDocumentPosition(detachedDiv)
+PASS detachedComment.compareDocumentPosition(foreignDoc)
+PASS detachedComment.compareDocumentPosition(foreignPara2)
+PASS detachedComment.compareDocumentPosition(xmlDoc)
+PASS detachedComment.compareDocumentPosition(xmlElement)
+PASS detachedComment.compareDocumentPosition(detachedTextNode)
+PASS detachedComment.compareDocumentPosition(foreignTextNode)
+PASS detachedComment.compareDocumentPosition(processingInstruction)
+PASS detachedComment.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedComment.compareDocumentPosition(comment)
+PASS detachedComment.compareDocumentPosition(detachedComment)
+PASS detachedComment.compareDocumentPosition(docfrag)
+PASS detachedComment.compareDocumentPosition(doctype)
+PASS detachedComment.compareDocumentPosition(foreignDoctype)
+PASS detachedComment.compareDocumentPosition(paras[1])
+PASS detachedComment.compareDocumentPosition(detachedPara2)
+PASS detachedComment.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedComment.compareDocumentPosition(testDiv)
+PASS detachedComment.compareDocumentPosition(detachedXmlElement)
+PASS detachedComment.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedComment.compareDocumentPosition(xmlTextNode)
+PASS detachedComment.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedComment.compareDocumentPosition(xmlComment)
+PASS detachedComment.compareDocumentPosition(foreignComment)
+PASS detachedComment.compareDocumentPosition(detachedForeignComment)
+PASS detachedComment.compareDocumentPosition(detachedXmlComment)
+PASS detachedComment.compareDocumentPosition(foreignDocfrag)
+PASS detachedComment.compareDocumentPosition(xmlDocfrag)
+PASS detachedComment.compareDocumentPosition(xmlDoctype)
+PASS docfrag.compareDocumentPosition(paras[0])
+PASS docfrag.compareDocumentPosition(paras[0].firstChild)
+PASS docfrag.compareDocumentPosition(paras[1].firstChild)
+PASS docfrag.compareDocumentPosition(foreignPara1)
+PASS docfrag.compareDocumentPosition(foreignPara1.firstChild)
+PASS docfrag.compareDocumentPosition(detachedPara1)
+PASS docfrag.compareDocumentPosition(detachedPara1.firstChild)
+PASS docfrag.compareDocumentPosition(document)
+PASS docfrag.compareDocumentPosition(detachedDiv)
+PASS docfrag.compareDocumentPosition(foreignDoc)
+PASS docfrag.compareDocumentPosition(foreignPara2)
+PASS docfrag.compareDocumentPosition(xmlDoc)
+PASS docfrag.compareDocumentPosition(xmlElement)
+PASS docfrag.compareDocumentPosition(detachedTextNode)
+PASS docfrag.compareDocumentPosition(foreignTextNode)
+PASS docfrag.compareDocumentPosition(processingInstruction)
+PASS docfrag.compareDocumentPosition(detachedProcessingInstruction)
+PASS docfrag.compareDocumentPosition(comment)
+PASS docfrag.compareDocumentPosition(detachedComment)
+PASS docfrag.compareDocumentPosition(docfrag)
+PASS docfrag.compareDocumentPosition(doctype)
+PASS docfrag.compareDocumentPosition(foreignDoctype)
+PASS docfrag.compareDocumentPosition(paras[1])
+PASS docfrag.compareDocumentPosition(detachedPara2)
+PASS docfrag.compareDocumentPosition(detachedPara2.firstChild)
+PASS docfrag.compareDocumentPosition(testDiv)
+PASS docfrag.compareDocumentPosition(detachedXmlElement)
+PASS docfrag.compareDocumentPosition(detachedForeignTextNode)
+PASS docfrag.compareDocumentPosition(xmlTextNode)
+PASS docfrag.compareDocumentPosition(detachedXmlTextNode)
+PASS docfrag.compareDocumentPosition(xmlComment)
+PASS docfrag.compareDocumentPosition(foreignComment)
+PASS docfrag.compareDocumentPosition(detachedForeignComment)
+PASS docfrag.compareDocumentPosition(detachedXmlComment)
+PASS docfrag.compareDocumentPosition(foreignDocfrag)
+PASS docfrag.compareDocumentPosition(xmlDocfrag)
+PASS docfrag.compareDocumentPosition(xmlDoctype)
+PASS doctype.compareDocumentPosition(paras[0])
+PASS doctype.compareDocumentPosition(paras[0].firstChild)
+PASS doctype.compareDocumentPosition(paras[1].firstChild)
+PASS doctype.compareDocumentPosition(foreignPara1)
+PASS doctype.compareDocumentPosition(foreignPara1.firstChild)
+PASS doctype.compareDocumentPosition(detachedPara1)
+PASS doctype.compareDocumentPosition(detachedPara1.firstChild)
+PASS doctype.compareDocumentPosition(document)
+PASS doctype.compareDocumentPosition(detachedDiv)
+PASS doctype.compareDocumentPosition(foreignDoc)
+PASS doctype.compareDocumentPosition(foreignPara2)
+PASS doctype.compareDocumentPosition(xmlDoc)
+PASS doctype.compareDocumentPosition(xmlElement)
+PASS doctype.compareDocumentPosition(detachedTextNode)
+PASS doctype.compareDocumentPosition(foreignTextNode)
+PASS doctype.compareDocumentPosition(processingInstruction)
+PASS doctype.compareDocumentPosition(detachedProcessingInstruction)
+PASS doctype.compareDocumentPosition(comment)
+PASS doctype.compareDocumentPosition(detachedComment)
+PASS doctype.compareDocumentPosition(docfrag)
+PASS doctype.compareDocumentPosition(doctype)
+PASS doctype.compareDocumentPosition(foreignDoctype)
+PASS doctype.compareDocumentPosition(paras[1])
+PASS doctype.compareDocumentPosition(detachedPara2)
+PASS doctype.compareDocumentPosition(detachedPara2.firstChild)
+PASS doctype.compareDocumentPosition(testDiv)
+PASS doctype.compareDocumentPosition(detachedXmlElement)
+PASS doctype.compareDocumentPosition(detachedForeignTextNode)
+PASS doctype.compareDocumentPosition(xmlTextNode)
+PASS doctype.compareDocumentPosition(detachedXmlTextNode)
+PASS doctype.compareDocumentPosition(xmlComment)
+PASS doctype.compareDocumentPosition(foreignComment)
+PASS doctype.compareDocumentPosition(detachedForeignComment)
+PASS doctype.compareDocumentPosition(detachedXmlComment)
+PASS doctype.compareDocumentPosition(foreignDocfrag)
+PASS doctype.compareDocumentPosition(xmlDocfrag)
+PASS doctype.compareDocumentPosition(xmlDoctype)
+PASS foreignDoctype.compareDocumentPosition(paras[0])
+PASS foreignDoctype.compareDocumentPosition(paras[0].firstChild)
+PASS foreignDoctype.compareDocumentPosition(paras[1].firstChild)
+PASS foreignDoctype.compareDocumentPosition(foreignPara1)
+PASS foreignDoctype.compareDocumentPosition(foreignPara1.firstChild)
+PASS foreignDoctype.compareDocumentPosition(detachedPara1)
+PASS foreignDoctype.compareDocumentPosition(detachedPara1.firstChild)
+PASS foreignDoctype.compareDocumentPosition(document)
+PASS foreignDoctype.compareDocumentPosition(detachedDiv)
+PASS foreignDoctype.compareDocumentPosition(foreignDoc)
+PASS foreignDoctype.compareDocumentPosition(foreignPara2)
+PASS foreignDoctype.compareDocumentPosition(xmlDoc)
+PASS foreignDoctype.compareDocumentPosition(xmlElement)
+PASS foreignDoctype.compareDocumentPosition(detachedTextNode)
+PASS foreignDoctype.compareDocumentPosition(foreignTextNode)
+PASS foreignDoctype.compareDocumentPosition(processingInstruction)
+PASS foreignDoctype.compareDocumentPosition(detachedProcessingInstruction)
+PASS foreignDoctype.compareDocumentPosition(comment)
+PASS foreignDoctype.compareDocumentPosition(detachedComment)
+PASS foreignDoctype.compareDocumentPosition(docfrag)
+PASS foreignDoctype.compareDocumentPosition(doctype)
+PASS foreignDoctype.compareDocumentPosition(foreignDoctype)
+PASS foreignDoctype.compareDocumentPosition(paras[1])
+PASS foreignDoctype.compareDocumentPosition(detachedPara2)
+PASS foreignDoctype.compareDocumentPosition(detachedPara2.firstChild)
+PASS foreignDoctype.compareDocumentPosition(testDiv)
+PASS foreignDoctype.compareDocumentPosition(detachedXmlElement)
+PASS foreignDoctype.compareDocumentPosition(detachedForeignTextNode)
+PASS foreignDoctype.compareDocumentPosition(xmlTextNode)
+PASS foreignDoctype.compareDocumentPosition(detachedXmlTextNode)
+PASS foreignDoctype.compareDocumentPosition(xmlComment)
+PASS foreignDoctype.compareDocumentPosition(foreignComment)
+PASS foreignDoctype.compareDocumentPosition(detachedForeignComment)
+PASS foreignDoctype.compareDocumentPosition(detachedXmlComment)
+PASS foreignDoctype.compareDocumentPosition(foreignDocfrag)
+PASS foreignDoctype.compareDocumentPosition(xmlDocfrag)
+PASS foreignDoctype.compareDocumentPosition(xmlDoctype)
+PASS paras[1].compareDocumentPosition(paras[0])
+PASS paras[1].compareDocumentPosition(paras[0].firstChild)
+PASS paras[1].compareDocumentPosition(paras[1].firstChild)
+PASS paras[1].compareDocumentPosition(foreignPara1)
+PASS paras[1].compareDocumentPosition(foreignPara1.firstChild)
+PASS paras[1].compareDocumentPosition(detachedPara1)
+PASS paras[1].compareDocumentPosition(detachedPara1.firstChild)
+PASS paras[1].compareDocumentPosition(document)
+PASS paras[1].compareDocumentPosition(detachedDiv)
+PASS paras[1].compareDocumentPosition(foreignDoc)
+PASS paras[1].compareDocumentPosition(foreignPara2)
+PASS paras[1].compareDocumentPosition(xmlDoc)
+PASS paras[1].compareDocumentPosition(xmlElement)
+PASS paras[1].compareDocumentPosition(detachedTextNode)
+PASS paras[1].compareDocumentPosition(foreignTextNode)
+PASS paras[1].compareDocumentPosition(processingInstruction)
+PASS paras[1].compareDocumentPosition(detachedProcessingInstruction)
+PASS paras[1].compareDocumentPosition(comment)
+PASS paras[1].compareDocumentPosition(detachedComment)
+PASS paras[1].compareDocumentPosition(docfrag)
+PASS paras[1].compareDocumentPosition(doctype)
+PASS paras[1].compareDocumentPosition(foreignDoctype)
+PASS paras[1].compareDocumentPosition(paras[1])
+PASS paras[1].compareDocumentPosition(detachedPara2)
+PASS paras[1].compareDocumentPosition(detachedPara2.firstChild)
+PASS paras[1].compareDocumentPosition(testDiv)
+PASS paras[1].compareDocumentPosition(detachedXmlElement)
+PASS paras[1].compareDocumentPosition(detachedForeignTextNode)
+PASS paras[1].compareDocumentPosition(xmlTextNode)
+PASS paras[1].compareDocumentPosition(detachedXmlTextNode)
+PASS paras[1].compareDocumentPosition(xmlComment)
+PASS paras[1].compareDocumentPosition(foreignComment)
+PASS paras[1].compareDocumentPosition(detachedForeignComment)
+PASS paras[1].compareDocumentPosition(detachedXmlComment)
+PASS paras[1].compareDocumentPosition(foreignDocfrag)
+PASS paras[1].compareDocumentPosition(xmlDocfrag)
+PASS paras[1].compareDocumentPosition(xmlDoctype)
+PASS detachedPara2.compareDocumentPosition(paras[0])
+PASS detachedPara2.compareDocumentPosition(paras[0].firstChild)
+PASS detachedPara2.compareDocumentPosition(paras[1].firstChild)
+PASS detachedPara2.compareDocumentPosition(foreignPara1)
+PASS detachedPara2.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedPara2.compareDocumentPosition(detachedPara1)
+PASS detachedPara2.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedPara2.compareDocumentPosition(document)
+PASS detachedPara2.compareDocumentPosition(detachedDiv)
+PASS detachedPara2.compareDocumentPosition(foreignDoc)
+PASS detachedPara2.compareDocumentPosition(foreignPara2)
+PASS detachedPara2.compareDocumentPosition(xmlDoc)
+PASS detachedPara2.compareDocumentPosition(xmlElement)
+PASS detachedPara2.compareDocumentPosition(detachedTextNode)
+PASS detachedPara2.compareDocumentPosition(foreignTextNode)
+PASS detachedPara2.compareDocumentPosition(processingInstruction)
+PASS detachedPara2.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedPara2.compareDocumentPosition(comment)
+PASS detachedPara2.compareDocumentPosition(detachedComment)
+PASS detachedPara2.compareDocumentPosition(docfrag)
+PASS detachedPara2.compareDocumentPosition(doctype)
+PASS detachedPara2.compareDocumentPosition(foreignDoctype)
+PASS detachedPara2.compareDocumentPosition(paras[1])
+PASS detachedPara2.compareDocumentPosition(detachedPara2)
+PASS detachedPara2.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedPara2.compareDocumentPosition(testDiv)
+PASS detachedPara2.compareDocumentPosition(detachedXmlElement)
+PASS detachedPara2.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedPara2.compareDocumentPosition(xmlTextNode)
+PASS detachedPara2.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedPara2.compareDocumentPosition(xmlComment)
+PASS detachedPara2.compareDocumentPosition(foreignComment)
+PASS detachedPara2.compareDocumentPosition(detachedForeignComment)
+PASS detachedPara2.compareDocumentPosition(detachedXmlComment)
+PASS detachedPara2.compareDocumentPosition(foreignDocfrag)
+PASS detachedPara2.compareDocumentPosition(xmlDocfrag)
+PASS detachedPara2.compareDocumentPosition(xmlDoctype)
+PASS detachedPara2.firstChild.compareDocumentPosition(paras[0])
+PASS detachedPara2.firstChild.compareDocumentPosition(paras[0].firstChild)
+PASS detachedPara2.firstChild.compareDocumentPosition(paras[1].firstChild)
+PASS detachedPara2.firstChild.compareDocumentPosition(foreignPara1)
+PASS detachedPara2.firstChild.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedPara1)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedPara2.firstChild.compareDocumentPosition(document)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedDiv)
+PASS detachedPara2.firstChild.compareDocumentPosition(foreignDoc)
+PASS detachedPara2.firstChild.compareDocumentPosition(foreignPara2)
+PASS detachedPara2.firstChild.compareDocumentPosition(xmlDoc)
+PASS detachedPara2.firstChild.compareDocumentPosition(xmlElement)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedTextNode)
+PASS detachedPara2.firstChild.compareDocumentPosition(foreignTextNode)
+PASS detachedPara2.firstChild.compareDocumentPosition(processingInstruction)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedPara2.firstChild.compareDocumentPosition(comment)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedComment)
+PASS detachedPara2.firstChild.compareDocumentPosition(docfrag)
+PASS detachedPara2.firstChild.compareDocumentPosition(doctype)
+PASS detachedPara2.firstChild.compareDocumentPosition(foreignDoctype)
+PASS detachedPara2.firstChild.compareDocumentPosition(paras[1])
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedPara2)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedPara2.firstChild.compareDocumentPosition(testDiv)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedXmlElement)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedPara2.firstChild.compareDocumentPosition(xmlTextNode)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedPara2.firstChild.compareDocumentPosition(xmlComment)
+PASS detachedPara2.firstChild.compareDocumentPosition(foreignComment)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedForeignComment)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedXmlComment)
+PASS detachedPara2.firstChild.compareDocumentPosition(foreignDocfrag)
+PASS detachedPara2.firstChild.compareDocumentPosition(xmlDocfrag)
+PASS detachedPara2.firstChild.compareDocumentPosition(xmlDoctype)
+PASS testDiv.compareDocumentPosition(paras[0])
+PASS testDiv.compareDocumentPosition(paras[0].firstChild)
+PASS testDiv.compareDocumentPosition(paras[1].firstChild)
+PASS testDiv.compareDocumentPosition(foreignPara1)
+PASS testDiv.compareDocumentPosition(foreignPara1.firstChild)
+PASS testDiv.compareDocumentPosition(detachedPara1)
+PASS testDiv.compareDocumentPosition(detachedPara1.firstChild)
+PASS testDiv.compareDocumentPosition(document)
+PASS testDiv.compareDocumentPosition(detachedDiv)
+PASS testDiv.compareDocumentPosition(foreignDoc)
+PASS testDiv.compareDocumentPosition(foreignPara2)
+PASS testDiv.compareDocumentPosition(xmlDoc)
+PASS testDiv.compareDocumentPosition(xmlElement)
+PASS testDiv.compareDocumentPosition(detachedTextNode)
+PASS testDiv.compareDocumentPosition(foreignTextNode)
+PASS testDiv.compareDocumentPosition(processingInstruction)
+PASS testDiv.compareDocumentPosition(detachedProcessingInstruction)
+PASS testDiv.compareDocumentPosition(comment)
+PASS testDiv.compareDocumentPosition(detachedComment)
+PASS testDiv.compareDocumentPosition(docfrag)
+PASS testDiv.compareDocumentPosition(doctype)
+PASS testDiv.compareDocumentPosition(foreignDoctype)
+PASS testDiv.compareDocumentPosition(paras[1])
+PASS testDiv.compareDocumentPosition(detachedPara2)
+PASS testDiv.compareDocumentPosition(detachedPara2.firstChild)
+PASS testDiv.compareDocumentPosition(testDiv)
+PASS testDiv.compareDocumentPosition(detachedXmlElement)
+PASS testDiv.compareDocumentPosition(detachedForeignTextNode)
+PASS testDiv.compareDocumentPosition(xmlTextNode)
+PASS testDiv.compareDocumentPosition(detachedXmlTextNode)
+PASS testDiv.compareDocumentPosition(xmlComment)
+PASS testDiv.compareDocumentPosition(foreignComment)
+PASS testDiv.compareDocumentPosition(detachedForeignComment)
+PASS testDiv.compareDocumentPosition(detachedXmlComment)
+PASS testDiv.compareDocumentPosition(foreignDocfrag)
+PASS testDiv.compareDocumentPosition(xmlDocfrag)
+PASS testDiv.compareDocumentPosition(xmlDoctype)
+PASS detachedXmlElement.compareDocumentPosition(paras[0])
+PASS detachedXmlElement.compareDocumentPosition(paras[0].firstChild)
+PASS detachedXmlElement.compareDocumentPosition(paras[1].firstChild)
+PASS detachedXmlElement.compareDocumentPosition(foreignPara1)
+PASS detachedXmlElement.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedXmlElement.compareDocumentPosition(detachedPara1)
+PASS detachedXmlElement.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedXmlElement.compareDocumentPosition(document)
+PASS detachedXmlElement.compareDocumentPosition(detachedDiv)
+PASS detachedXmlElement.compareDocumentPosition(foreignDoc)
+PASS detachedXmlElement.compareDocumentPosition(foreignPara2)
+PASS detachedXmlElement.compareDocumentPosition(xmlDoc)
+PASS detachedXmlElement.compareDocumentPosition(xmlElement)
+PASS detachedXmlElement.compareDocumentPosition(detachedTextNode)
+PASS detachedXmlElement.compareDocumentPosition(foreignTextNode)
+PASS detachedXmlElement.compareDocumentPosition(processingInstruction)
+PASS detachedXmlElement.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedXmlElement.compareDocumentPosition(comment)
+PASS detachedXmlElement.compareDocumentPosition(detachedComment)
+PASS detachedXmlElement.compareDocumentPosition(docfrag)
+PASS detachedXmlElement.compareDocumentPosition(doctype)
+PASS detachedXmlElement.compareDocumentPosition(foreignDoctype)
+PASS detachedXmlElement.compareDocumentPosition(paras[1])
+PASS detachedXmlElement.compareDocumentPosition(detachedPara2)
+PASS detachedXmlElement.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedXmlElement.compareDocumentPosition(testDiv)
+PASS detachedXmlElement.compareDocumentPosition(detachedXmlElement)
+PASS detachedXmlElement.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedXmlElement.compareDocumentPosition(xmlTextNode)
+PASS detachedXmlElement.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedXmlElement.compareDocumentPosition(xmlComment)
+PASS detachedXmlElement.compareDocumentPosition(foreignComment)
+PASS detachedXmlElement.compareDocumentPosition(detachedForeignComment)
+PASS detachedXmlElement.compareDocumentPosition(detachedXmlComment)
+PASS detachedXmlElement.compareDocumentPosition(foreignDocfrag)
+PASS detachedXmlElement.compareDocumentPosition(xmlDocfrag)
+PASS detachedXmlElement.compareDocumentPosition(xmlDoctype)
+PASS detachedForeignTextNode.compareDocumentPosition(paras[0])
+PASS detachedForeignTextNode.compareDocumentPosition(paras[0].firstChild)
+PASS detachedForeignTextNode.compareDocumentPosition(paras[1].firstChild)
+PASS detachedForeignTextNode.compareDocumentPosition(foreignPara1)
+PASS detachedForeignTextNode.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedPara1)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedForeignTextNode.compareDocumentPosition(document)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedDiv)
+PASS detachedForeignTextNode.compareDocumentPosition(foreignDoc)
+PASS detachedForeignTextNode.compareDocumentPosition(foreignPara2)
+PASS detachedForeignTextNode.compareDocumentPosition(xmlDoc)
+PASS detachedForeignTextNode.compareDocumentPosition(xmlElement)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedTextNode)
+PASS detachedForeignTextNode.compareDocumentPosition(foreignTextNode)
+PASS detachedForeignTextNode.compareDocumentPosition(processingInstruction)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedForeignTextNode.compareDocumentPosition(comment)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedComment)
+PASS detachedForeignTextNode.compareDocumentPosition(docfrag)
+PASS detachedForeignTextNode.compareDocumentPosition(doctype)
+PASS detachedForeignTextNode.compareDocumentPosition(foreignDoctype)
+PASS detachedForeignTextNode.compareDocumentPosition(paras[1])
+PASS detachedForeignTextNode.compareDocumentPosition(detachedPara2)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedForeignTextNode.compareDocumentPosition(testDiv)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedXmlElement)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedForeignTextNode.compareDocumentPosition(xmlTextNode)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedForeignTextNode.compareDocumentPosition(xmlComment)
+PASS detachedForeignTextNode.compareDocumentPosition(foreignComment)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedForeignComment)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedXmlComment)
+PASS detachedForeignTextNode.compareDocumentPosition(foreignDocfrag)
+PASS detachedForeignTextNode.compareDocumentPosition(xmlDocfrag)
+PASS detachedForeignTextNode.compareDocumentPosition(xmlDoctype)
+PASS xmlTextNode.compareDocumentPosition(paras[0])
+PASS xmlTextNode.compareDocumentPosition(paras[0].firstChild)
+PASS xmlTextNode.compareDocumentPosition(paras[1].firstChild)
+PASS xmlTextNode.compareDocumentPosition(foreignPara1)
+PASS xmlTextNode.compareDocumentPosition(foreignPara1.firstChild)
+PASS xmlTextNode.compareDocumentPosition(detachedPara1)
+PASS xmlTextNode.compareDocumentPosition(detachedPara1.firstChild)
+PASS xmlTextNode.compareDocumentPosition(document)
+PASS xmlTextNode.compareDocumentPosition(detachedDiv)
+PASS xmlTextNode.compareDocumentPosition(foreignDoc)
+PASS xmlTextNode.compareDocumentPosition(foreignPara2)
+PASS xmlTextNode.compareDocumentPosition(xmlDoc)
+PASS xmlTextNode.compareDocumentPosition(xmlElement)
+PASS xmlTextNode.compareDocumentPosition(detachedTextNode)
+PASS xmlTextNode.compareDocumentPosition(foreignTextNode)
+PASS xmlTextNode.compareDocumentPosition(processingInstruction)
+PASS xmlTextNode.compareDocumentPosition(detachedProcessingInstruction)
+PASS xmlTextNode.compareDocumentPosition(comment)
+PASS xmlTextNode.compareDocumentPosition(detachedComment)
+PASS xmlTextNode.compareDocumentPosition(docfrag)
+PASS xmlTextNode.compareDocumentPosition(doctype)
+PASS xmlTextNode.compareDocumentPosition(foreignDoctype)
+PASS xmlTextNode.compareDocumentPosition(paras[1])
+PASS xmlTextNode.compareDocumentPosition(detachedPara2)
+PASS xmlTextNode.compareDocumentPosition(detachedPara2.firstChild)
+PASS xmlTextNode.compareDocumentPosition(testDiv)
+PASS xmlTextNode.compareDocumentPosition(detachedXmlElement)
+PASS xmlTextNode.compareDocumentPosition(detachedForeignTextNode)
+PASS xmlTextNode.compareDocumentPosition(xmlTextNode)
+PASS xmlTextNode.compareDocumentPosition(detachedXmlTextNode)
+PASS xmlTextNode.compareDocumentPosition(xmlComment)
+PASS xmlTextNode.compareDocumentPosition(foreignComment)
+PASS xmlTextNode.compareDocumentPosition(detachedForeignComment)
+PASS xmlTextNode.compareDocumentPosition(detachedXmlComment)
+PASS xmlTextNode.compareDocumentPosition(foreignDocfrag)
+PASS xmlTextNode.compareDocumentPosition(xmlDocfrag)
+PASS xmlTextNode.compareDocumentPosition(xmlDoctype)
+PASS detachedXmlTextNode.compareDocumentPosition(paras[0])
+PASS detachedXmlTextNode.compareDocumentPosition(paras[0].firstChild)
+PASS detachedXmlTextNode.compareDocumentPosition(paras[1].firstChild)
+PASS detachedXmlTextNode.compareDocumentPosition(foreignPara1)
+PASS detachedXmlTextNode.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedPara1)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedXmlTextNode.compareDocumentPosition(document)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedDiv)
+PASS detachedXmlTextNode.compareDocumentPosition(foreignDoc)
+PASS detachedXmlTextNode.compareDocumentPosition(foreignPara2)
+PASS detachedXmlTextNode.compareDocumentPosition(xmlDoc)
+PASS detachedXmlTextNode.compareDocumentPosition(xmlElement)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedTextNode)
+PASS detachedXmlTextNode.compareDocumentPosition(foreignTextNode)
+PASS detachedXmlTextNode.compareDocumentPosition(processingInstruction)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedXmlTextNode.compareDocumentPosition(comment)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedComment)
+PASS detachedXmlTextNode.compareDocumentPosition(docfrag)
+PASS detachedXmlTextNode.compareDocumentPosition(doctype)
+PASS detachedXmlTextNode.compareDocumentPosition(foreignDoctype)
+PASS detachedXmlTextNode.compareDocumentPosition(paras[1])
+PASS detachedXmlTextNode.compareDocumentPosition(detachedPara2)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedXmlTextNode.compareDocumentPosition(testDiv)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedXmlElement)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedXmlTextNode.compareDocumentPosition(xmlTextNode)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedXmlTextNode.compareDocumentPosition(xmlComment)
+PASS detachedXmlTextNode.compareDocumentPosition(foreignComment)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedForeignComment)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedXmlComment)
+PASS detachedXmlTextNode.compareDocumentPosition(foreignDocfrag)
+PASS detachedXmlTextNode.compareDocumentPosition(xmlDocfrag)
+PASS detachedXmlTextNode.compareDocumentPosition(xmlDoctype)
+PASS xmlComment.compareDocumentPosition(paras[0])
+PASS xmlComment.compareDocumentPosition(paras[0].firstChild)
+PASS xmlComment.compareDocumentPosition(paras[1].firstChild)
+PASS xmlComment.compareDocumentPosition(foreignPara1)
+PASS xmlComment.compareDocumentPosition(foreignPara1.firstChild)
+PASS xmlComment.compareDocumentPosition(detachedPara1)
+PASS xmlComment.compareDocumentPosition(detachedPara1.firstChild)
+PASS xmlComment.compareDocumentPosition(document)
+PASS xmlComment.compareDocumentPosition(detachedDiv)
+PASS xmlComment.compareDocumentPosition(foreignDoc)
+PASS xmlComment.compareDocumentPosition(foreignPara2)
+PASS xmlComment.compareDocumentPosition(xmlDoc)
+PASS xmlComment.compareDocumentPosition(xmlElement)
+PASS xmlComment.compareDocumentPosition(detachedTextNode)
+PASS xmlComment.compareDocumentPosition(foreignTextNode)
+PASS xmlComment.compareDocumentPosition(processingInstruction)
+PASS xmlComment.compareDocumentPosition(detachedProcessingInstruction)
+PASS xmlComment.compareDocumentPosition(comment)
+PASS xmlComment.compareDocumentPosition(detachedComment)
+PASS xmlComment.compareDocumentPosition(docfrag)
+PASS xmlComment.compareDocumentPosition(doctype)
+PASS xmlComment.compareDocumentPosition(foreignDoctype)
+PASS xmlComment.compareDocumentPosition(paras[1])
+PASS xmlComment.compareDocumentPosition(detachedPara2)
+PASS xmlComment.compareDocumentPosition(detachedPara2.firstChild)
+PASS xmlComment.compareDocumentPosition(testDiv)
+PASS xmlComment.compareDocumentPosition(detachedXmlElement)
+PASS xmlComment.compareDocumentPosition(detachedForeignTextNode)
+PASS xmlComment.compareDocumentPosition(xmlTextNode)
+PASS xmlComment.compareDocumentPosition(detachedXmlTextNode)
+PASS xmlComment.compareDocumentPosition(xmlComment)
+PASS xmlComment.compareDocumentPosition(foreignComment)
+PASS xmlComment.compareDocumentPosition(detachedForeignComment)
+PASS xmlComment.compareDocumentPosition(detachedXmlComment)
+PASS xmlComment.compareDocumentPosition(foreignDocfrag)
+PASS xmlComment.compareDocumentPosition(xmlDocfrag)
+PASS xmlComment.compareDocumentPosition(xmlDoctype)
+PASS foreignComment.compareDocumentPosition(paras[0])
+PASS foreignComment.compareDocumentPosition(paras[0].firstChild)
+PASS foreignComment.compareDocumentPosition(paras[1].firstChild)
+PASS foreignComment.compareDocumentPosition(foreignPara1)
+PASS foreignComment.compareDocumentPosition(foreignPara1.firstChild)
+PASS foreignComment.compareDocumentPosition(detachedPara1)
+PASS foreignComment.compareDocumentPosition(detachedPara1.firstChild)
+PASS foreignComment.compareDocumentPosition(document)
+PASS foreignComment.compareDocumentPosition(detachedDiv)
+PASS foreignComment.compareDocumentPosition(foreignDoc)
+PASS foreignComment.compareDocumentPosition(foreignPara2)
+PASS foreignComment.compareDocumentPosition(xmlDoc)
+PASS foreignComment.compareDocumentPosition(xmlElement)
+PASS foreignComment.compareDocumentPosition(detachedTextNode)
+PASS foreignComment.compareDocumentPosition(foreignTextNode)
+PASS foreignComment.compareDocumentPosition(processingInstruction)
+PASS foreignComment.compareDocumentPosition(detachedProcessingInstruction)
+PASS foreignComment.compareDocumentPosition(comment)
+PASS foreignComment.compareDocumentPosition(detachedComment)
+PASS foreignComment.compareDocumentPosition(docfrag)
+PASS foreignComment.compareDocumentPosition(doctype)
+PASS foreignComment.compareDocumentPosition(foreignDoctype)
+PASS foreignComment.compareDocumentPosition(paras[1])
+PASS foreignComment.compareDocumentPosition(detachedPara2)
+PASS foreignComment.compareDocumentPosition(detachedPara2.firstChild)
+PASS foreignComment.compareDocumentPosition(testDiv)
+PASS foreignComment.compareDocumentPosition(detachedXmlElement)
+PASS foreignComment.compareDocumentPosition(detachedForeignTextNode)
+PASS foreignComment.compareDocumentPosition(xmlTextNode)
+PASS foreignComment.compareDocumentPosition(detachedXmlTextNode)
+PASS foreignComment.compareDocumentPosition(xmlComment)
+PASS foreignComment.compareDocumentPosition(foreignComment)
+PASS foreignComment.compareDocumentPosition(detachedForeignComment)
+PASS foreignComment.compareDocumentPosition(detachedXmlComment)
+PASS foreignComment.compareDocumentPosition(foreignDocfrag)
+PASS foreignComment.compareDocumentPosition(xmlDocfrag)
+PASS foreignComment.compareDocumentPosition(xmlDoctype)
+PASS detachedForeignComment.compareDocumentPosition(paras[0])
+PASS detachedForeignComment.compareDocumentPosition(paras[0].firstChild)
+PASS detachedForeignComment.compareDocumentPosition(paras[1].firstChild)
+PASS detachedForeignComment.compareDocumentPosition(foreignPara1)
+PASS detachedForeignComment.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedForeignComment.compareDocumentPosition(detachedPara1)
+PASS detachedForeignComment.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedForeignComment.compareDocumentPosition(document)
+PASS detachedForeignComment.compareDocumentPosition(detachedDiv)
+PASS detachedForeignComment.compareDocumentPosition(foreignDoc)
+PASS detachedForeignComment.compareDocumentPosition(foreignPara2)
+PASS detachedForeignComment.compareDocumentPosition(xmlDoc)
+PASS detachedForeignComment.compareDocumentPosition(xmlElement)
+PASS detachedForeignComment.compareDocumentPosition(detachedTextNode)
+PASS detachedForeignComment.compareDocumentPosition(foreignTextNode)
+PASS detachedForeignComment.compareDocumentPosition(processingInstruction)
+PASS detachedForeignComment.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedForeignComment.compareDocumentPosition(comment)
+PASS detachedForeignComment.compareDocumentPosition(detachedComment)
+PASS detachedForeignComment.compareDocumentPosition(docfrag)
+PASS detachedForeignComment.compareDocumentPosition(doctype)
+PASS detachedForeignComment.compareDocumentPosition(foreignDoctype)
+PASS detachedForeignComment.compareDocumentPosition(paras[1])
+PASS detachedForeignComment.compareDocumentPosition(detachedPara2)
+PASS detachedForeignComment.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedForeignComment.compareDocumentPosition(testDiv)
+PASS detachedForeignComment.compareDocumentPosition(detachedXmlElement)
+PASS detachedForeignComment.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedForeignComment.compareDocumentPosition(xmlTextNode)
+PASS detachedForeignComment.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedForeignComment.compareDocumentPosition(xmlComment)
+PASS detachedForeignComment.compareDocumentPosition(foreignComment)
+PASS detachedForeignComment.compareDocumentPosition(detachedForeignComment)
+PASS detachedForeignComment.compareDocumentPosition(detachedXmlComment)
+PASS detachedForeignComment.compareDocumentPosition(foreignDocfrag)
+PASS detachedForeignComment.compareDocumentPosition(xmlDocfrag)
+PASS detachedForeignComment.compareDocumentPosition(xmlDoctype)
+PASS detachedXmlComment.compareDocumentPosition(paras[0])
+PASS detachedXmlComment.compareDocumentPosition(paras[0].firstChild)
+PASS detachedXmlComment.compareDocumentPosition(paras[1].firstChild)
+PASS detachedXmlComment.compareDocumentPosition(foreignPara1)
+PASS detachedXmlComment.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedXmlComment.compareDocumentPosition(detachedPara1)
+PASS detachedXmlComment.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedXmlComment.compareDocumentPosition(document)
+PASS detachedXmlComment.compareDocumentPosition(detachedDiv)
+PASS detachedXmlComment.compareDocumentPosition(foreignDoc)
+PASS detachedXmlComment.compareDocumentPosition(foreignPara2)
+PASS detachedXmlComment.compareDocumentPosition(xmlDoc)
+PASS detachedXmlComment.compareDocumentPosition(xmlElement)
+PASS detachedXmlComment.compareDocumentPosition(detachedTextNode)
+PASS detachedXmlComment.compareDocumentPosition(foreignTextNode)
+PASS detachedXmlComment.compareDocumentPosition(processingInstruction)
+PASS detachedXmlComment.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedXmlComment.compareDocumentPosition(comment)
+PASS detachedXmlComment.compareDocumentPosition(detachedComment)
+PASS detachedXmlComment.compareDocumentPosition(docfrag)
+PASS detachedXmlComment.compareDocumentPosition(doctype)
+PASS detachedXmlComment.compareDocumentPosition(foreignDoctype)
+PASS detachedXmlComment.compareDocumentPosition(paras[1])
+PASS detachedXmlComment.compareDocumentPosition(detachedPara2)
+PASS detachedXmlComment.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedXmlComment.compareDocumentPosition(testDiv)
+PASS detachedXmlComment.compareDocumentPosition(detachedXmlElement)
+PASS detachedXmlComment.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedXmlComment.compareDocumentPosition(xmlTextNode)
+PASS detachedXmlComment.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedXmlComment.compareDocumentPosition(xmlComment)
+PASS detachedXmlComment.compareDocumentPosition(foreignComment)
+PASS detachedXmlComment.compareDocumentPosition(detachedForeignComment)
+PASS detachedXmlComment.compareDocumentPosition(detachedXmlComment)
+PASS detachedXmlComment.compareDocumentPosition(foreignDocfrag)
+PASS detachedXmlComment.compareDocumentPosition(xmlDocfrag)
+PASS detachedXmlComment.compareDocumentPosition(xmlDoctype)
+PASS foreignDocfrag.compareDocumentPosition(paras[0])
+PASS foreignDocfrag.compareDocumentPosition(paras[0].firstChild)
+PASS foreignDocfrag.compareDocumentPosition(paras[1].firstChild)
+PASS foreignDocfrag.compareDocumentPosition(foreignPara1)
+PASS foreignDocfrag.compareDocumentPosition(foreignPara1.firstChild)
+PASS foreignDocfrag.compareDocumentPosition(detachedPara1)
+PASS foreignDocfrag.compareDocumentPosition(detachedPara1.firstChild)
+PASS foreignDocfrag.compareDocumentPosition(document)
+PASS foreignDocfrag.compareDocumentPosition(detachedDiv)
+PASS foreignDocfrag.compareDocumentPosition(foreignDoc)
+PASS foreignDocfrag.compareDocumentPosition(foreignPara2)
+PASS foreignDocfrag.compareDocumentPosition(xmlDoc)
+PASS foreignDocfrag.compareDocumentPosition(xmlElement)
+PASS foreignDocfrag.compareDocumentPosition(detachedTextNode)
+PASS foreignDocfrag.compareDocumentPosition(foreignTextNode)
+PASS foreignDocfrag.compareDocumentPosition(processingInstruction)
+PASS foreignDocfrag.compareDocumentPosition(detachedProcessingInstruction)
+PASS foreignDocfrag.compareDocumentPosition(comment)
+PASS foreignDocfrag.compareDocumentPosition(detachedComment)
+PASS foreignDocfrag.compareDocumentPosition(docfrag)
+PASS foreignDocfrag.compareDocumentPosition(doctype)
+PASS foreignDocfrag.compareDocumentPosition(foreignDoctype)
+PASS foreignDocfrag.compareDocumentPosition(paras[1])
+PASS foreignDocfrag.compareDocumentPosition(detachedPara2)
+PASS foreignDocfrag.compareDocumentPosition(detachedPara2.firstChild)
+PASS foreignDocfrag.compareDocumentPosition(testDiv)
+PASS foreignDocfrag.compareDocumentPosition(detachedXmlElement)
+PASS foreignDocfrag.compareDocumentPosition(detachedForeignTextNode)
+PASS foreignDocfrag.compareDocumentPosition(xmlTextNode)
+PASS foreignDocfrag.compareDocumentPosition(detachedXmlTextNode)
+PASS foreignDocfrag.compareDocumentPosition(xmlComment)
+PASS foreignDocfrag.compareDocumentPosition(foreignComment)
+PASS foreignDocfrag.compareDocumentPosition(detachedForeignComment)
+PASS foreignDocfrag.compareDocumentPosition(detachedXmlComment)
+PASS foreignDocfrag.compareDocumentPosition(foreignDocfrag)
+PASS foreignDocfrag.compareDocumentPosition(xmlDocfrag)
+PASS foreignDocfrag.compareDocumentPosition(xmlDoctype)
+PASS xmlDocfrag.compareDocumentPosition(paras[0])
+PASS xmlDocfrag.compareDocumentPosition(paras[0].firstChild)
+PASS xmlDocfrag.compareDocumentPosition(paras[1].firstChild)
+PASS xmlDocfrag.compareDocumentPosition(foreignPara1)
+PASS xmlDocfrag.compareDocumentPosition(foreignPara1.firstChild)
+PASS xmlDocfrag.compareDocumentPosition(detachedPara1)
+PASS xmlDocfrag.compareDocumentPosition(detachedPara1.firstChild)
+PASS xmlDocfrag.compareDocumentPosition(document)
+PASS xmlDocfrag.compareDocumentPosition(detachedDiv)
+PASS xmlDocfrag.compareDocumentPosition(foreignDoc)
+PASS xmlDocfrag.compareDocumentPosition(foreignPara2)
+PASS xmlDocfrag.compareDocumentPosition(xmlDoc)
+PASS xmlDocfrag.compareDocumentPosition(xmlElement)
+PASS xmlDocfrag.compareDocumentPosition(detachedTextNode)
+PASS xmlDocfrag.compareDocumentPosition(foreignTextNode)
+PASS xmlDocfrag.compareDocumentPosition(processingInstruction)
+PASS xmlDocfrag.compareDocumentPosition(detachedProcessingInstruction)
+PASS xmlDocfrag.compareDocumentPosition(comment)
+PASS xmlDocfrag.compareDocumentPosition(detachedComment)
+PASS xmlDocfrag.compareDocumentPosition(docfrag)
+PASS xmlDocfrag.compareDocumentPosition(doctype)
+PASS xmlDocfrag.compareDocumentPosition(foreignDoctype)
+PASS xmlDocfrag.compareDocumentPosition(paras[1])
+PASS xmlDocfrag.compareDocumentPosition(detachedPara2)
+PASS xmlDocfrag.compareDocumentPosition(detachedPara2.firstChild)
+PASS xmlDocfrag.compareDocumentPosition(testDiv)
+PASS xmlDocfrag.compareDocumentPosition(detachedXmlElement)
+PASS xmlDocfrag.compareDocumentPosition(detachedForeignTextNode)
+PASS xmlDocfrag.compareDocumentPosition(xmlTextNode)
+PASS xmlDocfrag.compareDocumentPosition(detachedXmlTextNode)
+PASS xmlDocfrag.compareDocumentPosition(xmlComment)
+PASS xmlDocfrag.compareDocumentPosition(foreignComment)
+PASS xmlDocfrag.compareDocumentPosition(detachedForeignComment)
+PASS xmlDocfrag.compareDocumentPosition(detachedXmlComment)
+PASS xmlDocfrag.compareDocumentPosition(foreignDocfrag)
+PASS xmlDocfrag.compareDocumentPosition(xmlDocfrag)
+PASS xmlDocfrag.compareDocumentPosition(xmlDoctype)
+PASS xmlDoctype.compareDocumentPosition(paras[0])
+PASS xmlDoctype.compareDocumentPosition(paras[0].firstChild)
+PASS xmlDoctype.compareDocumentPosition(paras[1].firstChild)
+PASS xmlDoctype.compareDocumentPosition(foreignPara1)
+PASS xmlDoctype.compareDocumentPosition(foreignPara1.firstChild)
+PASS xmlDoctype.compareDocumentPosition(detachedPara1)
+PASS xmlDoctype.compareDocumentPosition(detachedPara1.firstChild)
+PASS xmlDoctype.compareDocumentPosition(document)
+PASS xmlDoctype.compareDocumentPosition(detachedDiv)
+PASS xmlDoctype.compareDocumentPosition(foreignDoc)
+PASS xmlDoctype.compareDocumentPosition(foreignPara2)
+PASS xmlDoctype.compareDocumentPosition(xmlDoc)
+PASS xmlDoctype.compareDocumentPosition(xmlElement)
+PASS xmlDoctype.compareDocumentPosition(detachedTextNode)
+PASS xmlDoctype.compareDocumentPosition(foreignTextNode)
+PASS xmlDoctype.compareDocumentPosition(processingInstruction)
+PASS xmlDoctype.compareDocumentPosition(detachedProcessingInstruction)
+PASS xmlDoctype.compareDocumentPosition(comment)
+PASS xmlDoctype.compareDocumentPosition(detachedComment)
+PASS xmlDoctype.compareDocumentPosition(docfrag)
+PASS xmlDoctype.compareDocumentPosition(doctype)
+PASS xmlDoctype.compareDocumentPosition(foreignDoctype)
+PASS xmlDoctype.compareDocumentPosition(paras[1])
+PASS xmlDoctype.compareDocumentPosition(detachedPara2)
+PASS xmlDoctype.compareDocumentPosition(detachedPara2.firstChild)
+PASS xmlDoctype.compareDocumentPosition(testDiv)
+PASS xmlDoctype.compareDocumentPosition(detachedXmlElement)
+PASS xmlDoctype.compareDocumentPosition(detachedForeignTextNode)
+PASS xmlDoctype.compareDocumentPosition(xmlTextNode)
+PASS xmlDoctype.compareDocumentPosition(detachedXmlTextNode)
+PASS xmlDoctype.compareDocumentPosition(xmlComment)
+PASS xmlDoctype.compareDocumentPosition(foreignComment)
+PASS xmlDoctype.compareDocumentPosition(detachedForeignComment)
+PASS xmlDoctype.compareDocumentPosition(detachedXmlComment)
+PASS xmlDoctype.compareDocumentPosition(foreignDocfrag)
+PASS xmlDoctype.compareDocumentPosition(xmlDocfrag)
+PASS xmlDoctype.compareDocumentPosition(xmlDoctype)
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodecompareDocumentPositionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-compareDocumentPosition.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-compareDocumentPosition.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-compareDocumentPosition.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,87 @@
</span><ins>+<!doctype html>
+<title>Node.compareDocumentPosition() tests</title>
+<link rel=author title="Aryeh Gregor" href=ayg@aryeh.name>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+testNodes.forEach(function(referenceName) {
+ var reference = eval(referenceName);
+ testNodes.forEach(function(otherName) {
+ var other = eval(otherName);
+ test(function() {
+ var result = reference.compareDocumentPosition(other);
+
+ // "If other and reference are the same object, return zero and
+ // terminate these steps."
+ if (other === reference) {
+ assert_equals(result, 0);
+ return;
+ }
+
+ // "If other and reference are not in the same tree, return the result of
+ // adding DOCUMENT_POSITION_DISCONNECTED,
+ // DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, and either
+ // DOCUMENT_POSITION_PRECEDING or DOCUMENT_POSITION_FOLLOWING, with the
+ // constraint that this is to be consistent, together and terminate these
+ // steps."
+ if (furthestAncestor(reference) !== furthestAncestor(other)) {
+ // TODO: Test that it's consistent.
+ assert_in_array(result, [Node.DOCUMENT_POSITION_DISCONNECTED +
+ Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC +
+ Node.DOCUMENT_POSITION_PRECEDING,
+ Node.DOCUMENT_POSITION_DISCONNECTED +
+ Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC +
+ Node.DOCUMENT_POSITION_FOLLOWING]);
+ return;
+ }
+
+ // "If other is an ancestor of reference, return the result of
+ // adding DOCUMENT_POSITION_CONTAINS to DOCUMENT_POSITION_PRECEDING
+ // and terminate these steps."
+ var ancestor = reference.parentNode;
+ while (ancestor && ancestor !== other) {
+ ancestor = ancestor.parentNode;
+ }
+ if (ancestor === other) {
+ assert_equals(result, Node.DOCUMENT_POSITION_CONTAINS +
+ Node.DOCUMENT_POSITION_PRECEDING);
+ return;
+ }
+
+ // "If other is a descendant of reference, return the result of adding
+ // DOCUMENT_POSITION_CONTAINED_BY to DOCUMENT_POSITION_FOLLOWING and
+ // terminate these steps."
+ ancestor = other.parentNode;
+ while (ancestor && ancestor !== reference) {
+ ancestor = ancestor.parentNode;
+ }
+ if (ancestor === reference) {
+ assert_equals(result, Node.DOCUMENT_POSITION_CONTAINED_BY +
+ Node.DOCUMENT_POSITION_FOLLOWING);
+ return;
+ }
+
+ // "If other is preceding reference return DOCUMENT_POSITION_PRECEDING
+ // and terminate these steps."
+ var prev = previousNode(reference);
+ while (prev && prev !== other) {
+ prev = previousNode(prev);
+ }
+ if (prev === other) {
+ assert_equals(result, Node.DOCUMENT_POSITION_PRECEDING);
+ return;
+ }
+
+ // "Return DOCUMENT_POSITION_FOLLOWING."
+ assert_equals(result, Node.DOCUMENT_POSITION_FOLLOWING);
+ }, referenceName + ".compareDocumentPosition(" + otherName + ")");
+ });
+});
+
+testDiv.parentNode.removeChild(testDiv);
+</script>
+<!-- vim: set expandtab tabstop=2 shiftwidth=2: -->
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodeconstantsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-constants-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-constants-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-constants-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+
+PASS Constants for nodeType on Node interface object.
+PASS Constants for nodeType on Node prototype object.
+PASS Constants for nodeType on Element object.
+PASS Constants for nodeType on Text object.
+PASS Constants for createDocumentPosition on Node interface object.
+PASS Constants for createDocumentPosition on Node prototype object.
+PASS Constants for createDocumentPosition on Element object.
+PASS Constants for createDocumentPosition on Text object.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodeconstantshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-constants.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-constants.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-constants.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,39 @@
</span><ins>+<!doctype html>
+<title>Node constants</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../constants.js"></script>
+<div id="log"></div>
+<script>
+var objects;
+setup(function() {
+ objects = [
+ [Node, "Node interface object"],
+ [Node.prototype, "Node prototype object"],
+ [document.createElement("foo"), "Element object"],
+ [document.createTextNode("bar"), "Text object"]
+ ]
+})
+testConstants(objects, [
+ ["ELEMENT_NODE", 1],
+ ["ATTRIBUTE_NODE", 2],
+ ["TEXT_NODE", 3],
+ ["CDATA_SECTION_NODE", 4],
+ ["ENTITY_REFERENCE_NODE", 5],
+ ["ENTITY_NODE", 6],
+ ["PROCESSING_INSTRUCTION_NODE", 7],
+ ["COMMENT_NODE", 8],
+ ["DOCUMENT_NODE", 9],
+ ["DOCUMENT_TYPE_NODE", 10],
+ ["DOCUMENT_FRAGMENT_NODE", 11],
+ ["NOTATION_NODE", 12]
+], "nodeType")
+testConstants(objects, [
+ ["DOCUMENT_POSITION_DISCONNECTED", 0x01],
+ ["DOCUMENT_POSITION_PRECEDING", 0x02],
+ ["DOCUMENT_POSITION_FOLLOWING", 0x04],
+ ["DOCUMENT_POSITION_CONTAINS", 0x08],
+ ["DOCUMENT_POSITION_CONTAINED_BY", 0x10],
+ ["DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", 0x20]
+], "createDocumentPosition")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodecontainsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-contains-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-contains-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-contains-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,1408 @@
</span><ins>+
+PASS paras[0].contains(null)
+PASS paras[0].compareDocumentPosition(paras[0])
+PASS paras[0].compareDocumentPosition(paras[0].firstChild)
+PASS paras[0].compareDocumentPosition(paras[1].firstChild)
+PASS paras[0].compareDocumentPosition(foreignPara1)
+PASS paras[0].compareDocumentPosition(foreignPara1.firstChild)
+PASS paras[0].compareDocumentPosition(detachedPara1)
+PASS paras[0].compareDocumentPosition(detachedPara1.firstChild)
+PASS paras[0].compareDocumentPosition(document)
+PASS paras[0].compareDocumentPosition(detachedDiv)
+PASS paras[0].compareDocumentPosition(foreignDoc)
+PASS paras[0].compareDocumentPosition(foreignPara2)
+PASS paras[0].compareDocumentPosition(xmlDoc)
+PASS paras[0].compareDocumentPosition(xmlElement)
+PASS paras[0].compareDocumentPosition(detachedTextNode)
+PASS paras[0].compareDocumentPosition(foreignTextNode)
+PASS paras[0].compareDocumentPosition(processingInstruction)
+PASS paras[0].compareDocumentPosition(detachedProcessingInstruction)
+PASS paras[0].compareDocumentPosition(comment)
+PASS paras[0].compareDocumentPosition(detachedComment)
+PASS paras[0].compareDocumentPosition(docfrag)
+PASS paras[0].compareDocumentPosition(doctype)
+PASS paras[0].compareDocumentPosition(foreignDoctype)
+PASS paras[0].compareDocumentPosition(paras[1])
+PASS paras[0].compareDocumentPosition(detachedPara2)
+PASS paras[0].compareDocumentPosition(detachedPara2.firstChild)
+PASS paras[0].compareDocumentPosition(testDiv)
+PASS paras[0].compareDocumentPosition(detachedXmlElement)
+PASS paras[0].compareDocumentPosition(detachedForeignTextNode)
+PASS paras[0].compareDocumentPosition(xmlTextNode)
+PASS paras[0].compareDocumentPosition(detachedXmlTextNode)
+PASS paras[0].compareDocumentPosition(xmlComment)
+PASS paras[0].compareDocumentPosition(foreignComment)
+PASS paras[0].compareDocumentPosition(detachedForeignComment)
+PASS paras[0].compareDocumentPosition(detachedXmlComment)
+PASS paras[0].compareDocumentPosition(foreignDocfrag)
+PASS paras[0].compareDocumentPosition(xmlDocfrag)
+PASS paras[0].compareDocumentPosition(xmlDoctype)
+PASS paras[0].firstChild.contains(null)
+PASS paras[0].firstChild.compareDocumentPosition(paras[0])
+PASS paras[0].firstChild.compareDocumentPosition(paras[0].firstChild)
+PASS paras[0].firstChild.compareDocumentPosition(paras[1].firstChild)
+PASS paras[0].firstChild.compareDocumentPosition(foreignPara1)
+PASS paras[0].firstChild.compareDocumentPosition(foreignPara1.firstChild)
+PASS paras[0].firstChild.compareDocumentPosition(detachedPara1)
+PASS paras[0].firstChild.compareDocumentPosition(detachedPara1.firstChild)
+PASS paras[0].firstChild.compareDocumentPosition(document)
+PASS paras[0].firstChild.compareDocumentPosition(detachedDiv)
+PASS paras[0].firstChild.compareDocumentPosition(foreignDoc)
+PASS paras[0].firstChild.compareDocumentPosition(foreignPara2)
+PASS paras[0].firstChild.compareDocumentPosition(xmlDoc)
+PASS paras[0].firstChild.compareDocumentPosition(xmlElement)
+PASS paras[0].firstChild.compareDocumentPosition(detachedTextNode)
+PASS paras[0].firstChild.compareDocumentPosition(foreignTextNode)
+PASS paras[0].firstChild.compareDocumentPosition(processingInstruction)
+PASS paras[0].firstChild.compareDocumentPosition(detachedProcessingInstruction)
+PASS paras[0].firstChild.compareDocumentPosition(comment)
+PASS paras[0].firstChild.compareDocumentPosition(detachedComment)
+PASS paras[0].firstChild.compareDocumentPosition(docfrag)
+PASS paras[0].firstChild.compareDocumentPosition(doctype)
+PASS paras[0].firstChild.compareDocumentPosition(foreignDoctype)
+PASS paras[0].firstChild.compareDocumentPosition(paras[1])
+PASS paras[0].firstChild.compareDocumentPosition(detachedPara2)
+PASS paras[0].firstChild.compareDocumentPosition(detachedPara2.firstChild)
+PASS paras[0].firstChild.compareDocumentPosition(testDiv)
+PASS paras[0].firstChild.compareDocumentPosition(detachedXmlElement)
+PASS paras[0].firstChild.compareDocumentPosition(detachedForeignTextNode)
+PASS paras[0].firstChild.compareDocumentPosition(xmlTextNode)
+PASS paras[0].firstChild.compareDocumentPosition(detachedXmlTextNode)
+PASS paras[0].firstChild.compareDocumentPosition(xmlComment)
+PASS paras[0].firstChild.compareDocumentPosition(foreignComment)
+PASS paras[0].firstChild.compareDocumentPosition(detachedForeignComment)
+PASS paras[0].firstChild.compareDocumentPosition(detachedXmlComment)
+PASS paras[0].firstChild.compareDocumentPosition(foreignDocfrag)
+PASS paras[0].firstChild.compareDocumentPosition(xmlDocfrag)
+PASS paras[0].firstChild.compareDocumentPosition(xmlDoctype)
+PASS paras[1].firstChild.contains(null)
+PASS paras[1].firstChild.compareDocumentPosition(paras[0])
+PASS paras[1].firstChild.compareDocumentPosition(paras[0].firstChild)
+PASS paras[1].firstChild.compareDocumentPosition(paras[1].firstChild)
+PASS paras[1].firstChild.compareDocumentPosition(foreignPara1)
+PASS paras[1].firstChild.compareDocumentPosition(foreignPara1.firstChild)
+PASS paras[1].firstChild.compareDocumentPosition(detachedPara1)
+PASS paras[1].firstChild.compareDocumentPosition(detachedPara1.firstChild)
+PASS paras[1].firstChild.compareDocumentPosition(document)
+PASS paras[1].firstChild.compareDocumentPosition(detachedDiv)
+PASS paras[1].firstChild.compareDocumentPosition(foreignDoc)
+PASS paras[1].firstChild.compareDocumentPosition(foreignPara2)
+PASS paras[1].firstChild.compareDocumentPosition(xmlDoc)
+PASS paras[1].firstChild.compareDocumentPosition(xmlElement)
+PASS paras[1].firstChild.compareDocumentPosition(detachedTextNode)
+PASS paras[1].firstChild.compareDocumentPosition(foreignTextNode)
+PASS paras[1].firstChild.compareDocumentPosition(processingInstruction)
+PASS paras[1].firstChild.compareDocumentPosition(detachedProcessingInstruction)
+PASS paras[1].firstChild.compareDocumentPosition(comment)
+PASS paras[1].firstChild.compareDocumentPosition(detachedComment)
+PASS paras[1].firstChild.compareDocumentPosition(docfrag)
+PASS paras[1].firstChild.compareDocumentPosition(doctype)
+PASS paras[1].firstChild.compareDocumentPosition(foreignDoctype)
+PASS paras[1].firstChild.compareDocumentPosition(paras[1])
+PASS paras[1].firstChild.compareDocumentPosition(detachedPara2)
+PASS paras[1].firstChild.compareDocumentPosition(detachedPara2.firstChild)
+PASS paras[1].firstChild.compareDocumentPosition(testDiv)
+PASS paras[1].firstChild.compareDocumentPosition(detachedXmlElement)
+PASS paras[1].firstChild.compareDocumentPosition(detachedForeignTextNode)
+PASS paras[1].firstChild.compareDocumentPosition(xmlTextNode)
+PASS paras[1].firstChild.compareDocumentPosition(detachedXmlTextNode)
+PASS paras[1].firstChild.compareDocumentPosition(xmlComment)
+PASS paras[1].firstChild.compareDocumentPosition(foreignComment)
+PASS paras[1].firstChild.compareDocumentPosition(detachedForeignComment)
+PASS paras[1].firstChild.compareDocumentPosition(detachedXmlComment)
+PASS paras[1].firstChild.compareDocumentPosition(foreignDocfrag)
+PASS paras[1].firstChild.compareDocumentPosition(xmlDocfrag)
+PASS paras[1].firstChild.compareDocumentPosition(xmlDoctype)
+PASS foreignPara1.contains(null)
+PASS foreignPara1.compareDocumentPosition(paras[0])
+PASS foreignPara1.compareDocumentPosition(paras[0].firstChild)
+PASS foreignPara1.compareDocumentPosition(paras[1].firstChild)
+PASS foreignPara1.compareDocumentPosition(foreignPara1)
+PASS foreignPara1.compareDocumentPosition(foreignPara1.firstChild)
+PASS foreignPara1.compareDocumentPosition(detachedPara1)
+PASS foreignPara1.compareDocumentPosition(detachedPara1.firstChild)
+PASS foreignPara1.compareDocumentPosition(document)
+PASS foreignPara1.compareDocumentPosition(detachedDiv)
+PASS foreignPara1.compareDocumentPosition(foreignDoc)
+PASS foreignPara1.compareDocumentPosition(foreignPara2)
+PASS foreignPara1.compareDocumentPosition(xmlDoc)
+PASS foreignPara1.compareDocumentPosition(xmlElement)
+PASS foreignPara1.compareDocumentPosition(detachedTextNode)
+PASS foreignPara1.compareDocumentPosition(foreignTextNode)
+PASS foreignPara1.compareDocumentPosition(processingInstruction)
+PASS foreignPara1.compareDocumentPosition(detachedProcessingInstruction)
+PASS foreignPara1.compareDocumentPosition(comment)
+PASS foreignPara1.compareDocumentPosition(detachedComment)
+PASS foreignPara1.compareDocumentPosition(docfrag)
+PASS foreignPara1.compareDocumentPosition(doctype)
+PASS foreignPara1.compareDocumentPosition(foreignDoctype)
+PASS foreignPara1.compareDocumentPosition(paras[1])
+PASS foreignPara1.compareDocumentPosition(detachedPara2)
+PASS foreignPara1.compareDocumentPosition(detachedPara2.firstChild)
+PASS foreignPara1.compareDocumentPosition(testDiv)
+PASS foreignPara1.compareDocumentPosition(detachedXmlElement)
+PASS foreignPara1.compareDocumentPosition(detachedForeignTextNode)
+PASS foreignPara1.compareDocumentPosition(xmlTextNode)
+PASS foreignPara1.compareDocumentPosition(detachedXmlTextNode)
+PASS foreignPara1.compareDocumentPosition(xmlComment)
+PASS foreignPara1.compareDocumentPosition(foreignComment)
+PASS foreignPara1.compareDocumentPosition(detachedForeignComment)
+PASS foreignPara1.compareDocumentPosition(detachedXmlComment)
+PASS foreignPara1.compareDocumentPosition(foreignDocfrag)
+PASS foreignPara1.compareDocumentPosition(xmlDocfrag)
+PASS foreignPara1.compareDocumentPosition(xmlDoctype)
+PASS foreignPara1.firstChild.contains(null)
+PASS foreignPara1.firstChild.compareDocumentPosition(paras[0])
+PASS foreignPara1.firstChild.compareDocumentPosition(paras[0].firstChild)
+PASS foreignPara1.firstChild.compareDocumentPosition(paras[1].firstChild)
+PASS foreignPara1.firstChild.compareDocumentPosition(foreignPara1)
+PASS foreignPara1.firstChild.compareDocumentPosition(foreignPara1.firstChild)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedPara1)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedPara1.firstChild)
+PASS foreignPara1.firstChild.compareDocumentPosition(document)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedDiv)
+PASS foreignPara1.firstChild.compareDocumentPosition(foreignDoc)
+PASS foreignPara1.firstChild.compareDocumentPosition(foreignPara2)
+PASS foreignPara1.firstChild.compareDocumentPosition(xmlDoc)
+PASS foreignPara1.firstChild.compareDocumentPosition(xmlElement)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedTextNode)
+PASS foreignPara1.firstChild.compareDocumentPosition(foreignTextNode)
+PASS foreignPara1.firstChild.compareDocumentPosition(processingInstruction)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedProcessingInstruction)
+PASS foreignPara1.firstChild.compareDocumentPosition(comment)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedComment)
+PASS foreignPara1.firstChild.compareDocumentPosition(docfrag)
+PASS foreignPara1.firstChild.compareDocumentPosition(doctype)
+PASS foreignPara1.firstChild.compareDocumentPosition(foreignDoctype)
+PASS foreignPara1.firstChild.compareDocumentPosition(paras[1])
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedPara2)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedPara2.firstChild)
+PASS foreignPara1.firstChild.compareDocumentPosition(testDiv)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedXmlElement)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedForeignTextNode)
+PASS foreignPara1.firstChild.compareDocumentPosition(xmlTextNode)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedXmlTextNode)
+PASS foreignPara1.firstChild.compareDocumentPosition(xmlComment)
+PASS foreignPara1.firstChild.compareDocumentPosition(foreignComment)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedForeignComment)
+PASS foreignPara1.firstChild.compareDocumentPosition(detachedXmlComment)
+PASS foreignPara1.firstChild.compareDocumentPosition(foreignDocfrag)
+PASS foreignPara1.firstChild.compareDocumentPosition(xmlDocfrag)
+PASS foreignPara1.firstChild.compareDocumentPosition(xmlDoctype)
+PASS detachedPara1.contains(null)
+PASS detachedPara1.compareDocumentPosition(paras[0])
+PASS detachedPara1.compareDocumentPosition(paras[0].firstChild)
+PASS detachedPara1.compareDocumentPosition(paras[1].firstChild)
+PASS detachedPara1.compareDocumentPosition(foreignPara1)
+PASS detachedPara1.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedPara1.compareDocumentPosition(detachedPara1)
+PASS detachedPara1.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedPara1.compareDocumentPosition(document)
+PASS detachedPara1.compareDocumentPosition(detachedDiv)
+PASS detachedPara1.compareDocumentPosition(foreignDoc)
+PASS detachedPara1.compareDocumentPosition(foreignPara2)
+PASS detachedPara1.compareDocumentPosition(xmlDoc)
+PASS detachedPara1.compareDocumentPosition(xmlElement)
+PASS detachedPara1.compareDocumentPosition(detachedTextNode)
+PASS detachedPara1.compareDocumentPosition(foreignTextNode)
+PASS detachedPara1.compareDocumentPosition(processingInstruction)
+PASS detachedPara1.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedPara1.compareDocumentPosition(comment)
+PASS detachedPara1.compareDocumentPosition(detachedComment)
+PASS detachedPara1.compareDocumentPosition(docfrag)
+PASS detachedPara1.compareDocumentPosition(doctype)
+PASS detachedPara1.compareDocumentPosition(foreignDoctype)
+PASS detachedPara1.compareDocumentPosition(paras[1])
+PASS detachedPara1.compareDocumentPosition(detachedPara2)
+PASS detachedPara1.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedPara1.compareDocumentPosition(testDiv)
+PASS detachedPara1.compareDocumentPosition(detachedXmlElement)
+PASS detachedPara1.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedPara1.compareDocumentPosition(xmlTextNode)
+PASS detachedPara1.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedPara1.compareDocumentPosition(xmlComment)
+PASS detachedPara1.compareDocumentPosition(foreignComment)
+PASS detachedPara1.compareDocumentPosition(detachedForeignComment)
+PASS detachedPara1.compareDocumentPosition(detachedXmlComment)
+PASS detachedPara1.compareDocumentPosition(foreignDocfrag)
+PASS detachedPara1.compareDocumentPosition(xmlDocfrag)
+PASS detachedPara1.compareDocumentPosition(xmlDoctype)
+PASS detachedPara1.firstChild.contains(null)
+PASS detachedPara1.firstChild.compareDocumentPosition(paras[0])
+PASS detachedPara1.firstChild.compareDocumentPosition(paras[0].firstChild)
+PASS detachedPara1.firstChild.compareDocumentPosition(paras[1].firstChild)
+PASS detachedPara1.firstChild.compareDocumentPosition(foreignPara1)
+PASS detachedPara1.firstChild.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedPara1)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedPara1.firstChild.compareDocumentPosition(document)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedDiv)
+PASS detachedPara1.firstChild.compareDocumentPosition(foreignDoc)
+PASS detachedPara1.firstChild.compareDocumentPosition(foreignPara2)
+PASS detachedPara1.firstChild.compareDocumentPosition(xmlDoc)
+PASS detachedPara1.firstChild.compareDocumentPosition(xmlElement)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedTextNode)
+PASS detachedPara1.firstChild.compareDocumentPosition(foreignTextNode)
+PASS detachedPara1.firstChild.compareDocumentPosition(processingInstruction)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedPara1.firstChild.compareDocumentPosition(comment)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedComment)
+PASS detachedPara1.firstChild.compareDocumentPosition(docfrag)
+PASS detachedPara1.firstChild.compareDocumentPosition(doctype)
+PASS detachedPara1.firstChild.compareDocumentPosition(foreignDoctype)
+PASS detachedPara1.firstChild.compareDocumentPosition(paras[1])
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedPara2)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedPara1.firstChild.compareDocumentPosition(testDiv)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedXmlElement)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedPara1.firstChild.compareDocumentPosition(xmlTextNode)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedPara1.firstChild.compareDocumentPosition(xmlComment)
+PASS detachedPara1.firstChild.compareDocumentPosition(foreignComment)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedForeignComment)
+PASS detachedPara1.firstChild.compareDocumentPosition(detachedXmlComment)
+PASS detachedPara1.firstChild.compareDocumentPosition(foreignDocfrag)
+PASS detachedPara1.firstChild.compareDocumentPosition(xmlDocfrag)
+PASS detachedPara1.firstChild.compareDocumentPosition(xmlDoctype)
+PASS document.contains(null)
+PASS document.compareDocumentPosition(paras[0])
+PASS document.compareDocumentPosition(paras[0].firstChild)
+PASS document.compareDocumentPosition(paras[1].firstChild)
+PASS document.compareDocumentPosition(foreignPara1)
+PASS document.compareDocumentPosition(foreignPara1.firstChild)
+PASS document.compareDocumentPosition(detachedPara1)
+PASS document.compareDocumentPosition(detachedPara1.firstChild)
+PASS document.compareDocumentPosition(document)
+PASS document.compareDocumentPosition(detachedDiv)
+PASS document.compareDocumentPosition(foreignDoc)
+PASS document.compareDocumentPosition(foreignPara2)
+PASS document.compareDocumentPosition(xmlDoc)
+PASS document.compareDocumentPosition(xmlElement)
+PASS document.compareDocumentPosition(detachedTextNode)
+PASS document.compareDocumentPosition(foreignTextNode)
+PASS document.compareDocumentPosition(processingInstruction)
+PASS document.compareDocumentPosition(detachedProcessingInstruction)
+PASS document.compareDocumentPosition(comment)
+PASS document.compareDocumentPosition(detachedComment)
+PASS document.compareDocumentPosition(docfrag)
+PASS document.compareDocumentPosition(doctype)
+PASS document.compareDocumentPosition(foreignDoctype)
+PASS document.compareDocumentPosition(paras[1])
+PASS document.compareDocumentPosition(detachedPara2)
+PASS document.compareDocumentPosition(detachedPara2.firstChild)
+PASS document.compareDocumentPosition(testDiv)
+PASS document.compareDocumentPosition(detachedXmlElement)
+PASS document.compareDocumentPosition(detachedForeignTextNode)
+PASS document.compareDocumentPosition(xmlTextNode)
+PASS document.compareDocumentPosition(detachedXmlTextNode)
+PASS document.compareDocumentPosition(xmlComment)
+PASS document.compareDocumentPosition(foreignComment)
+PASS document.compareDocumentPosition(detachedForeignComment)
+PASS document.compareDocumentPosition(detachedXmlComment)
+PASS document.compareDocumentPosition(foreignDocfrag)
+PASS document.compareDocumentPosition(xmlDocfrag)
+PASS document.compareDocumentPosition(xmlDoctype)
+PASS detachedDiv.contains(null)
+PASS detachedDiv.compareDocumentPosition(paras[0])
+PASS detachedDiv.compareDocumentPosition(paras[0].firstChild)
+PASS detachedDiv.compareDocumentPosition(paras[1].firstChild)
+PASS detachedDiv.compareDocumentPosition(foreignPara1)
+PASS detachedDiv.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedDiv.compareDocumentPosition(detachedPara1)
+PASS detachedDiv.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedDiv.compareDocumentPosition(document)
+PASS detachedDiv.compareDocumentPosition(detachedDiv)
+PASS detachedDiv.compareDocumentPosition(foreignDoc)
+PASS detachedDiv.compareDocumentPosition(foreignPara2)
+PASS detachedDiv.compareDocumentPosition(xmlDoc)
+PASS detachedDiv.compareDocumentPosition(xmlElement)
+PASS detachedDiv.compareDocumentPosition(detachedTextNode)
+PASS detachedDiv.compareDocumentPosition(foreignTextNode)
+PASS detachedDiv.compareDocumentPosition(processingInstruction)
+PASS detachedDiv.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedDiv.compareDocumentPosition(comment)
+PASS detachedDiv.compareDocumentPosition(detachedComment)
+PASS detachedDiv.compareDocumentPosition(docfrag)
+PASS detachedDiv.compareDocumentPosition(doctype)
+PASS detachedDiv.compareDocumentPosition(foreignDoctype)
+PASS detachedDiv.compareDocumentPosition(paras[1])
+PASS detachedDiv.compareDocumentPosition(detachedPara2)
+PASS detachedDiv.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedDiv.compareDocumentPosition(testDiv)
+PASS detachedDiv.compareDocumentPosition(detachedXmlElement)
+PASS detachedDiv.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedDiv.compareDocumentPosition(xmlTextNode)
+PASS detachedDiv.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedDiv.compareDocumentPosition(xmlComment)
+PASS detachedDiv.compareDocumentPosition(foreignComment)
+PASS detachedDiv.compareDocumentPosition(detachedForeignComment)
+PASS detachedDiv.compareDocumentPosition(detachedXmlComment)
+PASS detachedDiv.compareDocumentPosition(foreignDocfrag)
+PASS detachedDiv.compareDocumentPosition(xmlDocfrag)
+PASS detachedDiv.compareDocumentPosition(xmlDoctype)
+PASS foreignDoc.contains(null)
+PASS foreignDoc.compareDocumentPosition(paras[0])
+PASS foreignDoc.compareDocumentPosition(paras[0].firstChild)
+PASS foreignDoc.compareDocumentPosition(paras[1].firstChild)
+PASS foreignDoc.compareDocumentPosition(foreignPara1)
+PASS foreignDoc.compareDocumentPosition(foreignPara1.firstChild)
+PASS foreignDoc.compareDocumentPosition(detachedPara1)
+PASS foreignDoc.compareDocumentPosition(detachedPara1.firstChild)
+PASS foreignDoc.compareDocumentPosition(document)
+PASS foreignDoc.compareDocumentPosition(detachedDiv)
+PASS foreignDoc.compareDocumentPosition(foreignDoc)
+PASS foreignDoc.compareDocumentPosition(foreignPara2)
+PASS foreignDoc.compareDocumentPosition(xmlDoc)
+PASS foreignDoc.compareDocumentPosition(xmlElement)
+PASS foreignDoc.compareDocumentPosition(detachedTextNode)
+PASS foreignDoc.compareDocumentPosition(foreignTextNode)
+PASS foreignDoc.compareDocumentPosition(processingInstruction)
+PASS foreignDoc.compareDocumentPosition(detachedProcessingInstruction)
+PASS foreignDoc.compareDocumentPosition(comment)
+PASS foreignDoc.compareDocumentPosition(detachedComment)
+PASS foreignDoc.compareDocumentPosition(docfrag)
+PASS foreignDoc.compareDocumentPosition(doctype)
+PASS foreignDoc.compareDocumentPosition(foreignDoctype)
+PASS foreignDoc.compareDocumentPosition(paras[1])
+PASS foreignDoc.compareDocumentPosition(detachedPara2)
+PASS foreignDoc.compareDocumentPosition(detachedPara2.firstChild)
+PASS foreignDoc.compareDocumentPosition(testDiv)
+PASS foreignDoc.compareDocumentPosition(detachedXmlElement)
+PASS foreignDoc.compareDocumentPosition(detachedForeignTextNode)
+PASS foreignDoc.compareDocumentPosition(xmlTextNode)
+PASS foreignDoc.compareDocumentPosition(detachedXmlTextNode)
+PASS foreignDoc.compareDocumentPosition(xmlComment)
+PASS foreignDoc.compareDocumentPosition(foreignComment)
+PASS foreignDoc.compareDocumentPosition(detachedForeignComment)
+PASS foreignDoc.compareDocumentPosition(detachedXmlComment)
+PASS foreignDoc.compareDocumentPosition(foreignDocfrag)
+PASS foreignDoc.compareDocumentPosition(xmlDocfrag)
+PASS foreignDoc.compareDocumentPosition(xmlDoctype)
+PASS foreignPara2.contains(null)
+PASS foreignPara2.compareDocumentPosition(paras[0])
+PASS foreignPara2.compareDocumentPosition(paras[0].firstChild)
+PASS foreignPara2.compareDocumentPosition(paras[1].firstChild)
+PASS foreignPara2.compareDocumentPosition(foreignPara1)
+PASS foreignPara2.compareDocumentPosition(foreignPara1.firstChild)
+PASS foreignPara2.compareDocumentPosition(detachedPara1)
+PASS foreignPara2.compareDocumentPosition(detachedPara1.firstChild)
+PASS foreignPara2.compareDocumentPosition(document)
+PASS foreignPara2.compareDocumentPosition(detachedDiv)
+PASS foreignPara2.compareDocumentPosition(foreignDoc)
+PASS foreignPara2.compareDocumentPosition(foreignPara2)
+PASS foreignPara2.compareDocumentPosition(xmlDoc)
+PASS foreignPara2.compareDocumentPosition(xmlElement)
+PASS foreignPara2.compareDocumentPosition(detachedTextNode)
+PASS foreignPara2.compareDocumentPosition(foreignTextNode)
+PASS foreignPara2.compareDocumentPosition(processingInstruction)
+PASS foreignPara2.compareDocumentPosition(detachedProcessingInstruction)
+PASS foreignPara2.compareDocumentPosition(comment)
+PASS foreignPara2.compareDocumentPosition(detachedComment)
+PASS foreignPara2.compareDocumentPosition(docfrag)
+PASS foreignPara2.compareDocumentPosition(doctype)
+PASS foreignPara2.compareDocumentPosition(foreignDoctype)
+PASS foreignPara2.compareDocumentPosition(paras[1])
+PASS foreignPara2.compareDocumentPosition(detachedPara2)
+PASS foreignPara2.compareDocumentPosition(detachedPara2.firstChild)
+PASS foreignPara2.compareDocumentPosition(testDiv)
+PASS foreignPara2.compareDocumentPosition(detachedXmlElement)
+PASS foreignPara2.compareDocumentPosition(detachedForeignTextNode)
+PASS foreignPara2.compareDocumentPosition(xmlTextNode)
+PASS foreignPara2.compareDocumentPosition(detachedXmlTextNode)
+PASS foreignPara2.compareDocumentPosition(xmlComment)
+PASS foreignPara2.compareDocumentPosition(foreignComment)
+PASS foreignPara2.compareDocumentPosition(detachedForeignComment)
+PASS foreignPara2.compareDocumentPosition(detachedXmlComment)
+PASS foreignPara2.compareDocumentPosition(foreignDocfrag)
+PASS foreignPara2.compareDocumentPosition(xmlDocfrag)
+PASS foreignPara2.compareDocumentPosition(xmlDoctype)
+PASS xmlDoc.contains(null)
+PASS xmlDoc.compareDocumentPosition(paras[0])
+PASS xmlDoc.compareDocumentPosition(paras[0].firstChild)
+PASS xmlDoc.compareDocumentPosition(paras[1].firstChild)
+PASS xmlDoc.compareDocumentPosition(foreignPara1)
+PASS xmlDoc.compareDocumentPosition(foreignPara1.firstChild)
+PASS xmlDoc.compareDocumentPosition(detachedPara1)
+PASS xmlDoc.compareDocumentPosition(detachedPara1.firstChild)
+PASS xmlDoc.compareDocumentPosition(document)
+PASS xmlDoc.compareDocumentPosition(detachedDiv)
+PASS xmlDoc.compareDocumentPosition(foreignDoc)
+PASS xmlDoc.compareDocumentPosition(foreignPara2)
+PASS xmlDoc.compareDocumentPosition(xmlDoc)
+PASS xmlDoc.compareDocumentPosition(xmlElement)
+PASS xmlDoc.compareDocumentPosition(detachedTextNode)
+PASS xmlDoc.compareDocumentPosition(foreignTextNode)
+PASS xmlDoc.compareDocumentPosition(processingInstruction)
+PASS xmlDoc.compareDocumentPosition(detachedProcessingInstruction)
+PASS xmlDoc.compareDocumentPosition(comment)
+PASS xmlDoc.compareDocumentPosition(detachedComment)
+PASS xmlDoc.compareDocumentPosition(docfrag)
+PASS xmlDoc.compareDocumentPosition(doctype)
+PASS xmlDoc.compareDocumentPosition(foreignDoctype)
+PASS xmlDoc.compareDocumentPosition(paras[1])
+PASS xmlDoc.compareDocumentPosition(detachedPara2)
+PASS xmlDoc.compareDocumentPosition(detachedPara2.firstChild)
+PASS xmlDoc.compareDocumentPosition(testDiv)
+PASS xmlDoc.compareDocumentPosition(detachedXmlElement)
+PASS xmlDoc.compareDocumentPosition(detachedForeignTextNode)
+PASS xmlDoc.compareDocumentPosition(xmlTextNode)
+PASS xmlDoc.compareDocumentPosition(detachedXmlTextNode)
+PASS xmlDoc.compareDocumentPosition(xmlComment)
+PASS xmlDoc.compareDocumentPosition(foreignComment)
+PASS xmlDoc.compareDocumentPosition(detachedForeignComment)
+PASS xmlDoc.compareDocumentPosition(detachedXmlComment)
+PASS xmlDoc.compareDocumentPosition(foreignDocfrag)
+PASS xmlDoc.compareDocumentPosition(xmlDocfrag)
+PASS xmlDoc.compareDocumentPosition(xmlDoctype)
+PASS xmlElement.contains(null)
+PASS xmlElement.compareDocumentPosition(paras[0])
+PASS xmlElement.compareDocumentPosition(paras[0].firstChild)
+PASS xmlElement.compareDocumentPosition(paras[1].firstChild)
+PASS xmlElement.compareDocumentPosition(foreignPara1)
+PASS xmlElement.compareDocumentPosition(foreignPara1.firstChild)
+PASS xmlElement.compareDocumentPosition(detachedPara1)
+PASS xmlElement.compareDocumentPosition(detachedPara1.firstChild)
+PASS xmlElement.compareDocumentPosition(document)
+PASS xmlElement.compareDocumentPosition(detachedDiv)
+PASS xmlElement.compareDocumentPosition(foreignDoc)
+PASS xmlElement.compareDocumentPosition(foreignPara2)
+PASS xmlElement.compareDocumentPosition(xmlDoc)
+PASS xmlElement.compareDocumentPosition(xmlElement)
+PASS xmlElement.compareDocumentPosition(detachedTextNode)
+PASS xmlElement.compareDocumentPosition(foreignTextNode)
+PASS xmlElement.compareDocumentPosition(processingInstruction)
+PASS xmlElement.compareDocumentPosition(detachedProcessingInstruction)
+PASS xmlElement.compareDocumentPosition(comment)
+PASS xmlElement.compareDocumentPosition(detachedComment)
+PASS xmlElement.compareDocumentPosition(docfrag)
+PASS xmlElement.compareDocumentPosition(doctype)
+PASS xmlElement.compareDocumentPosition(foreignDoctype)
+PASS xmlElement.compareDocumentPosition(paras[1])
+PASS xmlElement.compareDocumentPosition(detachedPara2)
+PASS xmlElement.compareDocumentPosition(detachedPara2.firstChild)
+PASS xmlElement.compareDocumentPosition(testDiv)
+PASS xmlElement.compareDocumentPosition(detachedXmlElement)
+PASS xmlElement.compareDocumentPosition(detachedForeignTextNode)
+PASS xmlElement.compareDocumentPosition(xmlTextNode)
+PASS xmlElement.compareDocumentPosition(detachedXmlTextNode)
+PASS xmlElement.compareDocumentPosition(xmlComment)
+PASS xmlElement.compareDocumentPosition(foreignComment)
+PASS xmlElement.compareDocumentPosition(detachedForeignComment)
+PASS xmlElement.compareDocumentPosition(detachedXmlComment)
+PASS xmlElement.compareDocumentPosition(foreignDocfrag)
+PASS xmlElement.compareDocumentPosition(xmlDocfrag)
+PASS xmlElement.compareDocumentPosition(xmlDoctype)
+PASS detachedTextNode.contains(null)
+PASS detachedTextNode.compareDocumentPosition(paras[0])
+PASS detachedTextNode.compareDocumentPosition(paras[0].firstChild)
+PASS detachedTextNode.compareDocumentPosition(paras[1].firstChild)
+PASS detachedTextNode.compareDocumentPosition(foreignPara1)
+PASS detachedTextNode.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedTextNode.compareDocumentPosition(detachedPara1)
+PASS detachedTextNode.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedTextNode.compareDocumentPosition(document)
+PASS detachedTextNode.compareDocumentPosition(detachedDiv)
+PASS detachedTextNode.compareDocumentPosition(foreignDoc)
+PASS detachedTextNode.compareDocumentPosition(foreignPara2)
+PASS detachedTextNode.compareDocumentPosition(xmlDoc)
+PASS detachedTextNode.compareDocumentPosition(xmlElement)
+PASS detachedTextNode.compareDocumentPosition(detachedTextNode)
+PASS detachedTextNode.compareDocumentPosition(foreignTextNode)
+PASS detachedTextNode.compareDocumentPosition(processingInstruction)
+PASS detachedTextNode.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedTextNode.compareDocumentPosition(comment)
+PASS detachedTextNode.compareDocumentPosition(detachedComment)
+PASS detachedTextNode.compareDocumentPosition(docfrag)
+PASS detachedTextNode.compareDocumentPosition(doctype)
+PASS detachedTextNode.compareDocumentPosition(foreignDoctype)
+PASS detachedTextNode.compareDocumentPosition(paras[1])
+PASS detachedTextNode.compareDocumentPosition(detachedPara2)
+PASS detachedTextNode.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedTextNode.compareDocumentPosition(testDiv)
+PASS detachedTextNode.compareDocumentPosition(detachedXmlElement)
+PASS detachedTextNode.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedTextNode.compareDocumentPosition(xmlTextNode)
+PASS detachedTextNode.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedTextNode.compareDocumentPosition(xmlComment)
+PASS detachedTextNode.compareDocumentPosition(foreignComment)
+PASS detachedTextNode.compareDocumentPosition(detachedForeignComment)
+PASS detachedTextNode.compareDocumentPosition(detachedXmlComment)
+PASS detachedTextNode.compareDocumentPosition(foreignDocfrag)
+PASS detachedTextNode.compareDocumentPosition(xmlDocfrag)
+PASS detachedTextNode.compareDocumentPosition(xmlDoctype)
+PASS foreignTextNode.contains(null)
+PASS foreignTextNode.compareDocumentPosition(paras[0])
+PASS foreignTextNode.compareDocumentPosition(paras[0].firstChild)
+PASS foreignTextNode.compareDocumentPosition(paras[1].firstChild)
+PASS foreignTextNode.compareDocumentPosition(foreignPara1)
+PASS foreignTextNode.compareDocumentPosition(foreignPara1.firstChild)
+PASS foreignTextNode.compareDocumentPosition(detachedPara1)
+PASS foreignTextNode.compareDocumentPosition(detachedPara1.firstChild)
+PASS foreignTextNode.compareDocumentPosition(document)
+PASS foreignTextNode.compareDocumentPosition(detachedDiv)
+PASS foreignTextNode.compareDocumentPosition(foreignDoc)
+PASS foreignTextNode.compareDocumentPosition(foreignPara2)
+PASS foreignTextNode.compareDocumentPosition(xmlDoc)
+PASS foreignTextNode.compareDocumentPosition(xmlElement)
+PASS foreignTextNode.compareDocumentPosition(detachedTextNode)
+PASS foreignTextNode.compareDocumentPosition(foreignTextNode)
+PASS foreignTextNode.compareDocumentPosition(processingInstruction)
+PASS foreignTextNode.compareDocumentPosition(detachedProcessingInstruction)
+PASS foreignTextNode.compareDocumentPosition(comment)
+PASS foreignTextNode.compareDocumentPosition(detachedComment)
+PASS foreignTextNode.compareDocumentPosition(docfrag)
+PASS foreignTextNode.compareDocumentPosition(doctype)
+PASS foreignTextNode.compareDocumentPosition(foreignDoctype)
+PASS foreignTextNode.compareDocumentPosition(paras[1])
+PASS foreignTextNode.compareDocumentPosition(detachedPara2)
+PASS foreignTextNode.compareDocumentPosition(detachedPara2.firstChild)
+PASS foreignTextNode.compareDocumentPosition(testDiv)
+PASS foreignTextNode.compareDocumentPosition(detachedXmlElement)
+PASS foreignTextNode.compareDocumentPosition(detachedForeignTextNode)
+PASS foreignTextNode.compareDocumentPosition(xmlTextNode)
+PASS foreignTextNode.compareDocumentPosition(detachedXmlTextNode)
+PASS foreignTextNode.compareDocumentPosition(xmlComment)
+PASS foreignTextNode.compareDocumentPosition(foreignComment)
+PASS foreignTextNode.compareDocumentPosition(detachedForeignComment)
+PASS foreignTextNode.compareDocumentPosition(detachedXmlComment)
+PASS foreignTextNode.compareDocumentPosition(foreignDocfrag)
+PASS foreignTextNode.compareDocumentPosition(xmlDocfrag)
+PASS foreignTextNode.compareDocumentPosition(xmlDoctype)
+PASS processingInstruction.contains(null)
+PASS processingInstruction.compareDocumentPosition(paras[0])
+PASS processingInstruction.compareDocumentPosition(paras[0].firstChild)
+PASS processingInstruction.compareDocumentPosition(paras[1].firstChild)
+PASS processingInstruction.compareDocumentPosition(foreignPara1)
+PASS processingInstruction.compareDocumentPosition(foreignPara1.firstChild)
+PASS processingInstruction.compareDocumentPosition(detachedPara1)
+PASS processingInstruction.compareDocumentPosition(detachedPara1.firstChild)
+PASS processingInstruction.compareDocumentPosition(document)
+PASS processingInstruction.compareDocumentPosition(detachedDiv)
+PASS processingInstruction.compareDocumentPosition(foreignDoc)
+PASS processingInstruction.compareDocumentPosition(foreignPara2)
+PASS processingInstruction.compareDocumentPosition(xmlDoc)
+PASS processingInstruction.compareDocumentPosition(xmlElement)
+PASS processingInstruction.compareDocumentPosition(detachedTextNode)
+PASS processingInstruction.compareDocumentPosition(foreignTextNode)
+PASS processingInstruction.compareDocumentPosition(processingInstruction)
+PASS processingInstruction.compareDocumentPosition(detachedProcessingInstruction)
+PASS processingInstruction.compareDocumentPosition(comment)
+PASS processingInstruction.compareDocumentPosition(detachedComment)
+PASS processingInstruction.compareDocumentPosition(docfrag)
+PASS processingInstruction.compareDocumentPosition(doctype)
+PASS processingInstruction.compareDocumentPosition(foreignDoctype)
+PASS processingInstruction.compareDocumentPosition(paras[1])
+PASS processingInstruction.compareDocumentPosition(detachedPara2)
+PASS processingInstruction.compareDocumentPosition(detachedPara2.firstChild)
+PASS processingInstruction.compareDocumentPosition(testDiv)
+PASS processingInstruction.compareDocumentPosition(detachedXmlElement)
+PASS processingInstruction.compareDocumentPosition(detachedForeignTextNode)
+PASS processingInstruction.compareDocumentPosition(xmlTextNode)
+PASS processingInstruction.compareDocumentPosition(detachedXmlTextNode)
+PASS processingInstruction.compareDocumentPosition(xmlComment)
+PASS processingInstruction.compareDocumentPosition(foreignComment)
+PASS processingInstruction.compareDocumentPosition(detachedForeignComment)
+PASS processingInstruction.compareDocumentPosition(detachedXmlComment)
+PASS processingInstruction.compareDocumentPosition(foreignDocfrag)
+PASS processingInstruction.compareDocumentPosition(xmlDocfrag)
+PASS processingInstruction.compareDocumentPosition(xmlDoctype)
+PASS detachedProcessingInstruction.contains(null)
+PASS detachedProcessingInstruction.compareDocumentPosition(paras[0])
+PASS detachedProcessingInstruction.compareDocumentPosition(paras[0].firstChild)
+PASS detachedProcessingInstruction.compareDocumentPosition(paras[1].firstChild)
+PASS detachedProcessingInstruction.compareDocumentPosition(foreignPara1)
+PASS detachedProcessingInstruction.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedPara1)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedProcessingInstruction.compareDocumentPosition(document)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedDiv)
+PASS detachedProcessingInstruction.compareDocumentPosition(foreignDoc)
+PASS detachedProcessingInstruction.compareDocumentPosition(foreignPara2)
+PASS detachedProcessingInstruction.compareDocumentPosition(xmlDoc)
+PASS detachedProcessingInstruction.compareDocumentPosition(xmlElement)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedTextNode)
+PASS detachedProcessingInstruction.compareDocumentPosition(foreignTextNode)
+PASS detachedProcessingInstruction.compareDocumentPosition(processingInstruction)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedProcessingInstruction.compareDocumentPosition(comment)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedComment)
+PASS detachedProcessingInstruction.compareDocumentPosition(docfrag)
+PASS detachedProcessingInstruction.compareDocumentPosition(doctype)
+PASS detachedProcessingInstruction.compareDocumentPosition(foreignDoctype)
+PASS detachedProcessingInstruction.compareDocumentPosition(paras[1])
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedPara2)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedProcessingInstruction.compareDocumentPosition(testDiv)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedXmlElement)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedProcessingInstruction.compareDocumentPosition(xmlTextNode)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedProcessingInstruction.compareDocumentPosition(xmlComment)
+PASS detachedProcessingInstruction.compareDocumentPosition(foreignComment)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedForeignComment)
+PASS detachedProcessingInstruction.compareDocumentPosition(detachedXmlComment)
+PASS detachedProcessingInstruction.compareDocumentPosition(foreignDocfrag)
+PASS detachedProcessingInstruction.compareDocumentPosition(xmlDocfrag)
+PASS detachedProcessingInstruction.compareDocumentPosition(xmlDoctype)
+PASS comment.contains(null)
+PASS comment.compareDocumentPosition(paras[0])
+PASS comment.compareDocumentPosition(paras[0].firstChild)
+PASS comment.compareDocumentPosition(paras[1].firstChild)
+PASS comment.compareDocumentPosition(foreignPara1)
+PASS comment.compareDocumentPosition(foreignPara1.firstChild)
+PASS comment.compareDocumentPosition(detachedPara1)
+PASS comment.compareDocumentPosition(detachedPara1.firstChild)
+PASS comment.compareDocumentPosition(document)
+PASS comment.compareDocumentPosition(detachedDiv)
+PASS comment.compareDocumentPosition(foreignDoc)
+PASS comment.compareDocumentPosition(foreignPara2)
+PASS comment.compareDocumentPosition(xmlDoc)
+PASS comment.compareDocumentPosition(xmlElement)
+PASS comment.compareDocumentPosition(detachedTextNode)
+PASS comment.compareDocumentPosition(foreignTextNode)
+PASS comment.compareDocumentPosition(processingInstruction)
+PASS comment.compareDocumentPosition(detachedProcessingInstruction)
+PASS comment.compareDocumentPosition(comment)
+PASS comment.compareDocumentPosition(detachedComment)
+PASS comment.compareDocumentPosition(docfrag)
+PASS comment.compareDocumentPosition(doctype)
+PASS comment.compareDocumentPosition(foreignDoctype)
+PASS comment.compareDocumentPosition(paras[1])
+PASS comment.compareDocumentPosition(detachedPara2)
+PASS comment.compareDocumentPosition(detachedPara2.firstChild)
+PASS comment.compareDocumentPosition(testDiv)
+PASS comment.compareDocumentPosition(detachedXmlElement)
+PASS comment.compareDocumentPosition(detachedForeignTextNode)
+PASS comment.compareDocumentPosition(xmlTextNode)
+PASS comment.compareDocumentPosition(detachedXmlTextNode)
+PASS comment.compareDocumentPosition(xmlComment)
+PASS comment.compareDocumentPosition(foreignComment)
+PASS comment.compareDocumentPosition(detachedForeignComment)
+PASS comment.compareDocumentPosition(detachedXmlComment)
+PASS comment.compareDocumentPosition(foreignDocfrag)
+PASS comment.compareDocumentPosition(xmlDocfrag)
+PASS comment.compareDocumentPosition(xmlDoctype)
+PASS detachedComment.contains(null)
+PASS detachedComment.compareDocumentPosition(paras[0])
+PASS detachedComment.compareDocumentPosition(paras[0].firstChild)
+PASS detachedComment.compareDocumentPosition(paras[1].firstChild)
+PASS detachedComment.compareDocumentPosition(foreignPara1)
+PASS detachedComment.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedComment.compareDocumentPosition(detachedPara1)
+PASS detachedComment.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedComment.compareDocumentPosition(document)
+PASS detachedComment.compareDocumentPosition(detachedDiv)
+PASS detachedComment.compareDocumentPosition(foreignDoc)
+PASS detachedComment.compareDocumentPosition(foreignPara2)
+PASS detachedComment.compareDocumentPosition(xmlDoc)
+PASS detachedComment.compareDocumentPosition(xmlElement)
+PASS detachedComment.compareDocumentPosition(detachedTextNode)
+PASS detachedComment.compareDocumentPosition(foreignTextNode)
+PASS detachedComment.compareDocumentPosition(processingInstruction)
+PASS detachedComment.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedComment.compareDocumentPosition(comment)
+PASS detachedComment.compareDocumentPosition(detachedComment)
+PASS detachedComment.compareDocumentPosition(docfrag)
+PASS detachedComment.compareDocumentPosition(doctype)
+PASS detachedComment.compareDocumentPosition(foreignDoctype)
+PASS detachedComment.compareDocumentPosition(paras[1])
+PASS detachedComment.compareDocumentPosition(detachedPara2)
+PASS detachedComment.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedComment.compareDocumentPosition(testDiv)
+PASS detachedComment.compareDocumentPosition(detachedXmlElement)
+PASS detachedComment.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedComment.compareDocumentPosition(xmlTextNode)
+PASS detachedComment.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedComment.compareDocumentPosition(xmlComment)
+PASS detachedComment.compareDocumentPosition(foreignComment)
+PASS detachedComment.compareDocumentPosition(detachedForeignComment)
+PASS detachedComment.compareDocumentPosition(detachedXmlComment)
+PASS detachedComment.compareDocumentPosition(foreignDocfrag)
+PASS detachedComment.compareDocumentPosition(xmlDocfrag)
+PASS detachedComment.compareDocumentPosition(xmlDoctype)
+PASS docfrag.contains(null)
+PASS docfrag.compareDocumentPosition(paras[0])
+PASS docfrag.compareDocumentPosition(paras[0].firstChild)
+PASS docfrag.compareDocumentPosition(paras[1].firstChild)
+PASS docfrag.compareDocumentPosition(foreignPara1)
+PASS docfrag.compareDocumentPosition(foreignPara1.firstChild)
+PASS docfrag.compareDocumentPosition(detachedPara1)
+PASS docfrag.compareDocumentPosition(detachedPara1.firstChild)
+PASS docfrag.compareDocumentPosition(document)
+PASS docfrag.compareDocumentPosition(detachedDiv)
+PASS docfrag.compareDocumentPosition(foreignDoc)
+PASS docfrag.compareDocumentPosition(foreignPara2)
+PASS docfrag.compareDocumentPosition(xmlDoc)
+PASS docfrag.compareDocumentPosition(xmlElement)
+PASS docfrag.compareDocumentPosition(detachedTextNode)
+PASS docfrag.compareDocumentPosition(foreignTextNode)
+PASS docfrag.compareDocumentPosition(processingInstruction)
+PASS docfrag.compareDocumentPosition(detachedProcessingInstruction)
+PASS docfrag.compareDocumentPosition(comment)
+PASS docfrag.compareDocumentPosition(detachedComment)
+PASS docfrag.compareDocumentPosition(docfrag)
+PASS docfrag.compareDocumentPosition(doctype)
+PASS docfrag.compareDocumentPosition(foreignDoctype)
+PASS docfrag.compareDocumentPosition(paras[1])
+PASS docfrag.compareDocumentPosition(detachedPara2)
+PASS docfrag.compareDocumentPosition(detachedPara2.firstChild)
+PASS docfrag.compareDocumentPosition(testDiv)
+PASS docfrag.compareDocumentPosition(detachedXmlElement)
+PASS docfrag.compareDocumentPosition(detachedForeignTextNode)
+PASS docfrag.compareDocumentPosition(xmlTextNode)
+PASS docfrag.compareDocumentPosition(detachedXmlTextNode)
+PASS docfrag.compareDocumentPosition(xmlComment)
+PASS docfrag.compareDocumentPosition(foreignComment)
+PASS docfrag.compareDocumentPosition(detachedForeignComment)
+PASS docfrag.compareDocumentPosition(detachedXmlComment)
+PASS docfrag.compareDocumentPosition(foreignDocfrag)
+PASS docfrag.compareDocumentPosition(xmlDocfrag)
+PASS docfrag.compareDocumentPosition(xmlDoctype)
+PASS doctype.contains(null)
+PASS doctype.compareDocumentPosition(paras[0])
+PASS doctype.compareDocumentPosition(paras[0].firstChild)
+PASS doctype.compareDocumentPosition(paras[1].firstChild)
+PASS doctype.compareDocumentPosition(foreignPara1)
+PASS doctype.compareDocumentPosition(foreignPara1.firstChild)
+PASS doctype.compareDocumentPosition(detachedPara1)
+PASS doctype.compareDocumentPosition(detachedPara1.firstChild)
+PASS doctype.compareDocumentPosition(document)
+PASS doctype.compareDocumentPosition(detachedDiv)
+PASS doctype.compareDocumentPosition(foreignDoc)
+PASS doctype.compareDocumentPosition(foreignPara2)
+PASS doctype.compareDocumentPosition(xmlDoc)
+PASS doctype.compareDocumentPosition(xmlElement)
+PASS doctype.compareDocumentPosition(detachedTextNode)
+PASS doctype.compareDocumentPosition(foreignTextNode)
+PASS doctype.compareDocumentPosition(processingInstruction)
+PASS doctype.compareDocumentPosition(detachedProcessingInstruction)
+PASS doctype.compareDocumentPosition(comment)
+PASS doctype.compareDocumentPosition(detachedComment)
+PASS doctype.compareDocumentPosition(docfrag)
+PASS doctype.compareDocumentPosition(doctype)
+PASS doctype.compareDocumentPosition(foreignDoctype)
+PASS doctype.compareDocumentPosition(paras[1])
+PASS doctype.compareDocumentPosition(detachedPara2)
+PASS doctype.compareDocumentPosition(detachedPara2.firstChild)
+PASS doctype.compareDocumentPosition(testDiv)
+PASS doctype.compareDocumentPosition(detachedXmlElement)
+PASS doctype.compareDocumentPosition(detachedForeignTextNode)
+PASS doctype.compareDocumentPosition(xmlTextNode)
+PASS doctype.compareDocumentPosition(detachedXmlTextNode)
+PASS doctype.compareDocumentPosition(xmlComment)
+PASS doctype.compareDocumentPosition(foreignComment)
+PASS doctype.compareDocumentPosition(detachedForeignComment)
+PASS doctype.compareDocumentPosition(detachedXmlComment)
+PASS doctype.compareDocumentPosition(foreignDocfrag)
+PASS doctype.compareDocumentPosition(xmlDocfrag)
+PASS doctype.compareDocumentPosition(xmlDoctype)
+PASS foreignDoctype.contains(null)
+PASS foreignDoctype.compareDocumentPosition(paras[0])
+PASS foreignDoctype.compareDocumentPosition(paras[0].firstChild)
+PASS foreignDoctype.compareDocumentPosition(paras[1].firstChild)
+PASS foreignDoctype.compareDocumentPosition(foreignPara1)
+PASS foreignDoctype.compareDocumentPosition(foreignPara1.firstChild)
+PASS foreignDoctype.compareDocumentPosition(detachedPara1)
+PASS foreignDoctype.compareDocumentPosition(detachedPara1.firstChild)
+PASS foreignDoctype.compareDocumentPosition(document)
+PASS foreignDoctype.compareDocumentPosition(detachedDiv)
+PASS foreignDoctype.compareDocumentPosition(foreignDoc)
+PASS foreignDoctype.compareDocumentPosition(foreignPara2)
+PASS foreignDoctype.compareDocumentPosition(xmlDoc)
+PASS foreignDoctype.compareDocumentPosition(xmlElement)
+PASS foreignDoctype.compareDocumentPosition(detachedTextNode)
+PASS foreignDoctype.compareDocumentPosition(foreignTextNode)
+PASS foreignDoctype.compareDocumentPosition(processingInstruction)
+PASS foreignDoctype.compareDocumentPosition(detachedProcessingInstruction)
+PASS foreignDoctype.compareDocumentPosition(comment)
+PASS foreignDoctype.compareDocumentPosition(detachedComment)
+PASS foreignDoctype.compareDocumentPosition(docfrag)
+PASS foreignDoctype.compareDocumentPosition(doctype)
+PASS foreignDoctype.compareDocumentPosition(foreignDoctype)
+PASS foreignDoctype.compareDocumentPosition(paras[1])
+PASS foreignDoctype.compareDocumentPosition(detachedPara2)
+PASS foreignDoctype.compareDocumentPosition(detachedPara2.firstChild)
+PASS foreignDoctype.compareDocumentPosition(testDiv)
+PASS foreignDoctype.compareDocumentPosition(detachedXmlElement)
+PASS foreignDoctype.compareDocumentPosition(detachedForeignTextNode)
+PASS foreignDoctype.compareDocumentPosition(xmlTextNode)
+PASS foreignDoctype.compareDocumentPosition(detachedXmlTextNode)
+PASS foreignDoctype.compareDocumentPosition(xmlComment)
+PASS foreignDoctype.compareDocumentPosition(foreignComment)
+PASS foreignDoctype.compareDocumentPosition(detachedForeignComment)
+PASS foreignDoctype.compareDocumentPosition(detachedXmlComment)
+PASS foreignDoctype.compareDocumentPosition(foreignDocfrag)
+PASS foreignDoctype.compareDocumentPosition(xmlDocfrag)
+PASS foreignDoctype.compareDocumentPosition(xmlDoctype)
+PASS paras[1].contains(null)
+PASS paras[1].compareDocumentPosition(paras[0])
+PASS paras[1].compareDocumentPosition(paras[0].firstChild)
+PASS paras[1].compareDocumentPosition(paras[1].firstChild)
+PASS paras[1].compareDocumentPosition(foreignPara1)
+PASS paras[1].compareDocumentPosition(foreignPara1.firstChild)
+PASS paras[1].compareDocumentPosition(detachedPara1)
+PASS paras[1].compareDocumentPosition(detachedPara1.firstChild)
+PASS paras[1].compareDocumentPosition(document)
+PASS paras[1].compareDocumentPosition(detachedDiv)
+PASS paras[1].compareDocumentPosition(foreignDoc)
+PASS paras[1].compareDocumentPosition(foreignPara2)
+PASS paras[1].compareDocumentPosition(xmlDoc)
+PASS paras[1].compareDocumentPosition(xmlElement)
+PASS paras[1].compareDocumentPosition(detachedTextNode)
+PASS paras[1].compareDocumentPosition(foreignTextNode)
+PASS paras[1].compareDocumentPosition(processingInstruction)
+PASS paras[1].compareDocumentPosition(detachedProcessingInstruction)
+PASS paras[1].compareDocumentPosition(comment)
+PASS paras[1].compareDocumentPosition(detachedComment)
+PASS paras[1].compareDocumentPosition(docfrag)
+PASS paras[1].compareDocumentPosition(doctype)
+PASS paras[1].compareDocumentPosition(foreignDoctype)
+PASS paras[1].compareDocumentPosition(paras[1])
+PASS paras[1].compareDocumentPosition(detachedPara2)
+PASS paras[1].compareDocumentPosition(detachedPara2.firstChild)
+PASS paras[1].compareDocumentPosition(testDiv)
+PASS paras[1].compareDocumentPosition(detachedXmlElement)
+PASS paras[1].compareDocumentPosition(detachedForeignTextNode)
+PASS paras[1].compareDocumentPosition(xmlTextNode)
+PASS paras[1].compareDocumentPosition(detachedXmlTextNode)
+PASS paras[1].compareDocumentPosition(xmlComment)
+PASS paras[1].compareDocumentPosition(foreignComment)
+PASS paras[1].compareDocumentPosition(detachedForeignComment)
+PASS paras[1].compareDocumentPosition(detachedXmlComment)
+PASS paras[1].compareDocumentPosition(foreignDocfrag)
+PASS paras[1].compareDocumentPosition(xmlDocfrag)
+PASS paras[1].compareDocumentPosition(xmlDoctype)
+PASS detachedPara2.contains(null)
+PASS detachedPara2.compareDocumentPosition(paras[0])
+PASS detachedPara2.compareDocumentPosition(paras[0].firstChild)
+PASS detachedPara2.compareDocumentPosition(paras[1].firstChild)
+PASS detachedPara2.compareDocumentPosition(foreignPara1)
+PASS detachedPara2.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedPara2.compareDocumentPosition(detachedPara1)
+PASS detachedPara2.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedPara2.compareDocumentPosition(document)
+PASS detachedPara2.compareDocumentPosition(detachedDiv)
+PASS detachedPara2.compareDocumentPosition(foreignDoc)
+PASS detachedPara2.compareDocumentPosition(foreignPara2)
+PASS detachedPara2.compareDocumentPosition(xmlDoc)
+PASS detachedPara2.compareDocumentPosition(xmlElement)
+PASS detachedPara2.compareDocumentPosition(detachedTextNode)
+PASS detachedPara2.compareDocumentPosition(foreignTextNode)
+PASS detachedPara2.compareDocumentPosition(processingInstruction)
+PASS detachedPara2.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedPara2.compareDocumentPosition(comment)
+PASS detachedPara2.compareDocumentPosition(detachedComment)
+PASS detachedPara2.compareDocumentPosition(docfrag)
+PASS detachedPara2.compareDocumentPosition(doctype)
+PASS detachedPara2.compareDocumentPosition(foreignDoctype)
+PASS detachedPara2.compareDocumentPosition(paras[1])
+PASS detachedPara2.compareDocumentPosition(detachedPara2)
+PASS detachedPara2.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedPara2.compareDocumentPosition(testDiv)
+PASS detachedPara2.compareDocumentPosition(detachedXmlElement)
+PASS detachedPara2.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedPara2.compareDocumentPosition(xmlTextNode)
+PASS detachedPara2.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedPara2.compareDocumentPosition(xmlComment)
+PASS detachedPara2.compareDocumentPosition(foreignComment)
+PASS detachedPara2.compareDocumentPosition(detachedForeignComment)
+PASS detachedPara2.compareDocumentPosition(detachedXmlComment)
+PASS detachedPara2.compareDocumentPosition(foreignDocfrag)
+PASS detachedPara2.compareDocumentPosition(xmlDocfrag)
+PASS detachedPara2.compareDocumentPosition(xmlDoctype)
+PASS detachedPara2.firstChild.contains(null)
+PASS detachedPara2.firstChild.compareDocumentPosition(paras[0])
+PASS detachedPara2.firstChild.compareDocumentPosition(paras[0].firstChild)
+PASS detachedPara2.firstChild.compareDocumentPosition(paras[1].firstChild)
+PASS detachedPara2.firstChild.compareDocumentPosition(foreignPara1)
+PASS detachedPara2.firstChild.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedPara1)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedPara2.firstChild.compareDocumentPosition(document)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedDiv)
+PASS detachedPara2.firstChild.compareDocumentPosition(foreignDoc)
+PASS detachedPara2.firstChild.compareDocumentPosition(foreignPara2)
+PASS detachedPara2.firstChild.compareDocumentPosition(xmlDoc)
+PASS detachedPara2.firstChild.compareDocumentPosition(xmlElement)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedTextNode)
+PASS detachedPara2.firstChild.compareDocumentPosition(foreignTextNode)
+PASS detachedPara2.firstChild.compareDocumentPosition(processingInstruction)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedPara2.firstChild.compareDocumentPosition(comment)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedComment)
+PASS detachedPara2.firstChild.compareDocumentPosition(docfrag)
+PASS detachedPara2.firstChild.compareDocumentPosition(doctype)
+PASS detachedPara2.firstChild.compareDocumentPosition(foreignDoctype)
+PASS detachedPara2.firstChild.compareDocumentPosition(paras[1])
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedPara2)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedPara2.firstChild.compareDocumentPosition(testDiv)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedXmlElement)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedPara2.firstChild.compareDocumentPosition(xmlTextNode)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedPara2.firstChild.compareDocumentPosition(xmlComment)
+PASS detachedPara2.firstChild.compareDocumentPosition(foreignComment)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedForeignComment)
+PASS detachedPara2.firstChild.compareDocumentPosition(detachedXmlComment)
+PASS detachedPara2.firstChild.compareDocumentPosition(foreignDocfrag)
+PASS detachedPara2.firstChild.compareDocumentPosition(xmlDocfrag)
+PASS detachedPara2.firstChild.compareDocumentPosition(xmlDoctype)
+PASS testDiv.contains(null)
+PASS testDiv.compareDocumentPosition(paras[0])
+PASS testDiv.compareDocumentPosition(paras[0].firstChild)
+PASS testDiv.compareDocumentPosition(paras[1].firstChild)
+PASS testDiv.compareDocumentPosition(foreignPara1)
+PASS testDiv.compareDocumentPosition(foreignPara1.firstChild)
+PASS testDiv.compareDocumentPosition(detachedPara1)
+PASS testDiv.compareDocumentPosition(detachedPara1.firstChild)
+PASS testDiv.compareDocumentPosition(document)
+PASS testDiv.compareDocumentPosition(detachedDiv)
+PASS testDiv.compareDocumentPosition(foreignDoc)
+PASS testDiv.compareDocumentPosition(foreignPara2)
+PASS testDiv.compareDocumentPosition(xmlDoc)
+PASS testDiv.compareDocumentPosition(xmlElement)
+PASS testDiv.compareDocumentPosition(detachedTextNode)
+PASS testDiv.compareDocumentPosition(foreignTextNode)
+PASS testDiv.compareDocumentPosition(processingInstruction)
+PASS testDiv.compareDocumentPosition(detachedProcessingInstruction)
+PASS testDiv.compareDocumentPosition(comment)
+PASS testDiv.compareDocumentPosition(detachedComment)
+PASS testDiv.compareDocumentPosition(docfrag)
+PASS testDiv.compareDocumentPosition(doctype)
+PASS testDiv.compareDocumentPosition(foreignDoctype)
+PASS testDiv.compareDocumentPosition(paras[1])
+PASS testDiv.compareDocumentPosition(detachedPara2)
+PASS testDiv.compareDocumentPosition(detachedPara2.firstChild)
+PASS testDiv.compareDocumentPosition(testDiv)
+PASS testDiv.compareDocumentPosition(detachedXmlElement)
+PASS testDiv.compareDocumentPosition(detachedForeignTextNode)
+PASS testDiv.compareDocumentPosition(xmlTextNode)
+PASS testDiv.compareDocumentPosition(detachedXmlTextNode)
+PASS testDiv.compareDocumentPosition(xmlComment)
+PASS testDiv.compareDocumentPosition(foreignComment)
+PASS testDiv.compareDocumentPosition(detachedForeignComment)
+PASS testDiv.compareDocumentPosition(detachedXmlComment)
+PASS testDiv.compareDocumentPosition(foreignDocfrag)
+PASS testDiv.compareDocumentPosition(xmlDocfrag)
+PASS testDiv.compareDocumentPosition(xmlDoctype)
+PASS detachedXmlElement.contains(null)
+PASS detachedXmlElement.compareDocumentPosition(paras[0])
+PASS detachedXmlElement.compareDocumentPosition(paras[0].firstChild)
+PASS detachedXmlElement.compareDocumentPosition(paras[1].firstChild)
+PASS detachedXmlElement.compareDocumentPosition(foreignPara1)
+PASS detachedXmlElement.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedXmlElement.compareDocumentPosition(detachedPara1)
+PASS detachedXmlElement.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedXmlElement.compareDocumentPosition(document)
+PASS detachedXmlElement.compareDocumentPosition(detachedDiv)
+PASS detachedXmlElement.compareDocumentPosition(foreignDoc)
+PASS detachedXmlElement.compareDocumentPosition(foreignPara2)
+PASS detachedXmlElement.compareDocumentPosition(xmlDoc)
+PASS detachedXmlElement.compareDocumentPosition(xmlElement)
+PASS detachedXmlElement.compareDocumentPosition(detachedTextNode)
+PASS detachedXmlElement.compareDocumentPosition(foreignTextNode)
+PASS detachedXmlElement.compareDocumentPosition(processingInstruction)
+PASS detachedXmlElement.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedXmlElement.compareDocumentPosition(comment)
+PASS detachedXmlElement.compareDocumentPosition(detachedComment)
+PASS detachedXmlElement.compareDocumentPosition(docfrag)
+PASS detachedXmlElement.compareDocumentPosition(doctype)
+PASS detachedXmlElement.compareDocumentPosition(foreignDoctype)
+PASS detachedXmlElement.compareDocumentPosition(paras[1])
+PASS detachedXmlElement.compareDocumentPosition(detachedPara2)
+PASS detachedXmlElement.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedXmlElement.compareDocumentPosition(testDiv)
+PASS detachedXmlElement.compareDocumentPosition(detachedXmlElement)
+PASS detachedXmlElement.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedXmlElement.compareDocumentPosition(xmlTextNode)
+PASS detachedXmlElement.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedXmlElement.compareDocumentPosition(xmlComment)
+PASS detachedXmlElement.compareDocumentPosition(foreignComment)
+PASS detachedXmlElement.compareDocumentPosition(detachedForeignComment)
+PASS detachedXmlElement.compareDocumentPosition(detachedXmlComment)
+PASS detachedXmlElement.compareDocumentPosition(foreignDocfrag)
+PASS detachedXmlElement.compareDocumentPosition(xmlDocfrag)
+PASS detachedXmlElement.compareDocumentPosition(xmlDoctype)
+PASS detachedForeignTextNode.contains(null)
+PASS detachedForeignTextNode.compareDocumentPosition(paras[0])
+PASS detachedForeignTextNode.compareDocumentPosition(paras[0].firstChild)
+PASS detachedForeignTextNode.compareDocumentPosition(paras[1].firstChild)
+PASS detachedForeignTextNode.compareDocumentPosition(foreignPara1)
+PASS detachedForeignTextNode.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedPara1)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedForeignTextNode.compareDocumentPosition(document)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedDiv)
+PASS detachedForeignTextNode.compareDocumentPosition(foreignDoc)
+PASS detachedForeignTextNode.compareDocumentPosition(foreignPara2)
+PASS detachedForeignTextNode.compareDocumentPosition(xmlDoc)
+PASS detachedForeignTextNode.compareDocumentPosition(xmlElement)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedTextNode)
+PASS detachedForeignTextNode.compareDocumentPosition(foreignTextNode)
+PASS detachedForeignTextNode.compareDocumentPosition(processingInstruction)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedForeignTextNode.compareDocumentPosition(comment)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedComment)
+PASS detachedForeignTextNode.compareDocumentPosition(docfrag)
+PASS detachedForeignTextNode.compareDocumentPosition(doctype)
+PASS detachedForeignTextNode.compareDocumentPosition(foreignDoctype)
+PASS detachedForeignTextNode.compareDocumentPosition(paras[1])
+PASS detachedForeignTextNode.compareDocumentPosition(detachedPara2)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedForeignTextNode.compareDocumentPosition(testDiv)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedXmlElement)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedForeignTextNode.compareDocumentPosition(xmlTextNode)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedForeignTextNode.compareDocumentPosition(xmlComment)
+PASS detachedForeignTextNode.compareDocumentPosition(foreignComment)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedForeignComment)
+PASS detachedForeignTextNode.compareDocumentPosition(detachedXmlComment)
+PASS detachedForeignTextNode.compareDocumentPosition(foreignDocfrag)
+PASS detachedForeignTextNode.compareDocumentPosition(xmlDocfrag)
+PASS detachedForeignTextNode.compareDocumentPosition(xmlDoctype)
+PASS xmlTextNode.contains(null)
+PASS xmlTextNode.compareDocumentPosition(paras[0])
+PASS xmlTextNode.compareDocumentPosition(paras[0].firstChild)
+PASS xmlTextNode.compareDocumentPosition(paras[1].firstChild)
+PASS xmlTextNode.compareDocumentPosition(foreignPara1)
+PASS xmlTextNode.compareDocumentPosition(foreignPara1.firstChild)
+PASS xmlTextNode.compareDocumentPosition(detachedPara1)
+PASS xmlTextNode.compareDocumentPosition(detachedPara1.firstChild)
+PASS xmlTextNode.compareDocumentPosition(document)
+PASS xmlTextNode.compareDocumentPosition(detachedDiv)
+PASS xmlTextNode.compareDocumentPosition(foreignDoc)
+PASS xmlTextNode.compareDocumentPosition(foreignPara2)
+PASS xmlTextNode.compareDocumentPosition(xmlDoc)
+PASS xmlTextNode.compareDocumentPosition(xmlElement)
+PASS xmlTextNode.compareDocumentPosition(detachedTextNode)
+PASS xmlTextNode.compareDocumentPosition(foreignTextNode)
+PASS xmlTextNode.compareDocumentPosition(processingInstruction)
+PASS xmlTextNode.compareDocumentPosition(detachedProcessingInstruction)
+PASS xmlTextNode.compareDocumentPosition(comment)
+PASS xmlTextNode.compareDocumentPosition(detachedComment)
+PASS xmlTextNode.compareDocumentPosition(docfrag)
+PASS xmlTextNode.compareDocumentPosition(doctype)
+PASS xmlTextNode.compareDocumentPosition(foreignDoctype)
+PASS xmlTextNode.compareDocumentPosition(paras[1])
+PASS xmlTextNode.compareDocumentPosition(detachedPara2)
+PASS xmlTextNode.compareDocumentPosition(detachedPara2.firstChild)
+PASS xmlTextNode.compareDocumentPosition(testDiv)
+PASS xmlTextNode.compareDocumentPosition(detachedXmlElement)
+PASS xmlTextNode.compareDocumentPosition(detachedForeignTextNode)
+PASS xmlTextNode.compareDocumentPosition(xmlTextNode)
+PASS xmlTextNode.compareDocumentPosition(detachedXmlTextNode)
+PASS xmlTextNode.compareDocumentPosition(xmlComment)
+PASS xmlTextNode.compareDocumentPosition(foreignComment)
+PASS xmlTextNode.compareDocumentPosition(detachedForeignComment)
+PASS xmlTextNode.compareDocumentPosition(detachedXmlComment)
+PASS xmlTextNode.compareDocumentPosition(foreignDocfrag)
+PASS xmlTextNode.compareDocumentPosition(xmlDocfrag)
+PASS xmlTextNode.compareDocumentPosition(xmlDoctype)
+PASS detachedXmlTextNode.contains(null)
+PASS detachedXmlTextNode.compareDocumentPosition(paras[0])
+PASS detachedXmlTextNode.compareDocumentPosition(paras[0].firstChild)
+PASS detachedXmlTextNode.compareDocumentPosition(paras[1].firstChild)
+PASS detachedXmlTextNode.compareDocumentPosition(foreignPara1)
+PASS detachedXmlTextNode.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedPara1)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedXmlTextNode.compareDocumentPosition(document)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedDiv)
+PASS detachedXmlTextNode.compareDocumentPosition(foreignDoc)
+PASS detachedXmlTextNode.compareDocumentPosition(foreignPara2)
+PASS detachedXmlTextNode.compareDocumentPosition(xmlDoc)
+PASS detachedXmlTextNode.compareDocumentPosition(xmlElement)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedTextNode)
+PASS detachedXmlTextNode.compareDocumentPosition(foreignTextNode)
+PASS detachedXmlTextNode.compareDocumentPosition(processingInstruction)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedXmlTextNode.compareDocumentPosition(comment)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedComment)
+PASS detachedXmlTextNode.compareDocumentPosition(docfrag)
+PASS detachedXmlTextNode.compareDocumentPosition(doctype)
+PASS detachedXmlTextNode.compareDocumentPosition(foreignDoctype)
+PASS detachedXmlTextNode.compareDocumentPosition(paras[1])
+PASS detachedXmlTextNode.compareDocumentPosition(detachedPara2)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedXmlTextNode.compareDocumentPosition(testDiv)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedXmlElement)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedXmlTextNode.compareDocumentPosition(xmlTextNode)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedXmlTextNode.compareDocumentPosition(xmlComment)
+PASS detachedXmlTextNode.compareDocumentPosition(foreignComment)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedForeignComment)
+PASS detachedXmlTextNode.compareDocumentPosition(detachedXmlComment)
+PASS detachedXmlTextNode.compareDocumentPosition(foreignDocfrag)
+PASS detachedXmlTextNode.compareDocumentPosition(xmlDocfrag)
+PASS detachedXmlTextNode.compareDocumentPosition(xmlDoctype)
+PASS xmlComment.contains(null)
+PASS xmlComment.compareDocumentPosition(paras[0])
+PASS xmlComment.compareDocumentPosition(paras[0].firstChild)
+PASS xmlComment.compareDocumentPosition(paras[1].firstChild)
+PASS xmlComment.compareDocumentPosition(foreignPara1)
+PASS xmlComment.compareDocumentPosition(foreignPara1.firstChild)
+PASS xmlComment.compareDocumentPosition(detachedPara1)
+PASS xmlComment.compareDocumentPosition(detachedPara1.firstChild)
+PASS xmlComment.compareDocumentPosition(document)
+PASS xmlComment.compareDocumentPosition(detachedDiv)
+PASS xmlComment.compareDocumentPosition(foreignDoc)
+PASS xmlComment.compareDocumentPosition(foreignPara2)
+PASS xmlComment.compareDocumentPosition(xmlDoc)
+PASS xmlComment.compareDocumentPosition(xmlElement)
+PASS xmlComment.compareDocumentPosition(detachedTextNode)
+PASS xmlComment.compareDocumentPosition(foreignTextNode)
+PASS xmlComment.compareDocumentPosition(processingInstruction)
+PASS xmlComment.compareDocumentPosition(detachedProcessingInstruction)
+PASS xmlComment.compareDocumentPosition(comment)
+PASS xmlComment.compareDocumentPosition(detachedComment)
+PASS xmlComment.compareDocumentPosition(docfrag)
+PASS xmlComment.compareDocumentPosition(doctype)
+PASS xmlComment.compareDocumentPosition(foreignDoctype)
+PASS xmlComment.compareDocumentPosition(paras[1])
+PASS xmlComment.compareDocumentPosition(detachedPara2)
+PASS xmlComment.compareDocumentPosition(detachedPara2.firstChild)
+PASS xmlComment.compareDocumentPosition(testDiv)
+PASS xmlComment.compareDocumentPosition(detachedXmlElement)
+PASS xmlComment.compareDocumentPosition(detachedForeignTextNode)
+PASS xmlComment.compareDocumentPosition(xmlTextNode)
+PASS xmlComment.compareDocumentPosition(detachedXmlTextNode)
+PASS xmlComment.compareDocumentPosition(xmlComment)
+PASS xmlComment.compareDocumentPosition(foreignComment)
+PASS xmlComment.compareDocumentPosition(detachedForeignComment)
+PASS xmlComment.compareDocumentPosition(detachedXmlComment)
+PASS xmlComment.compareDocumentPosition(foreignDocfrag)
+PASS xmlComment.compareDocumentPosition(xmlDocfrag)
+PASS xmlComment.compareDocumentPosition(xmlDoctype)
+PASS foreignComment.contains(null)
+PASS foreignComment.compareDocumentPosition(paras[0])
+PASS foreignComment.compareDocumentPosition(paras[0].firstChild)
+PASS foreignComment.compareDocumentPosition(paras[1].firstChild)
+PASS foreignComment.compareDocumentPosition(foreignPara1)
+PASS foreignComment.compareDocumentPosition(foreignPara1.firstChild)
+PASS foreignComment.compareDocumentPosition(detachedPara1)
+PASS foreignComment.compareDocumentPosition(detachedPara1.firstChild)
+PASS foreignComment.compareDocumentPosition(document)
+PASS foreignComment.compareDocumentPosition(detachedDiv)
+PASS foreignComment.compareDocumentPosition(foreignDoc)
+PASS foreignComment.compareDocumentPosition(foreignPara2)
+PASS foreignComment.compareDocumentPosition(xmlDoc)
+PASS foreignComment.compareDocumentPosition(xmlElement)
+PASS foreignComment.compareDocumentPosition(detachedTextNode)
+PASS foreignComment.compareDocumentPosition(foreignTextNode)
+PASS foreignComment.compareDocumentPosition(processingInstruction)
+PASS foreignComment.compareDocumentPosition(detachedProcessingInstruction)
+PASS foreignComment.compareDocumentPosition(comment)
+PASS foreignComment.compareDocumentPosition(detachedComment)
+PASS foreignComment.compareDocumentPosition(docfrag)
+PASS foreignComment.compareDocumentPosition(doctype)
+PASS foreignComment.compareDocumentPosition(foreignDoctype)
+PASS foreignComment.compareDocumentPosition(paras[1])
+PASS foreignComment.compareDocumentPosition(detachedPara2)
+PASS foreignComment.compareDocumentPosition(detachedPara2.firstChild)
+PASS foreignComment.compareDocumentPosition(testDiv)
+PASS foreignComment.compareDocumentPosition(detachedXmlElement)
+PASS foreignComment.compareDocumentPosition(detachedForeignTextNode)
+PASS foreignComment.compareDocumentPosition(xmlTextNode)
+PASS foreignComment.compareDocumentPosition(detachedXmlTextNode)
+PASS foreignComment.compareDocumentPosition(xmlComment)
+PASS foreignComment.compareDocumentPosition(foreignComment)
+PASS foreignComment.compareDocumentPosition(detachedForeignComment)
+PASS foreignComment.compareDocumentPosition(detachedXmlComment)
+PASS foreignComment.compareDocumentPosition(foreignDocfrag)
+PASS foreignComment.compareDocumentPosition(xmlDocfrag)
+PASS foreignComment.compareDocumentPosition(xmlDoctype)
+PASS detachedForeignComment.contains(null)
+PASS detachedForeignComment.compareDocumentPosition(paras[0])
+PASS detachedForeignComment.compareDocumentPosition(paras[0].firstChild)
+PASS detachedForeignComment.compareDocumentPosition(paras[1].firstChild)
+PASS detachedForeignComment.compareDocumentPosition(foreignPara1)
+PASS detachedForeignComment.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedForeignComment.compareDocumentPosition(detachedPara1)
+PASS detachedForeignComment.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedForeignComment.compareDocumentPosition(document)
+PASS detachedForeignComment.compareDocumentPosition(detachedDiv)
+PASS detachedForeignComment.compareDocumentPosition(foreignDoc)
+PASS detachedForeignComment.compareDocumentPosition(foreignPara2)
+PASS detachedForeignComment.compareDocumentPosition(xmlDoc)
+PASS detachedForeignComment.compareDocumentPosition(xmlElement)
+PASS detachedForeignComment.compareDocumentPosition(detachedTextNode)
+PASS detachedForeignComment.compareDocumentPosition(foreignTextNode)
+PASS detachedForeignComment.compareDocumentPosition(processingInstruction)
+PASS detachedForeignComment.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedForeignComment.compareDocumentPosition(comment)
+PASS detachedForeignComment.compareDocumentPosition(detachedComment)
+PASS detachedForeignComment.compareDocumentPosition(docfrag)
+PASS detachedForeignComment.compareDocumentPosition(doctype)
+PASS detachedForeignComment.compareDocumentPosition(foreignDoctype)
+PASS detachedForeignComment.compareDocumentPosition(paras[1])
+PASS detachedForeignComment.compareDocumentPosition(detachedPara2)
+PASS detachedForeignComment.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedForeignComment.compareDocumentPosition(testDiv)
+PASS detachedForeignComment.compareDocumentPosition(detachedXmlElement)
+PASS detachedForeignComment.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedForeignComment.compareDocumentPosition(xmlTextNode)
+PASS detachedForeignComment.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedForeignComment.compareDocumentPosition(xmlComment)
+PASS detachedForeignComment.compareDocumentPosition(foreignComment)
+PASS detachedForeignComment.compareDocumentPosition(detachedForeignComment)
+PASS detachedForeignComment.compareDocumentPosition(detachedXmlComment)
+PASS detachedForeignComment.compareDocumentPosition(foreignDocfrag)
+PASS detachedForeignComment.compareDocumentPosition(xmlDocfrag)
+PASS detachedForeignComment.compareDocumentPosition(xmlDoctype)
+PASS detachedXmlComment.contains(null)
+PASS detachedXmlComment.compareDocumentPosition(paras[0])
+PASS detachedXmlComment.compareDocumentPosition(paras[0].firstChild)
+PASS detachedXmlComment.compareDocumentPosition(paras[1].firstChild)
+PASS detachedXmlComment.compareDocumentPosition(foreignPara1)
+PASS detachedXmlComment.compareDocumentPosition(foreignPara1.firstChild)
+PASS detachedXmlComment.compareDocumentPosition(detachedPara1)
+PASS detachedXmlComment.compareDocumentPosition(detachedPara1.firstChild)
+PASS detachedXmlComment.compareDocumentPosition(document)
+PASS detachedXmlComment.compareDocumentPosition(detachedDiv)
+PASS detachedXmlComment.compareDocumentPosition(foreignDoc)
+PASS detachedXmlComment.compareDocumentPosition(foreignPara2)
+PASS detachedXmlComment.compareDocumentPosition(xmlDoc)
+PASS detachedXmlComment.compareDocumentPosition(xmlElement)
+PASS detachedXmlComment.compareDocumentPosition(detachedTextNode)
+PASS detachedXmlComment.compareDocumentPosition(foreignTextNode)
+PASS detachedXmlComment.compareDocumentPosition(processingInstruction)
+PASS detachedXmlComment.compareDocumentPosition(detachedProcessingInstruction)
+PASS detachedXmlComment.compareDocumentPosition(comment)
+PASS detachedXmlComment.compareDocumentPosition(detachedComment)
+PASS detachedXmlComment.compareDocumentPosition(docfrag)
+PASS detachedXmlComment.compareDocumentPosition(doctype)
+PASS detachedXmlComment.compareDocumentPosition(foreignDoctype)
+PASS detachedXmlComment.compareDocumentPosition(paras[1])
+PASS detachedXmlComment.compareDocumentPosition(detachedPara2)
+PASS detachedXmlComment.compareDocumentPosition(detachedPara2.firstChild)
+PASS detachedXmlComment.compareDocumentPosition(testDiv)
+PASS detachedXmlComment.compareDocumentPosition(detachedXmlElement)
+PASS detachedXmlComment.compareDocumentPosition(detachedForeignTextNode)
+PASS detachedXmlComment.compareDocumentPosition(xmlTextNode)
+PASS detachedXmlComment.compareDocumentPosition(detachedXmlTextNode)
+PASS detachedXmlComment.compareDocumentPosition(xmlComment)
+PASS detachedXmlComment.compareDocumentPosition(foreignComment)
+PASS detachedXmlComment.compareDocumentPosition(detachedForeignComment)
+PASS detachedXmlComment.compareDocumentPosition(detachedXmlComment)
+PASS detachedXmlComment.compareDocumentPosition(foreignDocfrag)
+PASS detachedXmlComment.compareDocumentPosition(xmlDocfrag)
+PASS detachedXmlComment.compareDocumentPosition(xmlDoctype)
+PASS foreignDocfrag.contains(null)
+PASS foreignDocfrag.compareDocumentPosition(paras[0])
+PASS foreignDocfrag.compareDocumentPosition(paras[0].firstChild)
+PASS foreignDocfrag.compareDocumentPosition(paras[1].firstChild)
+PASS foreignDocfrag.compareDocumentPosition(foreignPara1)
+PASS foreignDocfrag.compareDocumentPosition(foreignPara1.firstChild)
+PASS foreignDocfrag.compareDocumentPosition(detachedPara1)
+PASS foreignDocfrag.compareDocumentPosition(detachedPara1.firstChild)
+PASS foreignDocfrag.compareDocumentPosition(document)
+PASS foreignDocfrag.compareDocumentPosition(detachedDiv)
+PASS foreignDocfrag.compareDocumentPosition(foreignDoc)
+PASS foreignDocfrag.compareDocumentPosition(foreignPara2)
+PASS foreignDocfrag.compareDocumentPosition(xmlDoc)
+PASS foreignDocfrag.compareDocumentPosition(xmlElement)
+PASS foreignDocfrag.compareDocumentPosition(detachedTextNode)
+PASS foreignDocfrag.compareDocumentPosition(foreignTextNode)
+PASS foreignDocfrag.compareDocumentPosition(processingInstruction)
+PASS foreignDocfrag.compareDocumentPosition(detachedProcessingInstruction)
+PASS foreignDocfrag.compareDocumentPosition(comment)
+PASS foreignDocfrag.compareDocumentPosition(detachedComment)
+PASS foreignDocfrag.compareDocumentPosition(docfrag)
+PASS foreignDocfrag.compareDocumentPosition(doctype)
+PASS foreignDocfrag.compareDocumentPosition(foreignDoctype)
+PASS foreignDocfrag.compareDocumentPosition(paras[1])
+PASS foreignDocfrag.compareDocumentPosition(detachedPara2)
+PASS foreignDocfrag.compareDocumentPosition(detachedPara2.firstChild)
+PASS foreignDocfrag.compareDocumentPosition(testDiv)
+PASS foreignDocfrag.compareDocumentPosition(detachedXmlElement)
+PASS foreignDocfrag.compareDocumentPosition(detachedForeignTextNode)
+PASS foreignDocfrag.compareDocumentPosition(xmlTextNode)
+PASS foreignDocfrag.compareDocumentPosition(detachedXmlTextNode)
+PASS foreignDocfrag.compareDocumentPosition(xmlComment)
+PASS foreignDocfrag.compareDocumentPosition(foreignComment)
+PASS foreignDocfrag.compareDocumentPosition(detachedForeignComment)
+PASS foreignDocfrag.compareDocumentPosition(detachedXmlComment)
+PASS foreignDocfrag.compareDocumentPosition(foreignDocfrag)
+PASS foreignDocfrag.compareDocumentPosition(xmlDocfrag)
+PASS foreignDocfrag.compareDocumentPosition(xmlDoctype)
+PASS xmlDocfrag.contains(null)
+PASS xmlDocfrag.compareDocumentPosition(paras[0])
+PASS xmlDocfrag.compareDocumentPosition(paras[0].firstChild)
+PASS xmlDocfrag.compareDocumentPosition(paras[1].firstChild)
+PASS xmlDocfrag.compareDocumentPosition(foreignPara1)
+PASS xmlDocfrag.compareDocumentPosition(foreignPara1.firstChild)
+PASS xmlDocfrag.compareDocumentPosition(detachedPara1)
+PASS xmlDocfrag.compareDocumentPosition(detachedPara1.firstChild)
+PASS xmlDocfrag.compareDocumentPosition(document)
+PASS xmlDocfrag.compareDocumentPosition(detachedDiv)
+PASS xmlDocfrag.compareDocumentPosition(foreignDoc)
+PASS xmlDocfrag.compareDocumentPosition(foreignPara2)
+PASS xmlDocfrag.compareDocumentPosition(xmlDoc)
+PASS xmlDocfrag.compareDocumentPosition(xmlElement)
+PASS xmlDocfrag.compareDocumentPosition(detachedTextNode)
+PASS xmlDocfrag.compareDocumentPosition(foreignTextNode)
+PASS xmlDocfrag.compareDocumentPosition(processingInstruction)
+PASS xmlDocfrag.compareDocumentPosition(detachedProcessingInstruction)
+PASS xmlDocfrag.compareDocumentPosition(comment)
+PASS xmlDocfrag.compareDocumentPosition(detachedComment)
+PASS xmlDocfrag.compareDocumentPosition(docfrag)
+PASS xmlDocfrag.compareDocumentPosition(doctype)
+PASS xmlDocfrag.compareDocumentPosition(foreignDoctype)
+PASS xmlDocfrag.compareDocumentPosition(paras[1])
+PASS xmlDocfrag.compareDocumentPosition(detachedPara2)
+PASS xmlDocfrag.compareDocumentPosition(detachedPara2.firstChild)
+PASS xmlDocfrag.compareDocumentPosition(testDiv)
+PASS xmlDocfrag.compareDocumentPosition(detachedXmlElement)
+PASS xmlDocfrag.compareDocumentPosition(detachedForeignTextNode)
+PASS xmlDocfrag.compareDocumentPosition(xmlTextNode)
+PASS xmlDocfrag.compareDocumentPosition(detachedXmlTextNode)
+PASS xmlDocfrag.compareDocumentPosition(xmlComment)
+PASS xmlDocfrag.compareDocumentPosition(foreignComment)
+PASS xmlDocfrag.compareDocumentPosition(detachedForeignComment)
+PASS xmlDocfrag.compareDocumentPosition(detachedXmlComment)
+PASS xmlDocfrag.compareDocumentPosition(foreignDocfrag)
+PASS xmlDocfrag.compareDocumentPosition(xmlDocfrag)
+PASS xmlDocfrag.compareDocumentPosition(xmlDoctype)
+PASS xmlDoctype.contains(null)
+PASS xmlDoctype.compareDocumentPosition(paras[0])
+PASS xmlDoctype.compareDocumentPosition(paras[0].firstChild)
+PASS xmlDoctype.compareDocumentPosition(paras[1].firstChild)
+PASS xmlDoctype.compareDocumentPosition(foreignPara1)
+PASS xmlDoctype.compareDocumentPosition(foreignPara1.firstChild)
+PASS xmlDoctype.compareDocumentPosition(detachedPara1)
+PASS xmlDoctype.compareDocumentPosition(detachedPara1.firstChild)
+PASS xmlDoctype.compareDocumentPosition(document)
+PASS xmlDoctype.compareDocumentPosition(detachedDiv)
+PASS xmlDoctype.compareDocumentPosition(foreignDoc)
+PASS xmlDoctype.compareDocumentPosition(foreignPara2)
+PASS xmlDoctype.compareDocumentPosition(xmlDoc)
+PASS xmlDoctype.compareDocumentPosition(xmlElement)
+PASS xmlDoctype.compareDocumentPosition(detachedTextNode)
+PASS xmlDoctype.compareDocumentPosition(foreignTextNode)
+PASS xmlDoctype.compareDocumentPosition(processingInstruction)
+PASS xmlDoctype.compareDocumentPosition(detachedProcessingInstruction)
+PASS xmlDoctype.compareDocumentPosition(comment)
+PASS xmlDoctype.compareDocumentPosition(detachedComment)
+PASS xmlDoctype.compareDocumentPosition(docfrag)
+PASS xmlDoctype.compareDocumentPosition(doctype)
+PASS xmlDoctype.compareDocumentPosition(foreignDoctype)
+PASS xmlDoctype.compareDocumentPosition(paras[1])
+PASS xmlDoctype.compareDocumentPosition(detachedPara2)
+PASS xmlDoctype.compareDocumentPosition(detachedPara2.firstChild)
+PASS xmlDoctype.compareDocumentPosition(testDiv)
+PASS xmlDoctype.compareDocumentPosition(detachedXmlElement)
+PASS xmlDoctype.compareDocumentPosition(detachedForeignTextNode)
+PASS xmlDoctype.compareDocumentPosition(xmlTextNode)
+PASS xmlDoctype.compareDocumentPosition(detachedXmlTextNode)
+PASS xmlDoctype.compareDocumentPosition(xmlComment)
+PASS xmlDoctype.compareDocumentPosition(foreignComment)
+PASS xmlDoctype.compareDocumentPosition(detachedForeignComment)
+PASS xmlDoctype.compareDocumentPosition(detachedXmlComment)
+PASS xmlDoctype.compareDocumentPosition(foreignDocfrag)
+PASS xmlDoctype.compareDocumentPosition(xmlDocfrag)
+PASS xmlDoctype.compareDocumentPosition(xmlDoctype)
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodecontainsxhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-contains-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-contains-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-contains-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+ Link text
+
+FAIL Should throw TypeError if the arguments are wrong. assert_throws: function "function () {
+ document.contains();
+ }" did not throw
+PASS contains(null) should be false
+PASS document.contains
+PASS contains with a button
+PASS contains with a text node
+PASS contains with a processing instruction
+FAIL contains with a document fragment NotSupportedError: DOM Exception 9
+PASS contaibs with another document
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodecontainsxhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-contains-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-contains-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-contains-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,83 @@
</span><ins>+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Node.nodeName</title>
+<link rel="author" title="Olli Pettay" href="mailto:Olli@Pettay.fi"/>
+<link rel="author" title="Ms2ger" href="mailto:Ms2ger@gmail.com"/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id="log"/>
+<div id="test">
+ <input type="button" id="testbutton"/>
+ <a id="link">Link text</a>
+</div>
+<script>
+<![CDATA[
+test(function() {
+ assert_throws(new TypeError(), function() {
+ document.contains();
+ });
+ assert_throws(new TypeError(), function() {
+ document.contains(9);
+ });
+}, "Should throw TypeError if the arguments are wrong.");
+
+test(function() {
+ assert_equals(document.contains(null), false, "Document shouldn't contain null.");
+}, "contains(null) should be false");
+
+test(function() {
+ assert_equals(document.contains(document), true, "Document should contain itself!");
+ assert_equals(document.contains(document.createElement("foo")), false, "Document shouldn't contain element which is't in the document");
+ assert_equals(document.contains(document.createTextNode("foo")), false, "Document shouldn't contain text node which is't in the document");
+}, "document.contains");
+
+test(function() {
+ var tb = document.getElementById("testbutton");
+ assert_equals(tb.contains(tb), true, "Element should contain itself.")
+ assert_equals(document.contains(tb), true, "Document should contain element in it!");
+ assert_equals(document.documentElement.contains(tb), true, "Element should contain element in it!");
+}, "contains with a button");
+
+test(function() {
+ var link = document.getElementById("link");
+ var text = link.firstChild;
+ assert_equals(document.contains(text), true, "Document should contain a text node in it.");
+ assert_equals(link.contains(text), true, "Element should contain a text node in it.");
+ assert_equals(text.contains(text), true, "Text node should contain itself.");
+ assert_equals(text.contains(link), false, "text node shouldn't contain its parent.");
+}, "contains with a text node");
+
+test(function() {
+ var pi = document.createProcessingInstruction("adf", "asd");
+ assert_equals(pi.contains(document), false, "Processing instruction shouldn't contain document");
+ assert_equals(document.contains(pi), false, "Document shouldn't contain newly created processing instruction");
+ document.documentElement.appendChild(pi);
+ document.contains(pi, true, "Document should contain processing instruction");
+}, "contains with a processing instruction");
+
+test(function() {
+ if ("createContextualFragment" in document.createRange()) {
+ var df = document.createRange().createContextualFragment("<div>foo</div>");
+ assert_equals(df.contains(df.firstChild), true, "Document fragment should contain its child");
+ assert_equals(df.contains(df.firstChild.firstChild), true,
+ "Document fragment should contain its descendant");
+ assert_equals(df.contains(df), true, "Document fragment should contain itself.");
+ }
+}, "contains with a document fragment");
+
+test(function() {
+ var d = document.implementation.createHTMLDocument("");
+ assert_equals(document.contains(d), false,
+ "Document shouldn't contain another document.");
+ assert_equals(document.contains(d.createElement("div")), false,
+ "Document shouldn't contain an element from another document.");
+ assert_equals(document.contains(d.documentElement), false,
+ "Document shouldn't contain an element from another document.");
+}, "contaibs with another document");
+]]>
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodecontainshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-contains.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-contains.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-contains.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+<!doctype html>
+<title>Node.contains() tests</title>
+<link rel=author title="Aryeh Gregor" href=ayg@aryeh.name>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+testNodes.forEach(function(referenceName) {
+ var reference = eval(referenceName);
+
+ test(function() {
+ assert_false(reference.contains(null));
+ }, referenceName + ".contains(null)");
+
+ testNodes.forEach(function(otherName) {
+ var other = eval(otherName);
+ test(function() {
+ var ancestor = other;
+ while (ancestor && ancestor !== reference) {
+ ancestor = ancestor.parentNode;
+ }
+ if (ancestor === reference) {
+ assert_true(reference.contains(other));
+ } else {
+ assert_false(reference.contains(other));
+ }
+ }, referenceName + ".compareDocumentPosition(" + otherName + ")");
+ });
+});
+
+testDiv.parentNode.removeChild(testDiv);
+</script>
+<!-- vim: set expandtab tabstop=2 shiftwidth=2: -->
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodeinsertBeforeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-insertBefore-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-insertBefore-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-insertBefore-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,44 @@
</span><ins>+
+FAIL Calling insertBefore with a non-Node first argument must throw TypeError. assert_throws: function "function () { document.body.insertBefore(null, null) }" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+FAIL Calling insertBefore with a non-Node first argument on a leaf node DocumentType must throw TypeError. assert_throws: function "function () { node.insertBefore(null, null) }" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Calling insertBefore an a leaf node DocumentType must throw HIERARCHY_REQUEST_ERR.
+FAIL Calling insertBefore with a non-Node first argument on a leaf node Text must throw TypeError. assert_throws: function "function () { node.insertBefore(null, null) }" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Calling insertBefore an a leaf node Text must throw HIERARCHY_REQUEST_ERR.
+FAIL Calling insertBefore with a non-Node first argument on a leaf node Comment must throw TypeError. assert_throws: function "function () { node.insertBefore(null, null) }" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Calling insertBefore an a leaf node Comment must throw HIERARCHY_REQUEST_ERR.
+FAIL Calling insertBefore with a non-Node first argument on a leaf node ProcessingInstruction must throw TypeError. NotSupportedError: DOM Exception 9
+FAIL Calling insertBefore an a leaf node ProcessingInstruction must throw HIERARCHY_REQUEST_ERR. NotSupportedError: DOM Exception 9
+PASS Calling insertBefore with an inclusive ancestor of the context object must throw HIERARCHY_REQUEST_ERR.
+PASS Calling insertBefore with a reference child whose parent is not the context node must throw a NotFoundError.
+PASS If the context node is a document, inserting a document or text node should throw a HierarchyRequestError.
+FAIL If the context node is a document, appending a DocumentFragment that contains a text node or too many elements should throw a HierarchyRequestError. assert_throws: function "function () {
+ doc.insertBefore(df, null);
+ }" did not throw
+FAIL If the context node is a document, inserting a DocumentFragment that contains a text node or too many elements should throw a HierarchyRequestError. assert_throws: function "function () {
+ doc.insertBefore(df, doc.firstChild);
+ }" did not throw
+PASS If the context node is a document, inserting a DocumentFragment with an element if there already is an element child should throw a HierarchyRequestError.
+FAIL If the context node is a document and a doctype is following the reference child, inserting a DocumentFragment with an element should throw a HierarchyRequestError. assert_throws: function "function () {
+ doc.insertBefore(df, doc.doctype);
+ }" did not throw
+FAIL If the context node is a document, inserting a DocumentFragment with an element before the doctype should throw a HierarchyRequestError. assert_throws: function "function () {
+ doc.insertBefore(df, comment);
+ }" did not throw
+PASS If the context node is a document, inserting an element if there already is an element child should throw a HierarchyRequestError.
+FAIL If the context node is a document, inserting an element before the doctype should throw a HierarchyRequestError. assert_throws: function "function () {
+ doc.insertBefore(a, doc.doctype);
+ }" did not throw
+FAIL If the context node is a document and a doctype is following the reference child, inserting an element should throw a HierarchyRequestError. assert_throws: function "function () {
+ doc.insertBefore(a, comment);
+ }" did not throw
+PASS If the context node is a document, inserting a doctype if there already is a doctype child should throw a HierarchyRequestError.
+FAIL If the context node is a document, inserting a doctype after the document element should throw a HierarchyRequestError. assert_throws: function "function () {
+ doc.insertBefore(doctype, comment);
+ }" did not throw
+FAIL If the context node is a document with and element child, appending a doctype should throw a HierarchyRequestError. assert_throws: function "function () {
+ doc.insertBefore(doctype, null);
+ }" did not throw
+PASS If the context node is a DocumentFragment, inserting a document or a doctype should throw a HierarchyRequestError.
+PASS If the context node is an element, inserting a document or a doctype should throw a HierarchyRequestError.
+PASS Inserting a node before itself should not move the node
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodeinsertBeforehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-insertBefore.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-insertBefore.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-insertBefore.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,306 @@
</span><ins>+<!DOCTYPE html>
+<title>Node.insertBefore</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+function testLeafNode(nodeName, createNodeFunction) {
+ test(function() {
+ var node = createNodeFunction();
+ assert_throws(new TypeError(), function() { node.insertBefore(null, null) })
+ }, "Calling insertBefore with a non-Node first argument on a leaf node " + nodeName + " must throw TypeError.")
+ test(function() {
+ var node = createNodeFunction();
+ assert_throws("HIERARCHY_REQUEST_ERR", function() { node.insertBefore(document.createTextNode("fail"), null) })
+ // Would be step 2.
+ assert_throws("HIERARCHY_REQUEST_ERR", function() { node.insertBefore(node, null) })
+ // Would be step 3.
+ assert_throws("HIERARCHY_REQUEST_ERR", function() { node.insertBefore(node, document.createTextNode("child")) })
+ }, "Calling insertBefore an a leaf node " + nodeName + " must throw HIERARCHY_REQUEST_ERR.")
+}
+
+test(function() {
+ // WebIDL.
+ assert_throws(new TypeError(), function() { document.body.insertBefore(null, null) })
+ assert_throws(new TypeError(), function() { document.body.insertBefore(null, document.body.firstChild) })
+ assert_throws(new TypeError(), function() { document.body.insertBefore({'a':'b'}, document.body.firstChild) })
+}, "Calling insertBefore with a non-Node first argument must throw TypeError.")
+
+testLeafNode("DocumentType", function () { return document.doctype; } )
+testLeafNode("Text", function () { return document.createTextNode("Foo") })
+testLeafNode("Comment", function () { return document.createComment("Foo") })
+testLeafNode("ProcessingInstruction", function () { return document.createProcessingInstruction("foo", "bar") })
+
+test(function() {
+ // Step 2.
+ assert_throws("HIERARCHY_REQUEST_ERR", function() { document.body.insertBefore(document.body, document.getElementById("log")) })
+ assert_throws("HIERARCHY_REQUEST_ERR", function() { document.body.insertBefore(document.documentElement, document.getElementById("log")) })
+}, "Calling insertBefore with an inclusive ancestor of the context object must throw HIERARCHY_REQUEST_ERR.")
+
+// Step 3.
+test(function() {
+ var a = document.createElement("div");
+ var b = document.createElement("div");
+ var c = document.createElement("div");
+ assert_throws("NotFoundError", function() {
+ a.insertBefore(b, c);
+ });
+}, "Calling insertBefore with a reference child whose parent is not the context node must throw a NotFoundError.")
+
+// Step 4.1.
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+ var doc2 = document.implementation.createHTMLDocument("title2");
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(doc2, doc.documentElement);
+ });
+
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(doc.createTextNode("text"), doc.documentElement);
+ });
+}, "If the context node is a document, inserting a document or text node should throw a HierarchyRequestError.")
+
+// Step 4.2.1.
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+ doc.removeChild(doc.documentElement);
+
+ var df = doc.createDocumentFragment();
+ df.appendChild(doc.createElement("a"));
+ df.appendChild(doc.createElement("b"));
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(df, null);
+ });
+
+ df = doc.createDocumentFragment();
+ df.appendChild(doc.createTextNode("text"));
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(df, null);
+ });
+
+ df = doc.createDocumentFragment();
+ df.appendChild(doc.createComment("comment"));
+ df.appendChild(doc.createTextNode("text"));
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(df, null);
+ });
+}, "If the context node is a document, appending a DocumentFragment that contains a text node or too many elements should throw a HierarchyRequestError.")
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+ doc.removeChild(doc.documentElement);
+
+ var df = doc.createDocumentFragment();
+ df.appendChild(doc.createElement("a"));
+ df.appendChild(doc.createElement("b"));
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(df, doc.firstChild);
+ });
+
+ df = doc.createDocumentFragment();
+ df.appendChild(doc.createTextNode("text"));
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(df, doc.firstChild);
+ });
+
+ df = doc.createDocumentFragment();
+ df.appendChild(doc.createComment("comment"));
+ df.appendChild(doc.createTextNode("text"));
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(df, doc.firstChild);
+ });
+}, "If the context node is a document, inserting a DocumentFragment that contains a text node or too many elements should throw a HierarchyRequestError.")
+
+// Step 4.2.2.
+test(function() {
+ // The context node has an element child.
+ var doc = document.implementation.createHTMLDocument("title");
+ var comment = doc.appendChild(doc.createComment("foo"));
+ assert_array_equals(doc.childNodes, [doc.doctype, doc.documentElement, comment]);
+
+ var df = doc.createDocumentFragment();
+ df.appendChild(doc.createElement("a"));
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(df, doc.doctype);
+ });
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(df, doc.documentElement);
+ });
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(df, comment);
+ });
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(df, null);
+ });
+}, "If the context node is a document, inserting a DocumentFragment with an element if there already is an element child should throw a HierarchyRequestError.")
+test(function() {
+ // /child/ is a doctype.
+ var doc = document.implementation.createHTMLDocument("title");
+ var comment = doc.insertBefore(doc.createComment("foo"), doc.firstChild);
+ doc.removeChild(doc.documentElement);
+ assert_array_equals(doc.childNodes, [comment, doc.doctype]);
+
+ var df = doc.createDocumentFragment();
+ df.appendChild(doc.createElement("a"));
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(df, doc.doctype);
+ });
+}, "If the context node is a document and a doctype is following the reference child, inserting a DocumentFragment with an element should throw a HierarchyRequestError.")
+test(function() {
+ // /child/ is not null and a doctype is following /child/.
+ var doc = document.implementation.createHTMLDocument("title");
+ var comment = doc.insertBefore(doc.createComment("foo"), doc.firstChild);
+ doc.removeChild(doc.documentElement);
+ assert_array_equals(doc.childNodes, [comment, doc.doctype]);
+
+ var df = doc.createDocumentFragment();
+ df.appendChild(doc.createElement("a"));
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(df, comment);
+ });
+}, "If the context node is a document, inserting a DocumentFragment with an element before the doctype should throw a HierarchyRequestError.")
+
+// Step 4.3.
+test(function() {
+ // The context node has an element child.
+ var doc = document.implementation.createHTMLDocument("title");
+ var comment = doc.appendChild(doc.createComment("foo"));
+ assert_array_equals(doc.childNodes, [doc.doctype, doc.documentElement, comment]);
+
+ var a = doc.createElement("a");
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(a, doc.doctype);
+ });
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(a, doc.documentElement);
+ });
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(a, comment);
+ });
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(a, null);
+ });
+}, "If the context node is a document, inserting an element if there already is an element child should throw a HierarchyRequestError.")
+test(function() {
+ // /child/ is a doctype.
+ var doc = document.implementation.createHTMLDocument("title");
+ var comment = doc.insertBefore(doc.createComment("foo"), doc.firstChild);
+ doc.removeChild(doc.documentElement);
+ assert_array_equals(doc.childNodes, [comment, doc.doctype]);
+
+ var a = doc.createElement("a");
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(a, doc.doctype);
+ });
+}, "If the context node is a document, inserting an element before the doctype should throw a HierarchyRequestError.")
+test(function() {
+ // /child/ is not null and a doctype is following /child/.
+ var doc = document.implementation.createHTMLDocument("title");
+ var comment = doc.insertBefore(doc.createComment("foo"), doc.firstChild);
+ doc.removeChild(doc.documentElement);
+ assert_array_equals(doc.childNodes, [comment, doc.doctype]);
+
+ var a = doc.createElement("a");
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(a, comment);
+ });
+}, "If the context node is a document and a doctype is following the reference child, inserting an element should throw a HierarchyRequestError.")
+
+// Step 4.4.
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+ var comment = doc.insertBefore(doc.createComment("foo"), doc.firstChild);
+ assert_array_equals(doc.childNodes, [comment, doc.doctype, doc.documentElement]);
+
+ var doctype = document.implementation.createDocumentType("html", "", "");
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(doctype, comment);
+ });
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(doctype, doc.doctype);
+ });
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(doctype, doc.documentElement);
+ });
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(doctype, null);
+ });
+}, "If the context node is a document, inserting a doctype if there already is a doctype child should throw a HierarchyRequestError.")
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+ var comment = doc.appendChild(doc.createComment("foo"));
+ doc.removeChild(doc.doctype);
+ assert_array_equals(doc.childNodes, [doc.documentElement, comment]);
+
+ var doctype = document.implementation.createDocumentType("html", "", "");
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(doctype, comment);
+ });
+}, "If the context node is a document, inserting a doctype after the document element should throw a HierarchyRequestError.")
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+ var comment = doc.appendChild(doc.createComment("foo"));
+ doc.removeChild(doc.doctype);
+ assert_array_equals(doc.childNodes, [doc.documentElement, comment]);
+
+ var doctype = document.implementation.createDocumentType("html", "", "");
+ assert_throws("HierarchyRequestError", function() {
+ doc.insertBefore(doctype, null);
+ });
+}, "If the context node is a document with and element child, appending a doctype should throw a HierarchyRequestError.")
+
+// Step 5.
+test(function() {
+ var df = document.createDocumentFragment();
+ var a = df.appendChild(document.createElement("a"));
+
+ var doc = document.implementation.createHTMLDocument("title");
+ assert_throws("HierarchyRequestError", function() {
+ df.insertBefore(doc, a);
+ });
+ assert_throws("HierarchyRequestError", function() {
+ df.insertBefore(doc, null);
+ });
+
+ var doctype = document.implementation.createDocumentType("html", "", "");
+ assert_throws("HierarchyRequestError", function() {
+ df.insertBefore(doctype, a);
+ });
+ assert_throws("HierarchyRequestError", function() {
+ df.insertBefore(doctype, null);
+ });
+}, "If the context node is a DocumentFragment, inserting a document or a doctype should throw a HierarchyRequestError.")
+test(function() {
+ var el = document.createElement("div");
+ var a = el.appendChild(document.createElement("a"));
+
+ var doc = document.implementation.createHTMLDocument("title");
+ assert_throws("HierarchyRequestError", function() {
+ el.insertBefore(doc, a);
+ });
+ assert_throws("HierarchyRequestError", function() {
+ el.insertBefore(doc, null);
+ });
+
+ var doctype = document.implementation.createDocumentType("html", "", "");
+ assert_throws("HierarchyRequestError", function() {
+ el.insertBefore(doctype, a);
+ });
+ assert_throws("HierarchyRequestError", function() {
+ el.insertBefore(doctype, null);
+ });
+}, "If the context node is an element, inserting a document or a doctype should throw a HierarchyRequestError.")
+
+// Step 7.
+test(function() {
+ var a = document.createElement("div");
+ var b = document.createElement("div");
+ var c = document.createElement("div");
+ a.appendChild(b);
+ a.appendChild(c);
+ assert_array_equals(a.childNodes, [b, c]);
+ assert_equals(a.insertBefore(b, b), b);
+ assert_array_equals(a.childNodes, [b, c]);
+ assert_equals(a.insertBefore(c, c), c);
+ assert_array_equals(a.childNodes, [b, c]);
+}, "Inserting a node before itself should not move the node");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodeisEqualNodeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-isEqualNode-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-isEqualNode-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-isEqualNode-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+CONSOLE MESSAGE: line 1380: Blocked a frame with origin "http://127.0.0.1:8000" from accessing a frame with origin "null". The frame requesting access has a protocol of "http", the frame being accessed has a protocol of "data". Protocols must match.
+
+CONSOLE MESSAGE: line 1380: Blocked a frame with origin "http://127.0.0.1:8000" from accessing a frame with origin "null". The frame requesting access has a protocol of "http", the frame being accessed has a protocol of "data". Protocols must match.
+
+
+
+PASS Node.isEqualNode
+PASS Node.isEqualNode 1
+PASS Node.isEqualNode 2
+PASS Node.isEqualNode 3
+PASS Node.isEqualNode 4
+PASS Node.isEqualNode 5
+PASS Node.isEqualNode 6
+PASS isEqualNode should return true when the attributes are in a different order
+PASS isEqualNode should return true if elements have same namespace, prefix, and local name
+PASS isEqualNode should return false if elements have different namespace
+PASS isEqualNode should return false if elements have different prefix
+PASS isEqualNode should return false if elements have different local name
+PASS isEqualNode should return true when the attributes have different prefixes
+FAIL isEqualNode should return true when only the internal subsets of DocumentTypes differ. null is not an object (evaluating 'doc1.doctype')
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodeisEqualNodexhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-isEqualNode-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-isEqualNode-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-isEqualNode-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+CONSOLE MESSAGE: line 1380: Blocked a frame with origin "http://127.0.0.1:8000" from accessing a frame with origin "null". The frame requesting access has a protocol of "http", the frame being accessed has a protocol of "data". Protocols must match.
+
+CONSOLE MESSAGE: line 1380: Blocked a frame with origin "http://127.0.0.1:8000" from accessing a frame with origin "null". The frame requesting access has a protocol of "http", the frame being accessed has a protocol of "data". Protocols must match.
+
+
+
+PASS Node.isEqualNode
+PASS Node.isEqualNode 1
+PASS Node.isEqualNode 2
+PASS Node.isEqualNode 3
+PASS Node.isEqualNode 4
+PASS Node.isEqualNode 5
+PASS Node.isEqualNode 6
+PASS isEqualNode should return true when the attributes are in a different order
+PASS isEqualNode should return true if elements have same namespace, prefix, and local name
+PASS isEqualNode should return false if elements have different namespace
+PASS isEqualNode should return false if elements have different prefix
+PASS isEqualNode should return false if elements have different local name
+PASS isEqualNode should return true when the attributes have different prefixes
+FAIL isEqualNode should return true when only the internal subsets of DocumentTypes differ. null is not an object (evaluating 'doc1.doctype')
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodeisEqualNodexhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-isEqualNode-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-isEqualNode-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-isEqualNode-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,84 @@
</span><ins>+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Node.isEqualNode</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id="log"/>
+<script>
+function testNullHandling(node) {
+ test(function() {
+ assert_false(node.isEqualNode(null))
+ assert_false(node.isEqualNode(undefined))
+ })
+}
+[
+ document.createElement("foo"),
+ document.createTextNode("foo"),
+ document.createProcessingInstruction("foo", "bar"),
+ document.createComment("foo"),
+ document,
+ document.implementation.createDocumentType("html", "", ""),
+ document.createDocumentFragment()
+].forEach(testNullHandling)
+
+test(function() {
+ var a = document.createElement("foo")
+ a.setAttribute("a", "bar")
+ a.setAttribute("b", "baz")
+ var b = document.createElement("foo")
+ b.setAttribute("b", "baz")
+ b.setAttribute("a", "bar")
+ assert_true(a.isEqualNode(b))
+}, "isEqualNode should return true when the attributes are in a different order")
+
+test(function() {
+ var a = document.createElementNS("ns", "prefix:foo")
+ var b = document.createElementNS("ns", "prefix:foo")
+ assert_true(a.isEqualNode(b))
+}, "isEqualNode should return true if elements have same namespace, prefix, and local name")
+
+test(function() {
+ var a = document.createElementNS("ns1", "prefix:foo")
+ var b = document.createElementNS("ns2", "prefix:foo")
+ assert_false(a.isEqualNode(b))
+}, "isEqualNode should return false if elements have different namespace")
+
+test(function() {
+ var a = document.createElementNS("ns", "prefix1:foo")
+ var b = document.createElementNS("ns", "prefix2:foo")
+ assert_false(a.isEqualNode(b))
+}, "isEqualNode should return false if elements have different prefix")
+
+test(function() {
+ var a = document.createElementNS("ns", "prefix:foo1")
+ var b = document.createElementNS("ns", "prefix:foo2")
+ assert_false(a.isEqualNode(b))
+}, "isEqualNode should return false if elements have different local name")
+
+test(function() {
+ var a = document.createElement("foo")
+ a.setAttributeNS("ns", "x:a", "bar")
+ var b = document.createElement("foo")
+ b.setAttributeNS("ns", "y:a", "bar")
+ assert_true(a.isEqualNode(b))
+}, "isEqualNode should return true when the attributes have different prefixes")
+var internalSubset = async_test("isEqualNode should return true when only the internal subsets of DocumentTypes differ.")
+var wait = 2;
+function iframeLoaded() {
+ if (!--wait) {
+ internalSubset.step(function() {
+ var doc1 = document.getElementById("subset1").contentDocument
+ var doc2 = document.getElementById("subset2").contentDocument
+ assert_true(doc1.doctype.isEqualNode(doc2.doctype), "doc1.doctype.isEqualNode(doc2.doctype)")
+ assert_true(doc1.isEqualNode(doc2), "doc1.isEqualNode(doc2)")
+ })
+ internalSubset.done()
+ }
+}
+</script>
+<iframe id="subset1" onload="iframeLoaded()" src="data:application/xml,&lt;!DOCTYPE foo [ &lt;!ELEMENT foo (%23PCDATA)> ]>&lt;foo/>" />
+<iframe id="subset2" onload="iframeLoaded()" src="data:application/xml,&lt;!DOCTYPE foo [ &lt;!ELEMENT foo EMPTY> ]>&lt;foo/>" />
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodelookupNamespaceURIexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupNamespaceURI-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupNamespaceURI-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupNamespaceURI-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,65 @@
</span><ins>+LookupNamespaceURI and IsDefaultNamespace
+
+
+PASS DocumentFragment should have null namespace
+PASS DocumentFragment should have null namespace
+PASS DocumentFragment should have null namespace
+PASS DocumentFragment should have null namespace
+FAIL DocumentFragment is in default namespace assert_equals: expected true but got false
+FAIL DocumentFragment is in default namespace assert_equals: expected true but got false
+PASS DocumentFragment is in default namespace
+PASS DocumentFragment is in default namespace
+PASS Element should have null namespace
+PASS Element should have null namespace
+PASS Element should not have namespace matching prefix with namespaceURI value
+PASS Element should not have XMLNS namespace
+PASS Element has namespace URI matching prefix
+FAIL Empty namespace is not default assert_equals: expected true but got false
+FAIL Empty namespace is not default assert_equals: expected true but got false
+PASS fooNamespace is not default
+PASS xmlns namespace is not default
+PASS Element should have baz namespace
+FAIL Element should have baz namespace assert_equals: expected (string) "bazURI" but got (object) null
+PASS Element has namespace URI matching prefix
+PASS Element does not has namespace with xlmns prefix
+PASS Element has bar namespace
+PASS Empty namespace is not default
+PASS Empty namespace is not default
+PASS fooNamespace is not default
+PASS xmlns namespace is not default
+PASS bar namespace is not default
+PASS baz namespace is default
+PASS Comment should inherit baz namespace
+FAIL Comment should inherit baz namespace assert_equals: expected (string) "bazURI" but got (object) null
+PASS Comment should inherit namespace URI matching prefix
+PASS Comment should inherit bar namespace
+PASS For comment, empty namespace is not default
+PASS For comment, empty namespace is not default
+PASS For comment, fooNamespace is not default
+PASS For comment, xmlns namespace is not default
+PASS For comment, inherited bar namespace is not default
+PASS For comment, inherited baz namespace is default
+PASS Child element should inherit baz namespace
+FAIL Child element should have null namespace assert_equals: expected (string) "childNamespace" but got (object) null
+PASS Child element should not have XMLNS namespace
+PASS Child element has namespace URI matching prefix
+PASS Empty namespace is not default for child
+PASS Empty namespace is not default for child
+PASS fooNamespace is not default for child
+PASS xmlns namespace is not default for child
+PASS bar namespace is not default for child
+PASS baz namespace is default for child
+PASS childNamespace is default for child
+PASS Document should have xhtml namespace
+FAIL Document should have xhtml namespace assert_equals: expected (string) "http://www.w3.org/1999/xhtml" but got (object) null
+PASS Document has no namespace URI matching prefix
+PASS Document has bar namespace
+PASS For document, Empty namespace is not default
+PASS For document, Empty namespace is not default
+PASS For document, fooNamespace is not default
+PASS For document, xmlns namespace is not default
+PASS For document, bar namespace is not default
+PASS For document, baz namespace is not default
+PASS For document, xhtml namespace is default
+PASS Comment does not have bar namespace
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodelookupNamespaceURIhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupNamespaceURI.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupNamespaceURI.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupNamespaceURI.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,119 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<head>
+<title>LookupNamespaceURI and IsDefaultNamespace tests</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+</head>
+<body>
+<h1>LookupNamespaceURI and IsDefaultNamespace</h1>
+<div id="log"/>
+<script>
+function lookupNamespaceURI(node, prefix, expected, name) {
+ test(function() {
+ assert_equals(node.lookupNamespaceURI(prefix), expected);
+ }, name);
+}
+
+function isDefaultNamespace(node, namespace, expected, name) {
+ test(function() {
+ assert_equals(node.isDefaultNamespace(namespace), expected);
+ }, name);
+}
+
+
+var frag = document.createDocumentFragment();
+lookupNamespaceURI(frag, null, null, 'DocumentFragment should have null namespace');
+lookupNamespaceURI(frag, '', null, 'DocumentFragment should have null namespace');
+lookupNamespaceURI(frag, 'foo', null, 'DocumentFragment should have null namespace');
+lookupNamespaceURI(frag, 'xmlns', null, 'DocumentFragment should have null namespace');
+isDefaultNamespace(frag, null, true, 'DocumentFragment is in default namespace');
+isDefaultNamespace(frag, '', true, 'DocumentFragment is in default namespace');
+isDefaultNamespace(frag, 'foo', false, 'DocumentFragment is in default namespace');
+isDefaultNamespace(frag, 'xmlns', false, 'DocumentFragment is in default namespace');
+
+
+
+var fooElem = document.createElementNS('fooNamespace', 'prefix:elem');
+fooElem.setAttribute('bar', 'value');
+
+lookupNamespaceURI(fooElem, null, null, 'Element should have null namespace');
+lookupNamespaceURI(fooElem, '', null, 'Element should have null namespace');
+lookupNamespaceURI(fooElem, 'fooNamespace', null, 'Element should not have namespace matching prefix with namespaceURI value');
+lookupNamespaceURI(fooElem, 'xmlns', null, 'Element should not have XMLNS namespace');
+lookupNamespaceURI(fooElem, 'prefix', 'fooNamespace', 'Element has namespace URI matching prefix');
+isDefaultNamespace(fooElem, null, true, 'Empty namespace is not default');
+isDefaultNamespace(fooElem, '', true, 'Empty namespace is not default');
+isDefaultNamespace(fooElem, 'fooNamespace', false, 'fooNamespace is not default');
+isDefaultNamespace(fooElem, 'http://www.w3.org/2000/xmlns/', false, 'xmlns namespace is not default');
+
+fooElem.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:bar', 'barURI');
+fooElem.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns', 'bazURI');
+
+lookupNamespaceURI(fooElem, null, 'bazURI', 'Element should have baz namespace');
+lookupNamespaceURI(fooElem, '', 'bazURI', 'Element should have baz namespace');
+lookupNamespaceURI(fooElem, 'prefix', 'fooNamespace', 'Element has namespace URI matching prefix');
+lookupNamespaceURI(fooElem, 'xmlns', null, 'Element does not has namespace with xlmns prefix');
+lookupNamespaceURI(fooElem, 'bar', 'barURI', 'Element has bar namespace');
+
+isDefaultNamespace(fooElem, null, false, 'Empty namespace is not default');
+isDefaultNamespace(fooElem, '', false, 'Empty namespace is not default');
+isDefaultNamespace(fooElem, 'fooNamespace', false, 'fooNamespace is not default');
+isDefaultNamespace(fooElem, 'http://www.w3.org/2000/xmlns/', false, 'xmlns namespace is not default');
+isDefaultNamespace(fooElem, 'barURI', false, 'bar namespace is not default');
+isDefaultNamespace(fooElem, 'bazURI', true, 'baz namespace is default');
+
+var comment = document.createComment('comment');
+fooElem.appendChild(comment);
+
+lookupNamespaceURI(comment, null, 'bazURI', 'Comment should inherit baz namespace');
+lookupNamespaceURI(comment, '', 'bazURI', 'Comment should inherit baz namespace');
+lookupNamespaceURI(comment, 'prefix', 'fooNamespace', 'Comment should inherit namespace URI matching prefix');
+lookupNamespaceURI(comment, 'bar', 'barURI', 'Comment should inherit bar namespace');
+
+isDefaultNamespace(comment, null, false, 'For comment, empty namespace is not default');
+isDefaultNamespace(comment, '', false, 'For comment, empty namespace is not default');
+isDefaultNamespace(comment, 'fooNamespace', false, 'For comment, fooNamespace is not default');
+isDefaultNamespace(comment, 'http://www.w3.org/2000/xmlns/', false, 'For comment, xmlns namespace is not default');
+isDefaultNamespace(comment, 'barURI', false, 'For comment, inherited bar namespace is not default');
+isDefaultNamespace(comment, 'bazURI', true, 'For comment, inherited baz namespace is default');
+
+var fooChild = document.createElementNS('childNamespace', 'childElem');
+fooElem.appendChild(fooChild);
+
+lookupNamespaceURI(fooChild, null, 'childNamespace', 'Child element should inherit baz namespace');
+lookupNamespaceURI(fooChild, '', 'childNamespace', 'Child element should have null namespace');
+lookupNamespaceURI(fooChild, 'xmlns', null, 'Child element should not have XMLNS namespace');
+lookupNamespaceURI(fooChild, 'prefix', 'fooNamespace', 'Child element has namespace URI matching prefix');
+
+isDefaultNamespace(fooChild, null, false, 'Empty namespace is not default for child');
+isDefaultNamespace(fooChild, '', false, 'Empty namespace is not default for child');
+isDefaultNamespace(fooChild, 'fooNamespace', false, 'fooNamespace is not default for child');
+isDefaultNamespace(fooChild, 'http://www.w3.org/2000/xmlns/', false, 'xmlns namespace is not default for child');
+isDefaultNamespace(fooChild, 'barURI', false, 'bar namespace is not default for child');
+isDefaultNamespace(fooChild, 'bazURI', false, 'baz namespace is default for child');
+isDefaultNamespace(fooChild, 'childNamespace', true, 'childNamespace is default for child');
+
+document.documentElement.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:bar', 'barURI');
+document.documentElement.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns', 'bazURI');
+
+lookupNamespaceURI(document, null, 'http://www.w3.org/1999/xhtml', 'Document should have xhtml namespace');
+lookupNamespaceURI(document, '', 'http://www.w3.org/1999/xhtml', 'Document should have xhtml namespace');
+lookupNamespaceURI(document, 'prefix', null, 'Document has no namespace URI matching prefix');
+lookupNamespaceURI(document, 'bar', 'barURI', 'Document has bar namespace');
+
+isDefaultNamespace(document, null, false, 'For document, Empty namespace is not default');
+isDefaultNamespace(document, '', false, 'For document, Empty namespace is not default');
+isDefaultNamespace(document, 'fooNamespace', false, 'For document, fooNamespace is not default');
+isDefaultNamespace(document, 'http://www.w3.org/2000/xmlns/', false, 'For document, xmlns namespace is not default');
+isDefaultNamespace(document, 'barURI', false, 'For document, bar namespace is not default');
+isDefaultNamespace(document, 'bazURI', false, 'For document, baz namespace is not default');
+isDefaultNamespace(document, 'http://www.w3.org/1999/xhtml', true, 'For document, xhtml namespace is default');
+
+var comment = document.createComment('comment');
+document.appendChild(comment);
+lookupNamespaceURI(comment, 'bar', null, 'Comment does not have bar namespace');
+
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodelookupPrefixexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupPrefix-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupPrefix-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupPrefix-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+
+PASS Node.lookupPrefix
+PASS Node.lookupPrefix 1
+PASS Node.lookupPrefix 2
+PASS Node.lookupPrefix 3
+PASS Node.lookupPrefix 4
+PASS Node.lookupPrefix 5
+PASS Node.lookupPrefix 6
+PASS Node.lookupPrefix 7
+PASS Node.lookupPrefix 8
+PASS Node.lookupPrefix 9
+PASS Node.lookupPrefix 10
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodelookupPrefixxhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupPrefix-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupPrefix-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupPrefix-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+
+PASS Node.lookupPrefix
+PASS Node.lookupPrefix 1
+PASS Node.lookupPrefix 2
+PASS Node.lookupPrefix 3
+PASS Node.lookupPrefix 4
+PASS Node.lookupPrefix 5
+PASS Node.lookupPrefix 6
+PASS Node.lookupPrefix 7
+PASS Node.lookupPrefix 8
+PASS Node.lookupPrefix 9
+PASS Node.lookupPrefix 10
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodelookupPrefixxhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupPrefix-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupPrefix-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupPrefix-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:x="test">
+<head>
+<title>Node.lookupPrefix</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body xmlns:s="test">
+<div id="log"/>
+<x xmlns:t="test"><!-- comment --><?test test?>TEST<x/></x>
+<script>
+function lookupPrefix(node, ns, prefix) {
+ test(function() {
+ assert_equals(node.lookupPrefix(ns), prefix)
+ })
+}
+var x = document.getElementsByTagName("x")[0];
+lookupPrefix(document, "test", "x") // XXX add test for when there is no documentElement
+lookupPrefix(document, null, null)
+lookupPrefix(x, "http://www.w3.org/1999/xhtml", null)
+lookupPrefix(x, "something", null)
+lookupPrefix(x, null, null)
+lookupPrefix(x, "test", "t")
+lookupPrefix(x.parentNode, "test", "s")
+lookupPrefix(x.firstChild, "test", "t")
+lookupPrefix(x.childNodes[1], "test", "t")
+lookupPrefix(x.childNodes[2], "test", "t")
+lookupPrefix(x.lastChild, "test", "t")
+x.parentNode.removeChild(x)
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodenodeNameexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+
+FAIL For Element nodes, nodeName should return the same as tagName. assert_equals: expected "X:B" but got "x:b"
+PASS For Text nodes, nodeName should return "#text".
+PASS For Comment nodes, nodeName should return "#comment".
+PASS For Document nodes, nodeName should return "#document".
+PASS For DocumentType nodes, nodeName should return the name.
+PASS For DocumentFragment nodes, nodeName should return "#document-fragment".
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodenodeNamexhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+
+PASS For Element nodes, nodeName should return the same as tagName.
+PASS For Text nodes, nodeName should return "#text".
+PASS For ProcessingInstruction nodes, nodeName should return the target.
+PASS For Comment nodes, nodeName should return "#comment".
+PASS For Document nodes, nodeName should return "#document".
+PASS For DocumentType nodes, nodeName should return the name.
+PASS For DocumentFragment nodes, nodeName should return "#document-fragment".
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodenodeNamexhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,42 @@
</span><ins>+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Node.nodeName</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id="log"/>
+<script>
+test(function() {
+ var HTMLNS = "http://www.w3.org/1999/xhtml",
+ SVGNS = "http://www.w3.org/2000/svg"
+ assert_equals(document.createElementNS(HTMLNS, "I").nodeName, "I")
+ assert_equals(document.createElementNS(HTMLNS, "i").nodeName, "i")
+ assert_equals(document.createElementNS(SVGNS, "svg").nodeName, "svg")
+ assert_equals(document.createElementNS(SVGNS, "SVG").nodeName, "SVG")
+ assert_equals(document.createElementNS(HTMLNS, "x:b").nodeName, "x:b")
+}, "For Element nodes, nodeName should return the same as tagName.")
+test(function() {
+ assert_equals(document.createTextNode("foo").nodeName, "#text")
+}, "For Text nodes, nodeName should return \"#text\".")
+test(function() {
+ assert_equals(document.createProcessingInstruction("foo", "bar").nodeName,
+ "foo")
+}, "For ProcessingInstruction nodes, nodeName should return the target.")
+test(function() {
+ assert_equals(document.createComment("foo").nodeName, "#comment")
+}, "For Comment nodes, nodeName should return \"#comment\".")
+test(function() {
+ assert_equals(document.nodeName, "#document")
+}, "For Document nodes, nodeName should return \"#document\".")
+test(function() {
+ assert_equals(document.doctype.nodeName, "html")
+}, "For DocumentType nodes, nodeName should return the name.")
+test(function() {
+ assert_equals(document.createDocumentFragment().nodeName,
+ "#document-fragment")
+}, "For DocumentFragment nodes, nodeName should return \"#document-fragment\".")
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodenodeNamehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+<!DOCTYPE html>
+<title>Node.nodeName</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ var HTMLNS = "http://www.w3.org/1999/xhtml",
+ SVGNS = "http://www.w3.org/2000/svg"
+ assert_equals(document.createElementNS(HTMLNS, "I").nodeName, "I")
+ assert_equals(document.createElementNS(HTMLNS, "i").nodeName, "I")
+ assert_equals(document.createElementNS(SVGNS, "svg").nodeName, "svg")
+ assert_equals(document.createElementNS(SVGNS, "SVG").nodeName, "SVG")
+ assert_equals(document.createElementNS(HTMLNS, "x:b").nodeName, "X:B")
+}, "For Element nodes, nodeName should return the same as tagName.")
+test(function() {
+ assert_equals(document.createTextNode("foo").nodeName, "#text")
+}, "For Text nodes, nodeName should return \"#text\".")
+test(function() {
+ assert_equals(document.createComment("foo").nodeName, "#comment")
+}, "For Comment nodes, nodeName should return \"#comment\".")
+test(function() {
+ assert_equals(document.nodeName, "#document")
+}, "For Document nodes, nodeName should return \"#document\".")
+test(function() {
+ assert_equals(document.doctype.nodeName, "html")
+}, "For DocumentType nodes, nodeName should return the name.")
+test(function() {
+ assert_equals(document.createDocumentFragment().nodeName,
+ "#document-fragment")
+}, "For DocumentFragment nodes, nodeName should return \"#document-fragment\".")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodenodeValueexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeValue-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeValue-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeValue-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+
+PASS Text.nodeValue
+PASS Comment.nodeValue
+FAIL ProcessingInstruction.nodeValue NotSupportedError: DOM Exception 9
+PASS Element.nodeValue
+PASS Document.nodeValue
+PASS DocumentFragment.nodeValue
+PASS DocumentType.nodeValue
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodenodeValuehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeValue.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeValue.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeValue.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,71 @@
</span><ins>+<!doctype html>
+<meta charset=utf-8>
+<title>Node.nodeValue</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-node-nodevalue">
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<script>
+test(function() {
+ var the_text = document.createTextNode("A span!");
+ assert_equals(the_text.nodeValue, "A span!");
+ assert_equals(the_text.data, "A span!");
+ the_text.nodeValue = "test again";
+ assert_equals(the_text.nodeValue, "test again");
+ assert_equals(the_text.data, "test again");
+ the_text.nodeValue = null;
+ assert_equals(the_text.nodeValue, "");
+ assert_equals(the_text.data, "");
+}, "Text.nodeValue");
+
+test(function() {
+ var the_comment = document.createComment("A comment!");
+ assert_equals(the_comment.nodeValue, "A comment!");
+ assert_equals(the_comment.data, "A comment!");
+ the_comment.nodeValue = "test again";
+ assert_equals(the_comment.nodeValue, "test again");
+ assert_equals(the_comment.data, "test again");
+ the_comment.nodeValue = null;
+ assert_equals(the_comment.nodeValue, "");
+ assert_equals(the_comment.data, "");
+}, "Comment.nodeValue");
+
+test(function() {
+ var the_pi = document.createProcessingInstruction("pi", "A PI!");
+ assert_equals(the_pi.nodeValue, "A PI!");
+ assert_equals(the_pi.data, "A PI!");
+ the_pi.nodeValue = "test again";
+ assert_equals(the_pi.nodeValue, "test again");
+ assert_equals(the_pi.data, "test again");
+ the_pi.nodeValue = null;
+ assert_equals(the_pi.nodeValue, "");
+ assert_equals(the_pi.data, "");
+}, "ProcessingInstruction.nodeValue");
+
+test(function() {
+ var the_link = document.createElement("a");
+ assert_equals(the_link.nodeValue, null);
+ the_link.nodeValue = "foo";
+ assert_equals(the_link.nodeValue, null);
+}, "Element.nodeValue");
+
+test(function() {
+ assert_equals(document.nodeValue, null);
+ document.nodeValue = "foo";
+ assert_equals(document.nodeValue, null);
+}, "Document.nodeValue");
+
+test(function() {
+ var the_frag = document.createDocumentFragment();
+ assert_equals(the_frag.nodeValue, null);
+ the_frag.nodeValue = "foo";
+ assert_equals(the_frag.nodeValue, null);
+}, "DocumentFragment.nodeValue");
+
+test(function() {
+ var the_doctype = document.doctype;
+ assert_equals(the_doctype.nodeValue, null);
+ the_doctype.nodeValue = "foo";
+ assert_equals(the_doctype.nodeValue, null);
+}, "DocumentType.nodeValue");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodenormalizeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-normalize-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-normalize-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-normalize-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+
+PASS Node.normalize()
+PASS Empty text nodes separated by a non-empty text node
+PASS Empty text nodes
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodenormalizehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-normalize.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-normalize.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-normalize.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,54 @@
</span><ins>+<!DOCTYPE html>
+<title>Node.normalize()</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+test(function() {
+ var df = document.createDocumentFragment(),
+ t1 = document.createTextNode("1"),
+ t2 = document.createTextNode("2"),
+ t3 = document.createTextNode("3"),
+ t4 = document.createTextNode("4")
+ df.appendChild(t1)
+ df.appendChild(t2)
+ assert_equals(df.childNodes.length, 2)
+ assert_equals(df.textContent, "12")
+ var el = document.createElement('x')
+ df.appendChild(el)
+ el.appendChild(t3)
+ el.appendChild(t4)
+ document.normalize()
+ assert_equals(el.childNodes.length, 2)
+ assert_equals(el.textContent, "34")
+ assert_equals(df.childNodes.length, 3)
+ assert_equals(t1.data, "1")
+ df.normalize()
+ assert_equals(df.childNodes.length, 2)
+ assert_equals(df.firstChild, t1)
+ assert_equals(t1.data, "12")
+ assert_equals(t2.data, "2")
+ assert_equals(el.firstChild, t3)
+ assert_equals(t3.data, "34")
+ assert_equals(t4.data, "4")
+})
+
+// https://www.w3.org/Bugs/Public/show_bug.cgi?id=19837
+test(function() {
+ var div = document.createElement("div")
+ var t1 = div.appendChild(document.createTextNode(""))
+ var t2 = div.appendChild(document.createTextNode("a"))
+ var t3 = div.appendChild(document.createTextNode(""))
+ assert_array_equals(div.childNodes, [t1, t2, t3])
+ div.normalize();
+ assert_array_equals(div.childNodes, [t2])
+}, "Empty text nodes separated by a non-empty text node")
+test(function() {
+ var div = document.createElement("div")
+ var t1 = div.appendChild(document.createTextNode(""))
+ var t2 = div.appendChild(document.createTextNode(""))
+ assert_array_equals(div.childNodes, [t1, t2])
+ div.normalize();
+ assert_array_equals(div.childNodes, [])
+}, "Empty text nodes")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodeparentElementexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-parentElement-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-parentElement-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-parentElement-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+
+PASS When the parent is null, parentElement should be null
+PASS When the parent is a document, parentElement should be null (doctype)
+PASS When the parent is a document, parentElement should be null (element)
+PASS When the parent is a document, parentElement should be null (comment)
+PASS parentElement should return null for children of DocumentFragments (element)
+PASS parentElement should return null for children of DocumentFragments (text)
+PASS parentElement should work correctly with DocumentFragments (element)
+PASS parentElement should work correctly with DocumentFragments (text)
+PASS parentElement should work correctly in disconnected subtrees (element)
+PASS parentElement should work correctly in disconnected subtrees (text)
+PASS parentElement should work correctly in a document (element)
+PASS parentElement should work correctly in a document (text)
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodeparentElementhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-parentElement.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-parentElement.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-parentElement.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,83 @@
</span><ins>+<!DOCTYPE html>
+<title>Node.parentElement</title>
+<link rel="stylesheet" href="/resources/testharness.css">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ assert_equals(document.parentElement, null)
+}, "When the parent is null, parentElement should be null")
+test(function() {
+ assert_equals(document.doctype.parentElement, null)
+}, "When the parent is a document, parentElement should be null (doctype)")
+test(function() {
+ assert_equals(document.documentElement.parentElement, null)
+}, "When the parent is a document, parentElement should be null (element)")
+test(function() {
+ var comment = document.appendChild(document.createComment("foo"))
+ assert_equals(comment.parentElement, null)
+}, "When the parent is a document, parentElement should be null (comment)")
+test(function() {
+ var df = document.createDocumentFragment()
+ assert_equals(df.parentElement, null)
+ var el = document.createElement("div")
+ assert_equals(el.parentElement, null)
+ df.appendChild(el)
+ assert_equals(el.parentNode, df)
+ assert_equals(el.parentElement, null)
+}, "parentElement should return null for children of DocumentFragments (element)")
+test(function() {
+ var df = document.createDocumentFragment()
+ assert_equals(df.parentElement, null)
+ var text = document.createTextNode("bar")
+ assert_equals(text.parentElement, null)
+ df.appendChild(text)
+ assert_equals(text.parentNode, df)
+ assert_equals(text.parentElement, null)
+}, "parentElement should return null for children of DocumentFragments (text)")
+test(function() {
+ var df = document.createDocumentFragment()
+ var parent = document.createElement("div")
+ df.appendChild(parent)
+ var el = document.createElement("div")
+ assert_equals(el.parentElement, null)
+ parent.appendChild(el)
+ assert_equals(el.parentElement, parent)
+}, "parentElement should work correctly with DocumentFragments (element)")
+test(function() {
+ var df = document.createDocumentFragment()
+ var parent = document.createElement("div")
+ df.appendChild(parent)
+ var text = document.createTextNode("bar")
+ assert_equals(text.parentElement, null)
+ parent.appendChild(text)
+ assert_equals(text.parentElement, parent)
+}, "parentElement should work correctly with DocumentFragments (text)")
+test(function() {
+ var parent = document.createElement("div")
+ var el = document.createElement("div")
+ assert_equals(el.parentElement, null)
+ parent.appendChild(el)
+ assert_equals(el.parentElement, parent)
+}, "parentElement should work correctly in disconnected subtrees (element)")
+test(function() {
+ var parent = document.createElement("div")
+ var text = document.createTextNode("bar")
+ assert_equals(text.parentElement, null)
+ parent.appendChild(text)
+ assert_equals(text.parentElement, parent)
+}, "parentElement should work correctly in disconnected subtrees (text)")
+test(function() {
+ var el = document.createElement("div")
+ assert_equals(el.parentElement, null)
+ document.body.appendChild(el)
+ assert_equals(el.parentElement, document.body)
+}, "parentElement should work correctly in a document (element)")
+test(function() {
+ var text = document.createElement("div")
+ assert_equals(text.parentElement, null)
+ document.body.appendChild(text)
+ assert_equals(text.parentElement, document.body)
+}, "parentElement should work correctly in a document (text)")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodeparentNodeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-parentNode-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-parentNode-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-parentNode-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+
+PASS Document
+PASS Doctype
+PASS Root element
+PASS Element
+PASS Removed iframe
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodeparentNodehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-parentNode.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-parentNode.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-parentNode.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,33 @@
</span><ins>+<!DOCTYPE html>
+<title>Node.parentNode</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+// XXX need to test for more node types
+test(function() {
+ assert_equals(document.parentNode, null)
+}, "Document")
+test(function() {
+ assert_equals(document.doctype.parentNode, document)
+}, "Doctype")
+test(function() {
+ assert_equals(document.documentElement.parentNode, document)
+}, "Root element")
+test(function() {
+ var el = document.createElement("div")
+ assert_equals(el.parentNode, null)
+ document.body.appendChild(el)
+ assert_equals(el.parentNode, document.body)
+}, "Element")
+var t = async_test("Removed iframe");
+function testIframe(iframe) {
+ t.step(function() {
+ var doc = iframe.contentDocument;
+ iframe.parentNode.removeChild(iframe);
+ assert_equals(doc.firstChild.parentNode, doc);
+ });
+ t.done();
+}
+</script>
+<iframe id=a src="Node-parentNode-iframe.html" onload="testIframe(this)"></iframe>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodepropertiesexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-properties-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-properties-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-properties-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,698 @@
</span><ins>+
+PASS testDiv.nodeType
+PASS testDiv.ownerDocument
+PASS testDiv.parentNode
+PASS testDiv.parentElement
+PASS testDiv.childNodes.length
+PASS testDiv.childNodes[0]
+PASS testDiv.childNodes[1]
+PASS testDiv.childNodes[2]
+PASS testDiv.childNodes[3]
+PASS testDiv.childNodes[4]
+PASS testDiv.childNodes[5]
+PASS testDiv.previousSibling
+PASS testDiv.nextSibling
+PASS testDiv.textContent
+PASS testDiv.namespaceURI
+PASS testDiv.prefix
+PASS testDiv.localName
+PASS testDiv.tagName
+PASS testDiv.id
+PASS testDiv.children[0]
+PASS testDiv.children[1]
+PASS testDiv.children[2]
+PASS testDiv.children[3]
+PASS testDiv.children[4]
+PASS testDiv.previousElementSibling
+PASS testDiv.childElementCount
+PASS testDiv.nodeName
+PASS testDiv.nodeValue
+PASS testDiv.children.length
+PASS testDiv.className
+PASS testDiv.firstElementChild
+PASS testDiv.lastElementChild
+PASS testDiv.firstChild
+PASS testDiv.lastChild
+PASS testDiv.hasChildNodes()
+PASS detachedDiv.nodeType
+PASS detachedDiv.ownerDocument
+PASS detachedDiv.parentNode
+PASS detachedDiv.parentElement
+PASS detachedDiv.childNodes.length
+PASS detachedDiv.childNodes[0]
+PASS detachedDiv.childNodes[1]
+PASS detachedDiv.previousSibling
+PASS detachedDiv.nextSibling
+PASS detachedDiv.textContent
+PASS detachedDiv.namespaceURI
+PASS detachedDiv.prefix
+PASS detachedDiv.localName
+PASS detachedDiv.tagName
+PASS detachedDiv.children[0]
+PASS detachedDiv.children[1]
+PASS detachedDiv.previousElementSibling
+PASS detachedDiv.nextElementSibling
+PASS detachedDiv.childElementCount
+PASS detachedDiv.nodeName
+PASS detachedDiv.nodeValue
+PASS detachedDiv.children.length
+PASS detachedDiv.id
+PASS detachedDiv.className
+PASS detachedDiv.firstElementChild
+PASS detachedDiv.lastElementChild
+PASS detachedDiv.firstChild
+PASS detachedDiv.lastChild
+PASS detachedDiv.hasChildNodes()
+PASS detachedPara1.nodeType
+PASS detachedPara1.ownerDocument
+PASS detachedPara1.parentNode
+PASS detachedPara1.parentElement
+PASS detachedPara1.childNodes.length
+PASS detachedPara1.previousSibling
+PASS detachedPara1.nextSibling
+PASS detachedPara1.textContent
+PASS detachedPara1.namespaceURI
+PASS detachedPara1.prefix
+PASS detachedPara1.localName
+PASS detachedPara1.tagName
+PASS detachedPara1.previousElementSibling
+PASS detachedPara1.nextElementSibling
+PASS detachedPara1.childElementCount
+PASS detachedPara1.nodeName
+PASS detachedPara1.nodeValue
+PASS detachedPara1.children.length
+PASS detachedPara1.id
+PASS detachedPara1.className
+PASS detachedPara1.lastElementChild
+PASS detachedPara1.firstElementChild
+PASS detachedPara1.firstChild
+PASS detachedPara1.lastChild
+PASS detachedPara1.hasChildNodes()
+PASS detachedPara2.nodeType
+PASS detachedPara2.ownerDocument
+PASS detachedPara2.parentNode
+PASS detachedPara2.parentElement
+PASS detachedPara2.childNodes.length
+PASS detachedPara2.previousSibling
+PASS detachedPara2.nextSibling
+PASS detachedPara2.textContent
+PASS detachedPara2.namespaceURI
+PASS detachedPara2.prefix
+PASS detachedPara2.localName
+PASS detachedPara2.tagName
+PASS detachedPara2.previousElementSibling
+PASS detachedPara2.nextElementSibling
+PASS detachedPara2.childElementCount
+PASS detachedPara2.nodeName
+PASS detachedPara2.nodeValue
+PASS detachedPara2.children.length
+PASS detachedPara2.id
+PASS detachedPara2.className
+PASS detachedPara2.lastElementChild
+PASS detachedPara2.firstElementChild
+PASS detachedPara2.firstChild
+PASS detachedPara2.lastChild
+PASS detachedPara2.hasChildNodes()
+PASS document.nodeType
+PASS document.childNodes.length
+PASS document.childNodes[0]
+PASS document.childNodes[1]
+PASS document.URL
+PASS document.compatMode
+PASS document.characterSet
+PASS document.inputEncoding
+PASS document.contentType
+PASS document.doctype
+PASS document.nodeName
+PASS document.textContent
+PASS document.nodeValue
+PASS document.nextSibling
+PASS document.previousSibling
+PASS document.parentElement
+PASS document.parentNode
+PASS document.ownerDocument
+PASS document.documentURI
+PASS document.firstChild
+PASS document.lastChild
+PASS document.hasChildNodes()
+PASS foreignDoc.nodeType
+PASS foreignDoc.childNodes.length
+PASS foreignDoc.childNodes[0]
+PASS foreignDoc.childNodes[1]
+PASS foreignDoc.childNodes[2]
+FAIL foreignDoc.URL assert_equals: expected "about:blank" but got ""
+PASS foreignDoc.compatMode
+FAIL foreignDoc.characterSet assert_equals: expected (string) "UTF-8" but got (object) null
+FAIL foreignDoc.inputEncoding assert_equals: expected (string) "UTF-8" but got (object) null
+PASS foreignDoc.contentType
+PASS foreignDoc.nodeName
+PASS foreignDoc.textContent
+PASS foreignDoc.nodeValue
+PASS foreignDoc.nextSibling
+PASS foreignDoc.previousSibling
+PASS foreignDoc.parentElement
+PASS foreignDoc.parentNode
+PASS foreignDoc.ownerDocument
+FAIL foreignDoc.documentURI assert_equals: expected (string) "about:blank" but got (object) null
+PASS foreignDoc.firstChild
+PASS foreignDoc.lastChild
+PASS foreignDoc.hasChildNodes()
+PASS foreignPara1.nodeType
+PASS foreignPara1.ownerDocument
+PASS foreignPara1.parentNode
+PASS foreignPara1.parentElement
+PASS foreignPara1.childNodes.length
+PASS foreignPara1.previousSibling
+PASS foreignPara1.nextSibling
+PASS foreignPara1.textContent
+PASS foreignPara1.namespaceURI
+PASS foreignPara1.prefix
+PASS foreignPara1.localName
+PASS foreignPara1.tagName
+PASS foreignPara1.previousElementSibling
+PASS foreignPara1.nextElementSibling
+PASS foreignPara1.childElementCount
+PASS foreignPara1.nodeName
+PASS foreignPara1.nodeValue
+PASS foreignPara1.children.length
+PASS foreignPara1.id
+PASS foreignPara1.className
+PASS foreignPara1.lastElementChild
+PASS foreignPara1.firstElementChild
+PASS foreignPara1.firstChild
+PASS foreignPara1.lastChild
+PASS foreignPara1.hasChildNodes()
+PASS foreignPara2.nodeType
+PASS foreignPara2.ownerDocument
+PASS foreignPara2.parentNode
+PASS foreignPara2.parentElement
+PASS foreignPara2.childNodes.length
+PASS foreignPara2.previousSibling
+PASS foreignPara2.nextSibling
+PASS foreignPara2.textContent
+PASS foreignPara2.namespaceURI
+PASS foreignPara2.prefix
+PASS foreignPara2.localName
+PASS foreignPara2.tagName
+PASS foreignPara2.previousElementSibling
+PASS foreignPara2.nextElementSibling
+PASS foreignPara2.childElementCount
+PASS foreignPara2.nodeName
+PASS foreignPara2.nodeValue
+PASS foreignPara2.children.length
+PASS foreignPara2.id
+PASS foreignPara2.className
+PASS foreignPara2.lastElementChild
+PASS foreignPara2.firstElementChild
+PASS foreignPara2.firstChild
+PASS foreignPara2.lastChild
+PASS foreignPara2.hasChildNodes()
+PASS xmlDoc.nodeType
+PASS xmlDoc.childNodes.length
+PASS xmlDoc.childNodes[0]
+PASS xmlDoc.childNodes[1]
+PASS xmlDoc.childNodes[2]
+PASS xmlDoc.childNodes[3]
+FAIL xmlDoc.URL assert_equals: expected "about:blank" but got ""
+PASS xmlDoc.compatMode
+FAIL xmlDoc.characterSet assert_equals: expected (string) "UTF-8" but got (object) null
+FAIL xmlDoc.inputEncoding assert_equals: expected (string) "UTF-8" but got (object) null
+PASS xmlDoc.contentType
+PASS xmlDoc.nodeName
+PASS xmlDoc.textContent
+PASS xmlDoc.nodeValue
+PASS xmlDoc.nextSibling
+PASS xmlDoc.previousSibling
+PASS xmlDoc.parentElement
+PASS xmlDoc.parentNode
+PASS xmlDoc.ownerDocument
+FAIL xmlDoc.documentURI assert_equals: expected (string) "about:blank" but got (object) null
+PASS xmlDoc.firstChild
+PASS xmlDoc.lastChild
+PASS xmlDoc.hasChildNodes()
+PASS xmlElement.nodeType
+PASS xmlElement.ownerDocument
+PASS xmlElement.parentNode
+PASS xmlElement.parentElement
+PASS xmlElement.childNodes.length
+PASS xmlElement.childNodes[0]
+PASS xmlElement.previousSibling
+PASS xmlElement.nextSibling
+PASS xmlElement.textContent
+FAIL xmlElement.namespaceURI assert_equals: expected (string) "http://www.w3.org/1999/xhtml" but got (object) null
+PASS xmlElement.prefix
+PASS xmlElement.localName
+PASS xmlElement.tagName
+PASS xmlElement.previousElementSibling
+PASS xmlElement.nextElementSibling
+PASS xmlElement.childElementCount
+PASS xmlElement.nodeName
+PASS xmlElement.nodeValue
+PASS xmlElement.children.length
+PASS xmlElement.id
+PASS xmlElement.className
+PASS xmlElement.lastElementChild
+PASS xmlElement.firstElementChild
+PASS xmlElement.firstChild
+PASS xmlElement.lastChild
+PASS xmlElement.hasChildNodes()
+PASS detachedXmlElement.nodeType
+PASS detachedXmlElement.ownerDocument
+PASS detachedXmlElement.parentNode
+PASS detachedXmlElement.parentElement
+PASS detachedXmlElement.childNodes.length
+PASS detachedXmlElement.previousSibling
+PASS detachedXmlElement.nextSibling
+PASS detachedXmlElement.textContent
+FAIL detachedXmlElement.namespaceURI assert_equals: expected (string) "http://www.w3.org/1999/xhtml" but got (object) null
+PASS detachedXmlElement.prefix
+PASS detachedXmlElement.localName
+PASS detachedXmlElement.tagName
+PASS detachedXmlElement.previousElementSibling
+PASS detachedXmlElement.nextElementSibling
+PASS detachedXmlElement.childElementCount
+PASS detachedXmlElement.nodeName
+PASS detachedXmlElement.nodeValue
+PASS detachedXmlElement.children.length
+PASS detachedXmlElement.id
+PASS detachedXmlElement.className
+PASS detachedXmlElement.lastElementChild
+PASS detachedXmlElement.firstElementChild
+PASS detachedXmlElement.lastChild
+PASS detachedXmlElement.firstChild
+PASS detachedXmlElement.hasChildNodes()
+PASS detachedTextNode.nodeType
+PASS detachedTextNode.ownerDocument
+PASS detachedTextNode.parentNode
+PASS detachedTextNode.parentElement
+PASS detachedTextNode.previousSibling
+PASS detachedTextNode.nextSibling
+PASS detachedTextNode.nodeValue
+PASS detachedTextNode.wholeText
+PASS detachedTextNode.nodeName
+PASS detachedTextNode.childNodes.length
+PASS detachedTextNode.data
+PASS detachedTextNode.textContent
+PASS detachedTextNode.length
+PASS detachedTextNode.lastChild
+PASS detachedTextNode.firstChild
+PASS detachedTextNode.hasChildNodes()
+PASS foreignTextNode.nodeType
+PASS foreignTextNode.ownerDocument
+PASS foreignTextNode.parentNode
+PASS foreignTextNode.parentElement
+PASS foreignTextNode.previousSibling
+PASS foreignTextNode.nextSibling
+PASS foreignTextNode.nodeValue
+PASS foreignTextNode.wholeText
+PASS foreignTextNode.nodeName
+PASS foreignTextNode.childNodes.length
+PASS foreignTextNode.data
+PASS foreignTextNode.textContent
+PASS foreignTextNode.length
+PASS foreignTextNode.lastChild
+PASS foreignTextNode.firstChild
+PASS foreignTextNode.hasChildNodes()
+PASS detachedForeignTextNode.nodeType
+PASS detachedForeignTextNode.ownerDocument
+PASS detachedForeignTextNode.parentNode
+PASS detachedForeignTextNode.parentElement
+PASS detachedForeignTextNode.previousSibling
+PASS detachedForeignTextNode.nextSibling
+PASS detachedForeignTextNode.nodeValue
+PASS detachedForeignTextNode.wholeText
+PASS detachedForeignTextNode.nodeName
+PASS detachedForeignTextNode.childNodes.length
+PASS detachedForeignTextNode.data
+PASS detachedForeignTextNode.textContent
+PASS detachedForeignTextNode.length
+PASS detachedForeignTextNode.lastChild
+PASS detachedForeignTextNode.firstChild
+PASS detachedForeignTextNode.hasChildNodes()
+PASS xmlTextNode.nodeType
+PASS xmlTextNode.ownerDocument
+PASS xmlTextNode.parentNode
+PASS xmlTextNode.parentElement
+PASS xmlTextNode.previousSibling
+PASS xmlTextNode.nextSibling
+PASS xmlTextNode.nodeValue
+PASS xmlTextNode.wholeText
+PASS xmlTextNode.nodeName
+PASS xmlTextNode.childNodes.length
+PASS xmlTextNode.data
+PASS xmlTextNode.textContent
+PASS xmlTextNode.length
+PASS xmlTextNode.lastChild
+PASS xmlTextNode.firstChild
+PASS xmlTextNode.hasChildNodes()
+PASS detachedXmlTextNode.nodeType
+PASS detachedXmlTextNode.ownerDocument
+PASS detachedXmlTextNode.parentNode
+PASS detachedXmlTextNode.parentElement
+PASS detachedXmlTextNode.previousSibling
+PASS detachedXmlTextNode.nextSibling
+PASS detachedXmlTextNode.nodeValue
+PASS detachedXmlTextNode.wholeText
+PASS detachedXmlTextNode.nodeName
+PASS detachedXmlTextNode.childNodes.length
+PASS detachedXmlTextNode.data
+PASS detachedXmlTextNode.textContent
+PASS detachedXmlTextNode.length
+PASS detachedXmlTextNode.lastChild
+PASS detachedXmlTextNode.firstChild
+PASS detachedXmlTextNode.hasChildNodes()
+PASS processingInstruction.nodeType
+PASS processingInstruction.ownerDocument
+PASS processingInstruction.parentNode
+PASS processingInstruction.parentElement
+PASS processingInstruction.previousSibling
+PASS processingInstruction.nextSibling
+PASS processingInstruction.nodeValue
+PASS processingInstruction.target
+PASS processingInstruction.nodeName
+PASS processingInstruction.childNodes.length
+PASS processingInstruction.data
+PASS processingInstruction.textContent
+PASS processingInstruction.length
+PASS processingInstruction.lastChild
+PASS processingInstruction.firstChild
+PASS processingInstruction.hasChildNodes()
+PASS detachedProcessingInstruction.nodeType
+PASS detachedProcessingInstruction.ownerDocument
+PASS detachedProcessingInstruction.parentNode
+PASS detachedProcessingInstruction.parentElement
+PASS detachedProcessingInstruction.previousSibling
+PASS detachedProcessingInstruction.nextSibling
+PASS detachedProcessingInstruction.nodeValue
+PASS detachedProcessingInstruction.target
+PASS detachedProcessingInstruction.nodeName
+PASS detachedProcessingInstruction.childNodes.length
+PASS detachedProcessingInstruction.data
+PASS detachedProcessingInstruction.textContent
+PASS detachedProcessingInstruction.length
+PASS detachedProcessingInstruction.lastChild
+PASS detachedProcessingInstruction.firstChild
+PASS detachedProcessingInstruction.hasChildNodes()
+PASS comment.nodeType
+PASS comment.ownerDocument
+PASS comment.parentNode
+PASS comment.parentElement
+PASS comment.previousSibling
+PASS comment.nextSibling
+PASS comment.nodeValue
+PASS comment.nodeName
+PASS comment.childNodes.length
+PASS comment.data
+PASS comment.textContent
+PASS comment.length
+PASS comment.lastChild
+PASS comment.firstChild
+PASS comment.hasChildNodes()
+PASS detachedComment.nodeType
+PASS detachedComment.ownerDocument
+PASS detachedComment.parentNode
+PASS detachedComment.parentElement
+PASS detachedComment.previousSibling
+PASS detachedComment.nextSibling
+PASS detachedComment.nodeValue
+PASS detachedComment.nodeName
+PASS detachedComment.childNodes.length
+PASS detachedComment.data
+PASS detachedComment.textContent
+PASS detachedComment.length
+PASS detachedComment.lastChild
+PASS detachedComment.firstChild
+PASS detachedComment.hasChildNodes()
+PASS foreignComment.nodeType
+PASS foreignComment.ownerDocument
+PASS foreignComment.parentNode
+PASS foreignComment.parentElement
+PASS foreignComment.previousSibling
+PASS foreignComment.nextSibling
+PASS foreignComment.nodeValue
+PASS foreignComment.nodeName
+PASS foreignComment.childNodes.length
+PASS foreignComment.data
+PASS foreignComment.textContent
+PASS foreignComment.length
+PASS foreignComment.lastChild
+PASS foreignComment.firstChild
+PASS foreignComment.hasChildNodes()
+PASS detachedForeignComment.nodeType
+PASS detachedForeignComment.ownerDocument
+PASS detachedForeignComment.parentNode
+PASS detachedForeignComment.parentElement
+PASS detachedForeignComment.previousSibling
+PASS detachedForeignComment.nextSibling
+FAIL detachedForeignComment.nodeValue assert_equals: expected "אריה יהודה" but got "×ריה יהודה"
+PASS detachedForeignComment.nodeName
+PASS detachedForeignComment.childNodes.length
+FAIL detachedForeignComment.data assert_equals: expected "אריה יהודה" but got "×ריה יהודה"
+FAIL detachedForeignComment.textContent assert_equals: expected "אריה יהודה" but got "×ריה יהודה"
+FAIL detachedForeignComment.length assert_equals: expected 10 but got 19
+PASS detachedForeignComment.lastChild
+PASS detachedForeignComment.firstChild
+PASS detachedForeignComment.hasChildNodes()
+PASS xmlComment.nodeType
+PASS xmlComment.ownerDocument
+PASS xmlComment.parentNode
+PASS xmlComment.parentElement
+PASS xmlComment.previousSibling
+PASS xmlComment.nextSibling
+PASS xmlComment.nodeValue
+PASS xmlComment.nodeName
+PASS xmlComment.childNodes.length
+PASS xmlComment.data
+PASS xmlComment.textContent
+PASS xmlComment.length
+PASS xmlComment.lastChild
+PASS xmlComment.firstChild
+PASS xmlComment.hasChildNodes()
+PASS detachedXmlComment.nodeType
+PASS detachedXmlComment.ownerDocument
+PASS detachedXmlComment.parentNode
+PASS detachedXmlComment.parentElement
+PASS detachedXmlComment.previousSibling
+PASS detachedXmlComment.nextSibling
+FAIL detachedXmlComment.nodeValue assert_equals: expected "בן חיים אליעזר" but got "בן ×—×™×™× ×ליעזר"
+PASS detachedXmlComment.nodeName
+PASS detachedXmlComment.childNodes.length
+FAIL detachedXmlComment.data assert_equals: expected "בן חיים אליעזר" but got "בן ×—×™×™× ×ליעזר"
+FAIL detachedXmlComment.textContent assert_equals: expected "בן חיים אליעזר" but got "בן ×—×™×™× ×ליעזר"
+FAIL detachedXmlComment.length assert_equals: expected 14 but got 26
+PASS detachedXmlComment.lastChild
+PASS detachedXmlComment.firstChild
+PASS detachedXmlComment.hasChildNodes()
+PASS docfrag.nodeType
+PASS docfrag.ownerDocument
+PASS docfrag.childNodes.length
+PASS docfrag.textContent
+PASS docfrag.nodeName
+PASS docfrag.nodeValue
+PASS docfrag.nextSibling
+PASS docfrag.previousSibling
+PASS docfrag.parentElement
+PASS docfrag.parentNode
+PASS docfrag.lastChild
+PASS docfrag.firstChild
+PASS docfrag.hasChildNodes()
+PASS foreignDocfrag.nodeType
+PASS foreignDocfrag.ownerDocument
+PASS foreignDocfrag.childNodes.length
+PASS foreignDocfrag.textContent
+PASS foreignDocfrag.nodeName
+PASS foreignDocfrag.nodeValue
+PASS foreignDocfrag.nextSibling
+PASS foreignDocfrag.previousSibling
+PASS foreignDocfrag.parentElement
+PASS foreignDocfrag.parentNode
+PASS foreignDocfrag.lastChild
+PASS foreignDocfrag.firstChild
+PASS foreignDocfrag.hasChildNodes()
+PASS xmlDocfrag.nodeType
+PASS xmlDocfrag.ownerDocument
+PASS xmlDocfrag.childNodes.length
+PASS xmlDocfrag.textContent
+PASS xmlDocfrag.nodeName
+PASS xmlDocfrag.nodeValue
+PASS xmlDocfrag.nextSibling
+PASS xmlDocfrag.previousSibling
+PASS xmlDocfrag.parentElement
+PASS xmlDocfrag.parentNode
+PASS xmlDocfrag.lastChild
+PASS xmlDocfrag.firstChild
+PASS xmlDocfrag.hasChildNodes()
+PASS doctype.nodeType
+PASS doctype.ownerDocument
+PASS doctype.parentNode
+PASS doctype.previousSibling
+PASS doctype.nextSibling
+PASS doctype.name
+FAIL doctype.publicId assert_equals: expected (string) "" but got (object) null
+FAIL doctype.systemId assert_equals: expected (string) "" but got (object) null
+PASS doctype.nodeName
+PASS doctype.childNodes.length
+PASS doctype.textContent
+PASS doctype.nodeValue
+PASS doctype.parentElement
+PASS doctype.lastChild
+PASS doctype.firstChild
+PASS doctype.hasChildNodes()
+PASS foreignDoctype.nodeType
+PASS foreignDoctype.ownerDocument
+PASS foreignDoctype.parentNode
+PASS foreignDoctype.previousSibling
+PASS foreignDoctype.nextSibling
+PASS foreignDoctype.name
+FAIL foreignDoctype.publicId assert_equals: expected (string) "" but got (object) null
+FAIL foreignDoctype.systemId assert_equals: expected (string) "" but got (object) null
+PASS foreignDoctype.nodeName
+PASS foreignDoctype.childNodes.length
+PASS foreignDoctype.textContent
+PASS foreignDoctype.nodeValue
+PASS foreignDoctype.parentElement
+PASS foreignDoctype.lastChild
+PASS foreignDoctype.firstChild
+PASS foreignDoctype.hasChildNodes()
+PASS xmlDoctype.nodeType
+PASS xmlDoctype.ownerDocument
+PASS xmlDoctype.parentNode
+PASS xmlDoctype.previousSibling
+PASS xmlDoctype.nextSibling
+PASS xmlDoctype.name
+PASS xmlDoctype.publicId
+PASS xmlDoctype.systemId
+PASS xmlDoctype.nodeName
+PASS xmlDoctype.childNodes.length
+PASS xmlDoctype.textContent
+PASS xmlDoctype.nodeValue
+PASS xmlDoctype.parentElement
+PASS xmlDoctype.lastChild
+PASS xmlDoctype.firstChild
+PASS xmlDoctype.hasChildNodes()
+PASS paras[0].nodeType
+PASS paras[0].ownerDocument
+PASS paras[0].parentNode
+PASS paras[0].parentElement
+PASS paras[0].childNodes.length
+PASS paras[0].previousSibling
+PASS paras[0].nextSibling
+PASS paras[0].textContent
+PASS paras[0].namespaceURI
+PASS paras[0].prefix
+PASS paras[0].localName
+PASS paras[0].tagName
+PASS paras[0].id
+PASS paras[0].previousElementSibling
+PASS paras[0].nextElementSibling
+PASS paras[0].childElementCount
+PASS paras[0].nodeName
+PASS paras[0].nodeValue
+PASS paras[0].children.length
+PASS paras[0].className
+PASS paras[0].lastElementChild
+PASS paras[0].firstElementChild
+PASS paras[0].firstChild
+PASS paras[0].lastChild
+PASS paras[0].hasChildNodes()
+PASS paras[1].nodeType
+PASS paras[1].ownerDocument
+PASS paras[1].parentNode
+PASS paras[1].parentElement
+PASS paras[1].childNodes.length
+PASS paras[1].previousSibling
+PASS paras[1].nextSibling
+PASS paras[1].textContent
+PASS paras[1].namespaceURI
+PASS paras[1].prefix
+PASS paras[1].localName
+PASS paras[1].tagName
+PASS paras[1].id
+PASS paras[1].previousElementSibling
+PASS paras[1].nextElementSibling
+PASS paras[1].childElementCount
+PASS paras[1].nodeName
+PASS paras[1].nodeValue
+PASS paras[1].children.length
+PASS paras[1].className
+PASS paras[1].lastElementChild
+PASS paras[1].firstElementChild
+PASS paras[1].firstChild
+PASS paras[1].lastChild
+PASS paras[1].hasChildNodes()
+PASS paras[2].nodeType
+PASS paras[2].ownerDocument
+PASS paras[2].parentNode
+PASS paras[2].parentElement
+PASS paras[2].childNodes.length
+PASS paras[2].previousSibling
+PASS paras[2].nextSibling
+PASS paras[2].textContent
+PASS paras[2].namespaceURI
+PASS paras[2].prefix
+PASS paras[2].localName
+PASS paras[2].tagName
+PASS paras[2].id
+PASS paras[2].previousElementSibling
+PASS paras[2].nextElementSibling
+PASS paras[2].childElementCount
+PASS paras[2].nodeName
+PASS paras[2].nodeValue
+PASS paras[2].children.length
+PASS paras[2].className
+PASS paras[2].lastElementChild
+PASS paras[2].firstElementChild
+PASS paras[2].firstChild
+PASS paras[2].lastChild
+PASS paras[2].hasChildNodes()
+PASS paras[3].nodeType
+PASS paras[3].ownerDocument
+PASS paras[3].parentNode
+PASS paras[3].parentElement
+PASS paras[3].childNodes.length
+PASS paras[3].previousSibling
+PASS paras[3].nextSibling
+PASS paras[3].textContent
+PASS paras[3].namespaceURI
+PASS paras[3].prefix
+PASS paras[3].localName
+PASS paras[3].tagName
+PASS paras[3].id
+PASS paras[3].previousElementSibling
+PASS paras[3].nextElementSibling
+PASS paras[3].childElementCount
+PASS paras[3].nodeName
+PASS paras[3].nodeValue
+PASS paras[3].children.length
+PASS paras[3].className
+PASS paras[3].lastElementChild
+PASS paras[3].firstElementChild
+PASS paras[3].firstChild
+PASS paras[3].lastChild
+PASS paras[3].hasChildNodes()
+PASS paras[4].nodeType
+PASS paras[4].ownerDocument
+PASS paras[4].parentNode
+PASS paras[4].parentElement
+PASS paras[4].childNodes.length
+PASS paras[4].previousSibling
+PASS paras[4].nextSibling
+PASS paras[4].textContent
+PASS paras[4].namespaceURI
+PASS paras[4].prefix
+PASS paras[4].localName
+PASS paras[4].tagName
+PASS paras[4].id
+PASS paras[4].previousElementSibling
+PASS paras[4].nextElementSibling
+PASS paras[4].childElementCount
+PASS paras[4].nodeName
+PASS paras[4].nodeValue
+PASS paras[4].children.length
+PASS paras[4].className
+PASS paras[4].lastElementChild
+PASS paras[4].firstElementChild
+PASS paras[4].firstChild
+PASS paras[4].lastChild
+PASS paras[4].hasChildNodes()
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodepropertieshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-properties.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-properties.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-properties.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,689 @@
</span><ins>+<!doctype html>
+<title>Node assorted property tests</title>
+<link rel=author title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta charset=utf-8>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+/**
+ * First we define a data structure to tell us what tests to run. The keys
+ * will be eval()ed, and are mostly global variables defined in common.js. The
+ * values are objects, which maps properties to expected values. So
+ *
+ * foo: {
+ * bar: "baz",
+ * quz: 7,
+ * },
+ *
+ * will test that eval("foo.bar") === "baz" and eval("foo.quz") === 7. "foo"
+ * and "bar" could thus be expressions, like "document.documentElement" and
+ * "childNodes[4]" respectively.
+ *
+ * To avoid repetition, some values are automatically added based on others.
+ * For instance, if we specify nodeType: Node.TEXT_NODE, we'll automatically
+ * also test nodeName: "#text". This is handled by code after this variable is
+ * defined.
+ */
+var expected = {
+ testDiv: {
+ // Node
+ nodeType: Node.ELEMENT_NODE,
+ ownerDocument: document,
+ parentNode: document.body,
+ parentElement: document.body,
+ "childNodes.length": 6,
+ "childNodes[0]": paras[0],
+ "childNodes[1]": paras[1],
+ "childNodes[2]": paras[2],
+ "childNodes[3]": paras[3],
+ "childNodes[4]": paras[4],
+ "childNodes[5]": comment,
+ previousSibling: null,
+ nextSibling: document.getElementById("log"),
+ textContent: "A\u0308b\u0308c\u0308d\u0308e\u0308f\u0308g\u0308h\u0308\nIjklmnop\nQrstuvwxYzabcdefGhijklmn",
+
+ // Element
+ namespaceURI: "http://www.w3.org/1999/xhtml",
+ prefix: null,
+ localName: "div",
+ tagName: "DIV",
+ id: "test",
+ "children[0]": paras[0],
+ "children[1]": paras[1],
+ "children[2]": paras[2],
+ "children[3]": paras[3],
+ "children[4]": paras[4],
+ previousElementSibling: null,
+ // nextSibling isn't explicitly set
+ //nextElementSibling: ,
+ childElementCount: 5,
+ },
+ detachedDiv: {
+ // Node
+ nodeType: Node.ELEMENT_NODE,
+ ownerDocument: document,
+ parentNode: null,
+ parentElement: null,
+ "childNodes.length": 2,
+ "childNodes[0]": detachedPara1,
+ "childNodes[1]": detachedPara2,
+ previousSibling: null,
+ nextSibling: null,
+ textContent: "OpqrstuvWxyzabcd",
+
+ // Element
+ namespaceURI: "http://www.w3.org/1999/xhtml",
+ prefix: null,
+ localName: "div",
+ tagName: "DIV",
+ "children[0]": detachedPara1,
+ "children[1]": detachedPara2,
+ previousElementSibling: null,
+ nextElementSibling: null,
+ childElementCount: 2,
+ },
+ detachedPara1: {
+ // Node
+ nodeType: Node.ELEMENT_NODE,
+ ownerDocument: document,
+ parentNode: detachedDiv,
+ parentElement: detachedDiv,
+ "childNodes.length": 1,
+ previousSibling: null,
+ nextSibling: detachedPara2,
+ textContent: "Opqrstuv",
+
+ // Element
+ namespaceURI: "http://www.w3.org/1999/xhtml",
+ prefix: null,
+ localName: "p",
+ tagName: "P",
+ previousElementSibling: null,
+ nextElementSibling: detachedPara2,
+ childElementCount: 0,
+ },
+ detachedPara2: {
+ // Node
+ nodeType: Node.ELEMENT_NODE,
+ ownerDocument: document,
+ parentNode: detachedDiv,
+ parentElement: detachedDiv,
+ "childNodes.length": 1,
+ previousSibling: detachedPara1,
+ nextSibling: null,
+ textContent: "Wxyzabcd",
+
+ // Element
+ namespaceURI: "http://www.w3.org/1999/xhtml",
+ prefix: null,
+ localName: "p",
+ tagName: "P",
+ previousElementSibling: detachedPara1,
+ nextElementSibling: null,
+ childElementCount: 0,
+ },
+ document: {
+ // Node
+ nodeType: Node.DOCUMENT_NODE,
+ "childNodes.length": 2,
+ "childNodes[0]": document.doctype,
+ "childNodes[1]": document.documentElement,
+
+ // Document
+ URL: String(location),
+ compatMode: "CSS1Compat",
+ characterSet: "UTF-8",
+ inputEncoding: "UTF-8",
+ contentType: "text/html",
+ doctype: doctype,
+ //documentElement: ,
+ },
+ foreignDoc: {
+ // Node
+ nodeType: Node.DOCUMENT_NODE,
+ "childNodes.length": 3,
+ "childNodes[0]": foreignDoc.doctype,
+ "childNodes[1]": foreignDoc.documentElement,
+ "childNodes[2]": foreignComment,
+
+ // Document
+ URL: "about:blank",
+ compatMode: "CSS1Compat",
+ characterSet: "UTF-8",
+ inputEncoding: "UTF-8",
+ contentType: "text/html",
+ //doctype: ,
+ //documentElement: ,
+ },
+ foreignPara1: {
+ // Node
+ nodeType: Node.ELEMENT_NODE,
+ ownerDocument: foreignDoc,
+ parentNode: foreignDoc.body,
+ parentElement: foreignDoc.body,
+ "childNodes.length": 1,
+ previousSibling: null,
+ nextSibling: foreignPara2,
+ textContent: "Efghijkl",
+
+ // Element
+ namespaceURI: "http://www.w3.org/1999/xhtml",
+ prefix: null,
+ localName: "p",
+ tagName: "P",
+ previousElementSibling: null,
+ nextElementSibling: foreignPara2,
+ childElementCount: 0,
+ },
+ foreignPara2: {
+ // Node
+ nodeType: Node.ELEMENT_NODE,
+ ownerDocument: foreignDoc,
+ parentNode: foreignDoc.body,
+ parentElement: foreignDoc.body,
+ "childNodes.length": 1,
+ previousSibling: foreignPara1,
+ nextSibling: foreignTextNode,
+ textContent: "Mnopqrst",
+
+ // Element
+ namespaceURI: "http://www.w3.org/1999/xhtml",
+ prefix: null,
+ localName: "p",
+ tagName: "P",
+ previousElementSibling: foreignPara1,
+ nextElementSibling: null,
+ childElementCount: 0,
+ },
+ xmlDoc: {
+ // Node
+ nodeType: Node.DOCUMENT_NODE,
+ "childNodes.length": 4,
+ "childNodes[0]": xmlDoctype,
+ "childNodes[1]": xmlElement,
+ "childNodes[2]": processingInstruction,
+ "childNodes[3]": xmlComment,
+
+ // Document
+ URL: "about:blank",
+ compatMode: "CSS1Compat",
+ characterSet: "UTF-8",
+ inputEncoding: "UTF-8",
+ contentType: "application/xml",
+ //doctype: ,
+ //documentElement: ,
+ },
+ xmlElement: {
+ // Node
+ nodeType: Node.ELEMENT_NODE,
+ ownerDocument: xmlDoc,
+ parentNode: xmlDoc,
+ parentElement: null,
+ "childNodes.length": 1,
+ "childNodes[0]": xmlTextNode,
+ previousSibling: xmlDoctype,
+ nextSibling: processingInstruction,
+ textContent: "do re mi fa so la ti",
+
+ // Element
+ namespaceURI: "http://www.w3.org/1999/xhtml",
+ prefix: null,
+ localName: "igiveuponcreativenames",
+ tagName: "igiveuponcreativenames",
+ previousElementSibling: null,
+ nextElementSibling: null,
+ childElementCount: 0,
+ },
+ detachedXmlElement: {
+ // Node
+ nodeType: Node.ELEMENT_NODE,
+ ownerDocument: xmlDoc,
+ parentNode: null,
+ parentElement: null,
+ "childNodes.length": 0,
+ previousSibling: null,
+ nextSibling: null,
+ textContent: "",
+
+ // Element
+ namespaceURI: "http://www.w3.org/1999/xhtml",
+ prefix: null,
+ localName: "everyone-hates-hyphenated-element-names",
+ tagName: "everyone-hates-hyphenated-element-names",
+ previousElementSibling: null,
+ nextElementSibling: null,
+ childElementCount: 0,
+ },
+ detachedTextNode: {
+ // Node
+ nodeType: Node.TEXT_NODE,
+ ownerDocument: document,
+ parentNode: null,
+ parentElement: null,
+ previousSibling: null,
+ nextSibling: null,
+ nodeValue: "Uvwxyzab",
+
+ // Text
+ wholeText: "Uvwxyzab",
+ },
+ foreignTextNode: {
+ // Node
+ nodeType: Node.TEXT_NODE,
+ ownerDocument: foreignDoc,
+ parentNode: foreignDoc.body,
+ parentElement: foreignDoc.body,
+ previousSibling: foreignPara2,
+ nextSibling: null,
+ nodeValue: "I admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now.",
+
+ // Text
+ wholeText: "I admit that I harbor doubts about whether we really need so many things to test, but it's too late to stop now.",
+ },
+ detachedForeignTextNode: {
+ // Node
+ nodeType: Node.TEXT_NODE,
+ ownerDocument: foreignDoc,
+ parentNode: null,
+ parentElement: null,
+ previousSibling: null,
+ nextSibling: null,
+ nodeValue: "Cdefghij",
+
+ // Text
+ wholeText: "Cdefghij",
+ },
+ xmlTextNode: {
+ // Node
+ nodeType: Node.TEXT_NODE,
+ ownerDocument: xmlDoc,
+ parentNode: xmlElement,
+ parentElement: xmlElement,
+ previousSibling: null,
+ nextSibling: null,
+ nodeValue: "do re mi fa so la ti",
+
+ // Text
+ wholeText: "do re mi fa so la ti",
+ },
+ detachedXmlTextNode: {
+ // Node
+ nodeType: Node.TEXT_NODE,
+ ownerDocument: xmlDoc,
+ parentNode: null,
+ parentElement: null,
+ previousSibling: null,
+ nextSibling: null,
+ nodeValue: "Klmnopqr",
+
+ // Text
+ wholeText: "Klmnopqr",
+ },
+ processingInstruction: {
+ // Node
+ nodeType: Node.PROCESSING_INSTRUCTION_NODE,
+ ownerDocument: xmlDoc,
+ parentNode: xmlDoc,
+ parentElement: null,
+ previousSibling: xmlElement,
+ nextSibling: xmlComment,
+ nodeValue: 'Did you know that ":syn sync fromstart" is very useful when using vim to edit large amounts of JavaScript embedded in HTML?',
+
+ // ProcessingInstruction
+ target: "somePI",
+ },
+ detachedProcessingInstruction: {
+ // Node
+ nodeType: Node.PROCESSING_INSTRUCTION_NODE,
+ ownerDocument: xmlDoc,
+ parentNode: null,
+ parentElement: null,
+ previousSibling: null,
+ nextSibling: null,
+ nodeValue: "chirp chirp chirp",
+
+ // ProcessingInstruction
+ target: "whippoorwill",
+ },
+ comment: {
+ // Node
+ nodeType: Node.COMMENT_NODE,
+ ownerDocument: document,
+ parentNode: testDiv,
+ parentElement: testDiv,
+ previousSibling: paras[4],
+ nextSibling: null,
+ nodeValue: "Alphabet soup?",
+ },
+ detachedComment: {
+ // Node
+ nodeType: Node.COMMENT_NODE,
+ ownerDocument: document,
+ parentNode: null,
+ parentElement: null,
+ previousSibling: null,
+ nextSibling: null,
+ nodeValue: "Stuvwxyz",
+ },
+ foreignComment: {
+ // Node
+ nodeType: Node.COMMENT_NODE,
+ ownerDocument: foreignDoc,
+ parentNode: foreignDoc,
+ parentElement: null,
+ previousSibling: foreignDoc.documentElement,
+ nextSibling: null,
+ nodeValue: '"Commenter" and "commentator" mean different things. I\'ve seen non-native speakers trip up on this.',
+ },
+ detachedForeignComment: {
+ // Node
+ nodeType: Node.COMMENT_NODE,
+ ownerDocument: foreignDoc,
+ parentNode: null,
+ parentElement: null,
+ previousSibling: null,
+ nextSibling: null,
+ nodeValue: "אריה יהודה",
+ },
+ xmlComment: {
+ // Node
+ nodeType: Node.COMMENT_NODE,
+ ownerDocument: xmlDoc,
+ parentNode: xmlDoc,
+ parentElement: null,
+ previousSibling: processingInstruction,
+ nextSibling: null,
+ nodeValue: "I maliciously created a comment that will break incautious XML serializers, but Firefox threw an exception, so all I got was this lousy T-shirt",
+ },
+ detachedXmlComment: {
+ // Node
+ nodeType: Node.COMMENT_NODE,
+ ownerDocument: xmlDoc,
+ parentNode: null,
+ parentElement: null,
+ previousSibling: null,
+ nextSibling: null,
+ nodeValue: "בן חיים אליעזר",
+ },
+ docfrag: {
+ // Node
+ nodeType: Node.DOCUMENT_FRAGMENT_NODE,
+ ownerDocument: document,
+ "childNodes.length": 0,
+ textContent: "",
+ },
+ foreignDocfrag: {
+ // Node
+ nodeType: Node.DOCUMENT_FRAGMENT_NODE,
+ ownerDocument: foreignDoc,
+ "childNodes.length": 0,
+ textContent: "",
+ },
+ xmlDocfrag: {
+ // Node
+ nodeType: Node.DOCUMENT_FRAGMENT_NODE,
+ ownerDocument: xmlDoc,
+ "childNodes.length": 0,
+ textContent: "",
+ },
+ doctype: {
+ // Node
+ nodeType: Node.DOCUMENT_TYPE_NODE,
+ ownerDocument: document,
+ parentNode: document,
+ previousSibling: null,
+ nextSibling: document.documentElement,
+
+ // DocumentType
+ name: "html",
+ publicId: "",
+ systemId: "",
+ },
+ foreignDoctype: {
+ // Node
+ nodeType: Node.DOCUMENT_TYPE_NODE,
+ ownerDocument: foreignDoc,
+ parentNode: foreignDoc,
+ previousSibling: null,
+ nextSibling: foreignDoc.documentElement,
+
+ // DocumentType
+ name: "html",
+ publicId: "",
+ systemId: "",
+ },
+ xmlDoctype: {
+ // Node
+ nodeType: Node.DOCUMENT_TYPE_NODE,
+ ownerDocument: xmlDoc,
+ parentNode: xmlDoc,
+ previousSibling: null,
+ nextSibling: xmlElement,
+
+ // DocumentType
+ name: "qorflesnorf",
+ publicId: "abcde",
+ systemId: "x\"'y",
+ },
+ "paras[0]": {
+ // Node
+ nodeType: Node.ELEMENT_NODE,
+ ownerDocument: document,
+ parentNode: testDiv,
+ parentElement: testDiv,
+ "childNodes.length": 1,
+ previousSibling: null,
+ nextSibling: paras[1],
+ textContent: "A\u0308b\u0308c\u0308d\u0308e\u0308f\u0308g\u0308h\u0308\n",
+
+ // Element
+ namespaceURI: "http://www.w3.org/1999/xhtml",
+ prefix: null,
+ localName: "p",
+ tagName: "P",
+ id: "a",
+ previousElementSibling: null,
+ nextElementSibling: paras[1],
+ childElementCount: 0,
+ },
+ "paras[1]": {
+ // Node
+ nodeType: Node.ELEMENT_NODE,
+ ownerDocument: document,
+ parentNode: testDiv,
+ parentElement: testDiv,
+ "childNodes.length": 1,
+ previousSibling: paras[0],
+ nextSibling: paras[2],
+ textContent: "Ijklmnop\n",
+
+ // Element
+ namespaceURI: "http://www.w3.org/1999/xhtml",
+ prefix: null,
+ localName: "p",
+ tagName: "P",
+ id: "b",
+ previousElementSibling: paras[0],
+ nextElementSibling: paras[2],
+ childElementCount: 0,
+ },
+ "paras[2]": {
+ // Node
+ nodeType: Node.ELEMENT_NODE,
+ ownerDocument: document,
+ parentNode: testDiv,
+ parentElement: testDiv,
+ "childNodes.length": 1,
+ previousSibling: paras[1],
+ nextSibling: paras[3],
+ textContent: "Qrstuvwx",
+
+ // Element
+ namespaceURI: "http://www.w3.org/1999/xhtml",
+ prefix: null,
+ localName: "p",
+ tagName: "P",
+ id: "c",
+ previousElementSibling: paras[1],
+ nextElementSibling: paras[3],
+ childElementCount: 0,
+ },
+ "paras[3]": {
+ // Node
+ nodeType: Node.ELEMENT_NODE,
+ ownerDocument: document,
+ parentNode: testDiv,
+ parentElement: testDiv,
+ "childNodes.length": 1,
+ previousSibling: paras[2],
+ nextSibling: paras[4],
+ textContent: "Yzabcdef",
+
+ // Element
+ namespaceURI: "http://www.w3.org/1999/xhtml",
+ prefix: null,
+ localName: "p",
+ tagName: "P",
+ id: "d",
+ previousElementSibling: paras[2],
+ nextElementSibling: paras[4],
+ childElementCount: 0,
+ },
+ "paras[4]": {
+ // Node
+ nodeType: Node.ELEMENT_NODE,
+ ownerDocument: document,
+ parentNode: testDiv,
+ parentElement: testDiv,
+ "childNodes.length": 1,
+ previousSibling: paras[3],
+ nextSibling: comment,
+ textContent: "Ghijklmn",
+
+ // Element
+ namespaceURI: "http://www.w3.org/1999/xhtml",
+ prefix: null,
+ localName: "p",
+ tagName: "P",
+ id: "e",
+ previousElementSibling: paras[3],
+ nextElementSibling: null,
+ childElementCount: 0,
+ },
+};
+
+for (var node in expected) {
+ // Now we set various default values by node type.
+ switch (expected[node].nodeType) {
+ case Node.ELEMENT_NODE:
+ expected[node].nodeName = expected[node].tagName;
+ expected[node].nodeValue = null;
+ expected[node]["children.length"] = expected[node].childElementCount;
+
+ if (expected[node].id === undefined) {
+ expected[node].id = "";
+ }
+ if (expected[node].className === undefined) {
+ expected[node].className = "";
+ }
+
+ var len = expected[node].childElementCount;
+ if (len === 0) {
+ expected[node].firstElementChild =
+ expected[node].lastElementChild = null;
+ } else {
+ // If we have expectations for the first/last child in children,
+ // use those. Otherwise, at least check that .firstElementChild ==
+ // .children[0] and .lastElementChild == .children[len - 1], even
+ // if we aren't sure what they should be.
+ expected[node].firstElementChild = expected[node]["children[0]"]
+ ? expected[node]["children[0]"]
+ : eval(node).children[0];
+ expected[node].lastElementChild =
+ expected[node]["children[" + (len - 1) + "]"]
+ ? expected[node]["children[" + (len - 1) + "]"]
+ : eval(node).children[len - 1];
+ }
+ break;
+
+ case Node.TEXT_NODE:
+ expected[node].nodeName = "#text";
+ expected[node]["childNodes.length"] = 0;
+ expected[node].textContent = expected[node].data =
+ expected[node].nodeValue;
+ expected[node].length = expected[node].nodeValue.length;
+ break;
+
+ case Node.PROCESSING_INSTRUCTION_NODE:
+ expected[node].nodeName = expected[node].target;
+ expected[node]["childNodes.length"] = 0;
+ expected[node].textContent = expected[node].data =
+ expected[node].nodeValue;
+ expected[node].length = expected[node].nodeValue.length;
+ break;
+
+ case Node.COMMENT_NODE:
+ expected[node].nodeName = "#comment";
+ expected[node]["childNodes.length"] = 0;
+ expected[node].textContent = expected[node].data =
+ expected[node].nodeValue;
+ expected[node].length = expected[node].nodeValue.length;
+ break;
+
+ case Node.DOCUMENT_NODE:
+ expected[node].nodeName = "#document";
+ expected[node].ownerDocument = expected[node].parentNode =
+ expected[node].parentElement = expected[node].previousSibling =
+ expected[node].nextSibling = expected[node].nodeValue =
+ expected[node].textContent = null;
+ expected[node].documentURI = expected[node].URL;
+ break;
+
+ case Node.DOCUMENT_TYPE_NODE:
+ expected[node].nodeName = expected[node].name;
+ expected[node]["childNodes.length"] = 0;
+ expected[node].parentElement = expected[node].nodeValue =
+ expected[node].textContent = null;
+ break;
+
+ case Node.DOCUMENT_FRAGMENT_NODE:
+ expected[node].nodeName = "#document-fragment";
+ expected[node].parentNode = expected[node].parentElement =
+ expected[node].previousSibling = expected[node].nextSibling =
+ expected[node].nodeValue = null;
+ break;
+ }
+
+ // Now we set some further default values that are independent of node
+ // type.
+ var len = expected[node]["childNodes.length"];
+ if (len === 0) {
+ expected[node].firstChild = expected[node].lastChild = null;
+ } else {
+ // If we have expectations for the first/last child in childNodes, use
+ // those. Otherwise, at least check that .firstChild == .childNodes[0]
+ // and .lastChild == .childNodes[len - 1], even if we aren't sure what
+ // they should be.
+ expected[node].firstChild = expected[node]["childNodes[0]"]
+ ? expected[node]["childNodes[0]"]
+ : eval(node).childNodes[0];
+ expected[node].lastChild =
+ expected[node]["childNodes[" + (len - 1) + "]"]
+ ? expected[node]["childNodes[" + (len - 1) + "]"]
+ : eval(node).childNodes[len - 1];
+ }
+ expected[node]["hasChildNodes()"] = !!expected[node]["childNodes.length"];
+
+ // Finally, we test!
+ for (var prop in expected[node]) {
+ test(function() {
+ assert_equals(eval(node + "." + prop), expected[node][prop]);
+ }, node + "." + prop);
+ }
+}
+
+testDiv.parentNode.removeChild(testDiv);
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNoderemoveChildexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-removeChild-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-removeChild-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-removeChild-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+ test
+
+PASS Passing a detached element from the main document to removeChild should not affect it.
+PASS Passing a non-detached element from the main document to removeChild should not affect it.
+PASS Calling removeChild on a element from the main document with no children should throw NOT_FOUND_ERR.
+PASS Passing a detached text from the main document to removeChild should not affect it.
+PASS Passing a non-detached text from the main document to removeChild should not affect it.
+PASS Calling removeChild on a text from the main document with no children should throw NOT_FOUND_ERR.
+PASS Passing a detached comment from the main document to removeChild should not affect it.
+PASS Passing a non-detached comment from the main document to removeChild should not affect it.
+PASS Calling removeChild on a comment from the main document with no children should throw NOT_FOUND_ERR.
+PASS Passing a detached element from a frame document to removeChild should not affect it.
+PASS Passing a non-detached element from a frame document to removeChild should not affect it.
+PASS Calling removeChild on a element from a frame document with no children should throw NOT_FOUND_ERR.
+PASS Passing a detached text from a frame document to removeChild should not affect it.
+PASS Passing a non-detached text from a frame document to removeChild should not affect it.
+PASS Calling removeChild on a text from a frame document with no children should throw NOT_FOUND_ERR.
+PASS Passing a detached comment from a frame document to removeChild should not affect it.
+PASS Passing a non-detached comment from a frame document to removeChild should not affect it.
+PASS Calling removeChild on a comment from a frame document with no children should throw NOT_FOUND_ERR.
+PASS Passing a detached element from a synthetic document to removeChild should not affect it.
+PASS Passing a non-detached element from a synthetic document to removeChild should not affect it.
+PASS Calling removeChild on a element from a synthetic document with no children should throw NOT_FOUND_ERR.
+PASS Passing a detached text from a synthetic document to removeChild should not affect it.
+PASS Passing a non-detached text from a synthetic document to removeChild should not affect it.
+PASS Calling removeChild on a text from a synthetic document with no children should throw NOT_FOUND_ERR.
+PASS Passing a detached comment from a synthetic document to removeChild should not affect it.
+PASS Passing a non-detached comment from a synthetic document to removeChild should not affect it.
+PASS Calling removeChild on a comment from a synthetic document with no children should throw NOT_FOUND_ERR.
+FAIL Passing a value that is not a Node reference to removeChild should throw TypeError. assert_throws: function "function () { document.body.removeChild(null) }" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+b
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNoderemoveChildhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-removeChild.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-removeChild.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-removeChild.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,54 @@
</span><ins>+<!DOCTYPE html>
+<title>Node.removeChild</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="creators.js"></script>
+<div id="log"></div>
+<iframe src=about:blank></iframe>
+<script>
+var documents = [
+ [function() { return document }, "the main document"],
+ [function() { return frames[0].document }, "a frame document"],
+ [function() { return document.implementation.createHTMLDocument() },
+ "a synthetic document"],
+];
+
+documents.forEach(function(d) {
+ var get = d[0], description = d[1]
+ for (var p in creators) {
+ var creator = creators[p];
+ test(function() {
+ var doc = get();
+ var s = doc[creator]("a")
+ assert_equals(s.ownerDocument, doc)
+ assert_throws("NOT_FOUND_ERR", function() { document.body.removeChild(s) })
+ assert_equals(s.ownerDocument, doc)
+ }, "Passing a detached " + p + " from " + description +
+ " to removeChild should not affect it.")
+
+ test(function() {
+ var doc = get();
+ var s = doc[creator]("b")
+ doc.documentElement.appendChild(s)
+ assert_equals(s.ownerDocument, doc)
+ assert_throws("NOT_FOUND_ERR", function() { document.body.removeChild(s) })
+ assert_equals(s.ownerDocument, doc)
+ }, "Passing a non-detached " + p + " from " + description +
+ " to removeChild should not affect it.")
+
+ test(function() {
+ var doc = get();
+ var s = doc[creator]("test")
+ doc.body.appendChild(s)
+ assert_equals(s.ownerDocument, doc)
+ assert_throws("NOT_FOUND_ERR", function() { s.removeChild(doc) })
+ }, "Calling removeChild on a " + p + " from " + description +
+ " with no children should throw NOT_FOUND_ERR.")
+ }
+});
+
+test(function() {
+ assert_throws(new TypeError(), function() { document.body.removeChild(null) })
+ assert_throws(new TypeError(), function() { document.body.removeChild({'a':'b'}) })
+}, "Passing a value that is not a Node reference to removeChild should throw TypeError.")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodereplaceChildexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-replaceChild-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-replaceChild-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-replaceChild-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+
+FAIL Passing null to replaceChild should throw a TypeError. assert_throws: function "function () {
+ a.replaceChild(null, null);
+ }" did not throw
+FAIL If child's parent is not the context node, a NotFoundError exception should be thrown assert_throws: function "function () {
+ a.replaceChild(a, c);
+ }" threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException NotFoundError: property "code" is equal to 3, expected 8
+PASS If the context node is not a node that can contain children, a NotFoundError exception should be thrown
+PASS If node is an inclusive ancestor of the context node, a HierarchyRequestError should be thrown.
+PASS If the context node is a document, inserting a document or text node should throw a HierarchyRequestError.
+PASS If the context node is a document, inserting a DocumentFragment that contains a text node or too many elements should throw a HierarchyRequestError.
+PASS If the context node is a document (without element children), inserting a DocumentFragment that contains multiple elements should throw a HierarchyRequestError.
+PASS If the context node is a document, inserting a DocumentFragment with an element if there already is an element child should throw a HierarchyRequestError.
+FAIL If the context node is a document, inserting a DocumentFragment with an element before the doctype should throw a HierarchyRequestError. assert_throws: function "function () {
+ doc.replaceChild(df, comment);
+ }" did not throw
+PASS If the context node is a document, inserting an element if there already is an element child should throw a HierarchyRequestError.
+FAIL If the context node is a document, inserting an element before the doctype should throw a HierarchyRequestError. assert_throws: function "function () {
+ doc.replaceChild(a, comment);
+ }" did not throw
+PASS If the context node is a document, inserting a doctype if there already is a doctype child should throw a HierarchyRequestError.
+FAIL If the context node is a document, inserting a doctype after the document element should throw a HierarchyRequestError. assert_throws: function "function () {
+ doc.replaceChild(doctype, comment);
+ }" did not throw
+PASS If the context node is a DocumentFragment, inserting a document or a doctype should throw a HierarchyRequestError.
+PASS If the context node is an element, inserting a document or a doctype should throw a HierarchyRequestError.
+PASS Replacing a node with its next sibling should work (2 children)
+PASS Replacing a node with its next sibling should work (4 children)
+PASS Replacing a node with itself should not move the node
+PASS If the context node is a document, inserting a new doctype should work.
+PASS Replacing the document element with a DocumentFragment containing a single element should work.
+PASS Replacing the document element with a DocumentFragment containing a single element and comments should work.
+PASS Replacing the document element with a single element should work.
+PASS replaceChild should work in the presence of mutation events.
+PASS Replacing an element with a DocumentFragment should allow a child of the DocumentFragment to be found by Id.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodereplaceChildhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-replaceChild.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-replaceChild.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-replaceChild.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,346 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Node.replaceChild</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body><a><b></b><c></c></a>
+<div id="log"></div>
+<script>
+// IDL.
+test(function() {
+ var a = document.createElement("div");
+ assert_throws(new TypeError(), function() {
+ a.replaceChild(null, null);
+ });
+
+ var b = document.createElement("div");
+ assert_throws(new TypeError(), function() {
+ a.replaceChild(b, null);
+ });
+ assert_throws(new TypeError(), function() {
+ a.replaceChild(null, b);
+ });
+}, "Passing null to replaceChild should throw a TypeError.")
+
+// Step 1.
+test(function() {
+ var a = document.createElement("div");
+ var b = document.createElement("div");
+ var c = document.createElement("div");
+ assert_throws("NotFoundError", function() {
+ a.replaceChild(b, c);
+ });
+
+ var d = document.createElement("div");
+ d.appendChild(b);
+ assert_throws("NotFoundError", function() {
+ a.replaceChild(b, c);
+ });
+ assert_throws("NotFoundError", function() {
+ a.replaceChild(a, c);
+ });
+ assert_throws("NotFoundError", function() {
+ a.replaceChild(b, a);
+ });
+ assert_throws("NotFoundError", function() {
+ a.replaceChild(a, a);
+ });
+}, "If child's parent is not the context node, a NotFoundError exception should be thrown")
+test(function() {
+ var nodes = [
+ document.implementation.createDocumentType("html", "", ""),
+ document.createTextNode("text"),
+ document.implementation.createDocument(null, "foo", null).createProcessingInstruction("foo", "bar"),
+ document.createComment("comment")
+ ];
+
+ var a = document.createElement("div");
+ var b = document.createElement("div");
+ nodes.forEach(function(node) {
+ assert_throws("HierarchyRequestError", function() {
+ node.replaceChild(a, b);
+ });
+ });
+}, "If the context node is not a node that can contain children, a NotFoundError exception should be thrown")
+
+// Step 2.
+test(function() {
+ var a = document.createElement("div");
+ var b = document.createElement("div");
+ a.appendChild(b);
+ assert_throws("HierarchyRequestError", function() {
+ a.replaceChild(a, b);
+ });
+
+ var c = document.createElement("div");
+ c.appendChild(a);
+ assert_throws("HierarchyRequestError", function() {
+ a.replaceChild(c, b);
+ });
+}, "If node is an inclusive ancestor of the context node, a HierarchyRequestError should be thrown.")
+
+// Step 3.1.
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+ var doc2 = document.implementation.createHTMLDocument("title2");
+ assert_throws("HierarchyRequestError", function() {
+ doc.replaceChild(doc2, doc.documentElement);
+ });
+
+ assert_throws("HierarchyRequestError", function() {
+ doc.replaceChild(doc.createTextNode("text"), doc.documentElement);
+ });
+}, "If the context node is a document, inserting a document or text node should throw a HierarchyRequestError.")
+
+// Step 3.2.1.
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+
+ var df = doc.createDocumentFragment();
+ df.appendChild(doc.createElement("a"));
+ df.appendChild(doc.createElement("b"));
+ assert_throws("HierarchyRequestError", function() {
+ doc.replaceChild(df, doc.documentElement);
+ });
+
+ df = doc.createDocumentFragment();
+ df.appendChild(doc.createTextNode("text"));
+ assert_throws("HierarchyRequestError", function() {
+ doc.replaceChild(df, doc.documentElement);
+ });
+
+ df = doc.createDocumentFragment();
+ df.appendChild(doc.createComment("comment"));
+ df.appendChild(doc.createTextNode("text"));
+ assert_throws("HierarchyRequestError", function() {
+ doc.replaceChild(df, doc.documentElement);
+ });
+}, "If the context node is a document, inserting a DocumentFragment that contains a text node or too many elements should throw a HierarchyRequestError.")
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+ doc.removeChild(doc.documentElement);
+
+ var df = doc.createDocumentFragment();
+ df.appendChild(doc.createElement("a"));
+ df.appendChild(doc.createElement("b"));
+ assert_throws("HierarchyRequestError", function() {
+ doc.replaceChild(df, doc.doctype);
+ });
+}, "If the context node is a document (without element children), inserting a DocumentFragment that contains multiple elements should throw a HierarchyRequestError.")
+
+// Step 3.2.2.
+test(function() {
+ // The context node has an element child that is not /child/.
+ var doc = document.implementation.createHTMLDocument("title");
+ var comment = doc.appendChild(doc.createComment("foo"));
+ assert_array_equals(doc.childNodes, [doc.doctype, doc.documentElement, comment]);
+
+ var df = doc.createDocumentFragment();
+ df.appendChild(doc.createElement("a"));
+ assert_throws("HierarchyRequestError", function() {
+ doc.replaceChild(df, comment);
+ });
+ assert_throws("HierarchyRequestError", function() {
+ doc.replaceChild(df, doc.doctype);
+ });
+}, "If the context node is a document, inserting a DocumentFragment with an element if there already is an element child should throw a HierarchyRequestError.")
+test(function() {
+ // A doctype is following /child/.
+ var doc = document.implementation.createHTMLDocument("title");
+ var comment = doc.insertBefore(doc.createComment("foo"), doc.firstChild);
+ doc.removeChild(doc.documentElement);
+ assert_array_equals(doc.childNodes, [comment, doc.doctype]);
+
+ var df = doc.createDocumentFragment();
+ df.appendChild(doc.createElement("a"));
+ assert_throws("HierarchyRequestError", function() {
+ doc.replaceChild(df, comment);
+ });
+}, "If the context node is a document, inserting a DocumentFragment with an element before the doctype should throw a HierarchyRequestError.")
+
+// Step 3.3.
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+ var comment = doc.appendChild(doc.createComment("foo"));
+ assert_array_equals(doc.childNodes, [doc.doctype, doc.documentElement, comment]);
+
+ var a = doc.createElement("a");
+ assert_throws("HierarchyRequestError", function() {
+ doc.replaceChild(a, comment);
+ });
+ assert_throws("HierarchyRequestError", function() {
+ doc.replaceChild(a, doc.doctype);
+ });
+}, "If the context node is a document, inserting an element if there already is an element child should throw a HierarchyRequestError.")
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+ var comment = doc.insertBefore(doc.createComment("foo"), doc.firstChild);
+ doc.removeChild(doc.documentElement);
+ assert_array_equals(doc.childNodes, [comment, doc.doctype]);
+
+ var a = doc.createElement("a");
+ assert_throws("HierarchyRequestError", function() {
+ doc.replaceChild(a, comment);
+ });
+}, "If the context node is a document, inserting an element before the doctype should throw a HierarchyRequestError.")
+
+// Step 3.4.
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+ var comment = doc.insertBefore(doc.createComment("foo"), doc.firstChild);
+ assert_array_equals(doc.childNodes, [comment, doc.doctype, doc.documentElement]);
+
+ var doctype = document.implementation.createDocumentType("html", "", "");
+ assert_throws("HierarchyRequestError", function() {
+ doc.replaceChild(doctype, comment);
+ });
+ assert_throws("HierarchyRequestError", function() {
+ doc.replaceChild(doctype, doc.documentElement);
+ });
+}, "If the context node is a document, inserting a doctype if there already is a doctype child should throw a HierarchyRequestError.")
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+ var comment = doc.appendChild(doc.createComment("foo"));
+ doc.removeChild(doc.doctype);
+ assert_array_equals(doc.childNodes, [doc.documentElement, comment]);
+
+ var doctype = document.implementation.createDocumentType("html", "", "");
+ assert_throws("HierarchyRequestError", function() {
+ doc.replaceChild(doctype, comment);
+ });
+}, "If the context node is a document, inserting a doctype after the document element should throw a HierarchyRequestError.")
+
+// Step 4.
+test(function() {
+ var df = document.createDocumentFragment();
+ var a = df.appendChild(document.createElement("a"));
+
+ var doc = document.implementation.createHTMLDocument("title");
+ assert_throws("HierarchyRequestError", function() {
+ df.replaceChild(doc, a);
+ });
+
+ var doctype = document.implementation.createDocumentType("html", "", "");
+ assert_throws("HierarchyRequestError", function() {
+ df.replaceChild(doctype, a);
+ });
+}, "If the context node is a DocumentFragment, inserting a document or a doctype should throw a HierarchyRequestError.")
+test(function() {
+ var el = document.createElement("div");
+ var a = el.appendChild(document.createElement("a"));
+
+ var doc = document.implementation.createHTMLDocument("title");
+ assert_throws("HierarchyRequestError", function() {
+ el.replaceChild(doc, a);
+ });
+
+ var doctype = document.implementation.createDocumentType("html", "", "");
+ assert_throws("HierarchyRequestError", function() {
+ el.replaceChild(doctype, a);
+ });
+}, "If the context node is an element, inserting a document or a doctype should throw a HierarchyRequestError.")
+
+// Step 6.
+test(function() {
+ var a = document.createElement("div");
+ var b = document.createElement("div");
+ var c = document.createElement("div");
+ a.appendChild(b);
+ a.appendChild(c);
+ assert_array_equals(a.childNodes, [b, c]);
+ assert_equals(a.replaceChild(c, b), b);
+ assert_array_equals(a.childNodes, [c]);
+}, "Replacing a node with its next sibling should work (2 children)");
+test(function() {
+ var a = document.createElement("div");
+ var b = document.createElement("div");
+ var c = document.createElement("div");
+ var d = document.createElement("div");
+ var e = document.createElement("div");
+ a.appendChild(b);
+ a.appendChild(c);
+ a.appendChild(d);
+ a.appendChild(e);
+ assert_array_equals(a.childNodes, [b, c, d, e]);
+ assert_equals(a.replaceChild(d, c), c);
+ assert_array_equals(a.childNodes, [b, d, e]);
+}, "Replacing a node with its next sibling should work (4 children)");
+test(function() {
+ var a = document.createElement("div");
+ var b = document.createElement("div");
+ var c = document.createElement("div");
+ a.appendChild(b);
+ a.appendChild(c);
+ assert_array_equals(a.childNodes, [b, c]);
+ assert_equals(a.replaceChild(b, b), b);
+ assert_array_equals(a.childNodes, [b, c]);
+ assert_equals(a.replaceChild(c, c), c);
+ assert_array_equals(a.childNodes, [b, c]);
+}, "Replacing a node with itself should not move the node");
+
+// Step 7.
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+ var doctype = doc.doctype;
+ assert_array_equals(doc.childNodes, [doctype, doc.documentElement]);
+
+ var doc2 = document.implementation.createHTMLDocument("title2");
+ var doctype2 = doc2.doctype;
+ assert_array_equals(doc2.childNodes, [doctype2, doc2.documentElement]);
+
+ doc.replaceChild(doc2.doctype, doc.doctype);
+ assert_array_equals(doc.childNodes, [doctype2, doc.documentElement]);
+ assert_array_equals(doc2.childNodes, [doc2.documentElement]);
+ assert_equals(doctype.parentNode, null);
+ assert_equals(doctype.ownerDocument, doc);
+ assert_equals(doctype2.parentNode, doc);
+ assert_equals(doctype2.ownerDocument, doc);
+}, "If the context node is a document, inserting a new doctype should work.")
+
+// Bugs.
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+ var df = doc.createDocumentFragment();
+ var a = df.appendChild(doc.createElement("a"));
+ assert_equals(doc.documentElement, doc.replaceChild(df, doc.documentElement));
+ assert_array_equals(doc.childNodes, [doc.doctype, a]);
+}, "Replacing the document element with a DocumentFragment containing a single element should work.");
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+ var df = doc.createDocumentFragment();
+ var a = df.appendChild(doc.createComment("a"));
+ var b = df.appendChild(doc.createElement("b"));
+ var c = df.appendChild(doc.createComment("c"));
+ assert_equals(doc.documentElement, doc.replaceChild(df, doc.documentElement));
+ assert_array_equals(doc.childNodes, [doc.doctype, a, b, c]);
+}, "Replacing the document element with a DocumentFragment containing a single element and comments should work.");
+test(function() {
+ var doc = document.implementation.createHTMLDocument("title");
+ var a = doc.createElement("a");
+ assert_equals(doc.documentElement, doc.replaceChild(a, doc.documentElement));
+ assert_array_equals(doc.childNodes, [doc.doctype, a]);
+}, "Replacing the document element with a single element should work.");
+test(function() {
+ document.addEventListener("DOMNodeRemoved", function(e) {
+ document.body.appendChild(document.createElement("x"));
+ }, false);
+ var a = document.body.firstChild, b = a.firstChild, c = b.nextSibling;
+ assert_equals(a.replaceChild(c, b), b);
+ assert_equals(b.parentNode, null);
+ assert_equals(a.firstChild, c);
+ assert_equals(c.parentNode, a);
+}, "replaceChild should work in the presence of mutation events.")
+test(function() {
+ var TEST_ID = "findme";
+ var gBody = document.getElementsByTagName("body")[0];
+ var parent = document.createElement("div");
+ gBody.appendChild(parent);
+ var child = document.createElement("div");
+ parent.appendChild(child);
+ var df = document.createDocumentFragment();
+ var fragChild = df.appendChild(document.createElement("div"));
+ fragChild.setAttribute("id", TEST_ID);
+ parent.replaceChild(df, child);
+ assert_equals(document.getElementById(TEST_ID), fragChild, "should not be null");
+}, "Replacing an element with a DocumentFragment should allow a child of the DocumentFragment to be found by Id.")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodetextContentexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-textContent-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-textContent-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-textContent-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,83 @@
</span><ins>+
+PASS For an empty Element, textContent should be the empty string
+PASS For an empty DocumentFragment, textContent should be the empty string
+FAIL Element with children NotSupportedError: DOM Exception 9
+FAIL Element with descendants NotSupportedError: DOM Exception 9
+FAIL DocumentFragment with children NotSupportedError: DOM Exception 9
+FAIL DocumentFragment with descendants NotSupportedError: DOM Exception 9
+PASS For an empty Text, textContent should be the empty string
+FAIL For an empty ProcessingInstruction, textContent should be the empty string NotSupportedError: DOM Exception 9
+PASS For an empty Comment, textContent should be the empty string
+PASS For a Text with data, textContent should be that data
+FAIL For a ProcessingInstruction with data, textContent should be that data NotSupportedError: DOM Exception 9
+PASS For a Comment with data, textContent should be that data
+PASS For Documents created by parser, textContent should be null
+PASS For Documents created by createDocument, textContent should be null
+PASS For Documents created by createHTMLDocument, textContent should be null
+PASS For DocumentType created by parser, textContent should be null
+PASS For DocumentType created by script, textContent should be null
+PASS Element without children set to null
+PASS Element with empty text node as child set to null
+FAIL Element with children set to null NotSupportedError: DOM Exception 9
+FAIL Element with descendants set to null NotSupportedError: DOM Exception 9
+PASS DocumentFragment without children set to null
+PASS DocumentFragment with empty text node as child set to null
+FAIL DocumentFragment with children set to null NotSupportedError: DOM Exception 9
+FAIL DocumentFragment with descendants set to null NotSupportedError: DOM Exception 9
+FAIL Element without children set to undefined assert_equals: expected "" but got "undefined"
+FAIL Element with empty text node as child set to undefined assert_equals: expected "" but got "undefined"
+FAIL Element with children set to undefined NotSupportedError: DOM Exception 9
+FAIL Element with descendants set to undefined NotSupportedError: DOM Exception 9
+FAIL DocumentFragment without children set to undefined assert_equals: expected "" but got "undefined"
+FAIL DocumentFragment with empty text node as child set to undefined assert_equals: expected "" but got "undefined"
+FAIL DocumentFragment with children set to undefined NotSupportedError: DOM Exception 9
+FAIL DocumentFragment with descendants set to undefined NotSupportedError: DOM Exception 9
+PASS Element without children set to ""
+PASS Element with empty text node as child set to ""
+FAIL Element with children set to "" NotSupportedError: DOM Exception 9
+FAIL Element with descendants set to "" NotSupportedError: DOM Exception 9
+PASS DocumentFragment without children set to ""
+PASS DocumentFragment with empty text node as child set to ""
+FAIL DocumentFragment with children set to "" NotSupportedError: DOM Exception 9
+FAIL DocumentFragment with descendants set to "" NotSupportedError: DOM Exception 9
+PASS Element without children set to 42
+PASS Element with empty text node as child set to 42
+FAIL Element with children set to 42 NotSupportedError: DOM Exception 9
+FAIL Element with descendants set to 42 NotSupportedError: DOM Exception 9
+PASS DocumentFragment without children set to 42
+PASS DocumentFragment with empty text node as child set to 42
+FAIL DocumentFragment with children set to 42 NotSupportedError: DOM Exception 9
+FAIL DocumentFragment with descendants set to 42 NotSupportedError: DOM Exception 9
+PASS Element without children set to "abc"
+PASS Element with empty text node as child set to "abc"
+FAIL Element with children set to "abc" NotSupportedError: DOM Exception 9
+FAIL Element with descendants set to "abc" NotSupportedError: DOM Exception 9
+PASS DocumentFragment without children set to "abc"
+PASS DocumentFragment with empty text node as child set to "abc"
+FAIL DocumentFragment with children set to "abc" NotSupportedError: DOM Exception 9
+FAIL DocumentFragment with descendants set to "abc" NotSupportedError: DOM Exception 9
+PASS Element without children set to "<b>xyz</b>"
+PASS Element with empty text node as child set to "<b>xyz</b>"
+FAIL Element with children set to "<b>xyz</b>" NotSupportedError: DOM Exception 9
+FAIL Element with descendants set to "<b>xyz</b>" NotSupportedError: DOM Exception 9
+PASS DocumentFragment without children set to "<b>xyz</b>"
+PASS DocumentFragment with empty text node as child set to "<b>xyz</b>"
+FAIL DocumentFragment with children set to "<b>xyz</b>" NotSupportedError: DOM Exception 9
+FAIL DocumentFragment with descendants set to "<b>xyz</b>" NotSupportedError: DOM Exception 9
+PASS Element without children set to "d\0e"
+PASS Element with empty text node as child set to "d\0e"
+FAIL Element with children set to "d\0e" NotSupportedError: DOM Exception 9
+FAIL Element with descendants set to "d\0e" NotSupportedError: DOM Exception 9
+PASS DocumentFragment without children set to "d\0e"
+PASS DocumentFragment with empty text node as child set to "d\0e"
+FAIL DocumentFragment with children set to "d\0e" NotSupportedError: DOM Exception 9
+FAIL DocumentFragment with descendants set to "d\0e" NotSupportedError: DOM Exception 9
+PASS For a Text, textContent should set the data
+FAIL For a ProcessingInstruction, textContent should set the data NotSupportedError: DOM Exception 9
+PASS For a Comment, textContent should set the data
+PASS For Documents created by parser, setting textContent should do nothing
+PASS For Documents created by createDocument, setting textContent should do nothing
+PASS For Documents created by createHTMLDocument, setting textContent should do nothing
+PASS For DocumentType created by parser, setting textContent should do nothing
+PASS For DocumentType created by script, setting textContent should do nothing
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesNodetextContenthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-textContent.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-textContent.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Node-textContent.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,265 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Node.textContent</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+// XXX mutation observers?
+// XXX Range gravitation?
+
+var documents, doctypes;
+setup(function() {
+ documents = [
+ [document, "parser"],
+ [document.implementation.createDocument("", "test", null), "createDocument"],
+ [document.implementation.createHTMLDocument("title"), "createHTMLDocument"],
+ ]
+ doctypes = [
+ [document.doctype, "parser"],
+ [document.implementation.createDocumentType("x", "", ""), "script"],
+ ]
+})
+
+// Getting
+// DocumentFragment, Element:
+test(function() {
+ var element = document.createElement("div")
+ assert_equals(element.textContent, "")
+}, "For an empty Element, textContent should be the empty string")
+
+test(function() {
+ assert_equals(document.createDocumentFragment().textContent, "")
+}, "For an empty DocumentFragment, textContent should be the empty string")
+
+test(function() {
+ var el = document.createElement("div")
+ el.appendChild(document.createComment(" abc "))
+ el.appendChild(document.createTextNode("\tDEF\t"))
+ el.appendChild(document.createProcessingInstruction("x", " ghi "))
+ assert_equals(el.textContent, "\tDEF\t")
+}, "Element with children")
+
+test(function() {
+ var el = document.createElement("div")
+ var child = document.createElement("div")
+ el.appendChild(child)
+ child.appendChild(document.createComment(" abc "))
+ child.appendChild(document.createTextNode("\tDEF\t"))
+ child.appendChild(document.createProcessingInstruction("x", " ghi "))
+ assert_equals(el.textContent, "\tDEF\t")
+}, "Element with descendants")
+
+test(function() {
+ var df = document.createDocumentFragment()
+ df.appendChild(document.createComment(" abc "))
+ df.appendChild(document.createTextNode("\tDEF\t"))
+ df.appendChild(document.createProcessingInstruction("x", " ghi "))
+ assert_equals(df.textContent, "\tDEF\t")
+}, "DocumentFragment with children")
+
+test(function() {
+ var df = document.createDocumentFragment()
+ var child = document.createElement("div")
+ df.appendChild(child)
+ child.appendChild(document.createComment(" abc "))
+ child.appendChild(document.createTextNode("\tDEF\t"))
+ child.appendChild(document.createProcessingInstruction("x", " ghi "))
+ assert_equals(df.textContent, "\tDEF\t")
+}, "DocumentFragment with descendants")
+
+// Text, ProcessingInstruction, Comment:
+test(function() {
+ assert_equals(document.createTextNode("").textContent, "")
+}, "For an empty Text, textContent should be the empty string")
+
+test(function() {
+ assert_equals(document.createProcessingInstruction("x", "").textContent, "")
+}, "For an empty ProcessingInstruction, textContent should be the empty string")
+
+test(function() {
+ assert_equals(document.createComment("").textContent, "")
+}, "For an empty Comment, textContent should be the empty string")
+
+test(function() {
+ assert_equals(document.createTextNode("abc").textContent, "abc")
+}, "For a Text with data, textContent should be that data")
+
+test(function() {
+ assert_equals(document.createProcessingInstruction("x", "abc").textContent,
+ "abc")
+}, "For a ProcessingInstruction with data, textContent should be that data")
+
+test(function() {
+ assert_equals(document.createComment("abc").textContent, "abc")
+}, "For a Comment with data, textContent should be that data")
+
+// Any other node:
+documents.forEach(function(argument) {
+ var doc = argument[0], creator = argument[1]
+ test(function() {
+ assert_equals(doc.textContent, null)
+ }, "For Documents created by " + creator + ", textContent should be null")
+})
+
+doctypes.forEach(function(argument) {
+ var doctype = argument[0], creator = argument[1]
+ test(function() {
+ assert_equals(doctype.textContent, null)
+ }, "For DocumentType created by " + creator + ", textContent should be null")
+})
+
+// Setting
+// DocumentFragment, Element:
+var arguments = [
+ [null, null],
+ [undefined, null],
+ ["", null],
+ [42, "42"],
+ ["abc", "abc"],
+ ["<b>xyz<\/b>", "<b>xyz<\/b>"],
+ ["d\0e", "d\0e"]
+ // XXX unpaired surrogate?
+]
+arguments.forEach(function(aValue) {
+ var argument = aValue[0], expectation = aValue[1]
+ var check = function(aElementOrDocumentFragment) {
+ if (expectation === null) {
+ assert_equals(aElementOrDocumentFragment.textContent, "")
+ assert_equals(aElementOrDocumentFragment.firstChild, null)
+ } else {
+ assert_equals(aElementOrDocumentFragment.textContent, expectation)
+ assert_equals(aElementOrDocumentFragment.childNodes.length, 1,
+ "Should have one child")
+ var firstChild = aElementOrDocumentFragment.firstChild
+ assert_true(firstChild instanceof Text, "child should be a Text")
+ assert_equals(firstChild.data, expectation)
+ }
+ }
+
+ test(function() {
+ var el = document.createElement("div")
+ el.textContent = argument
+ check(el)
+ }, "Element without children set to " + format_value(argument))
+
+ test(function() {
+ var el = document.createElement("div")
+ var text = el.appendChild(document.createTextNode(""))
+ el.textContent = argument
+ check(el)
+ assert_equals(text.parentNode, null,
+ "Preexisting Text should have been removed")
+ }, "Element with empty text node as child set to " + format_value(argument))
+
+ test(function() {
+ var el = document.createElement("div")
+ el.appendChild(document.createComment(" abc "))
+ el.appendChild(document.createTextNode("\tDEF\t"))
+ el.appendChild(document.createProcessingInstruction("x", " ghi "))
+ el.textContent = argument
+ check(el)
+ }, "Element with children set to " + format_value(argument))
+
+ test(function() {
+ var el = document.createElement("div")
+ var child = document.createElement("div")
+ el.appendChild(child)
+ child.appendChild(document.createComment(" abc "))
+ child.appendChild(document.createTextNode("\tDEF\t"))
+ child.appendChild(document.createProcessingInstruction("x", " ghi "))
+ el.textContent = argument
+ check(el)
+ assert_equals(child.childNodes.length, 3,
+ "Should not have changed the internal structure of the removed nodes.")
+ }, "Element with descendants set to " + format_value(argument))
+
+ test(function() {
+ var df = document.createDocumentFragment()
+ df.textContent = argument
+ check(df)
+ }, "DocumentFragment without children set to " + format_value(argument))
+
+ test(function() {
+ var df = document.createDocumentFragment()
+ var text = df.appendChild(document.createTextNode(""))
+ df.textContent = argument
+ check(df)
+ assert_equals(text.parentNode, null,
+ "Preexisting Text should have been removed")
+ }, "DocumentFragment with empty text node as child set to " + format_value(argument))
+
+ test(function() {
+ var df = document.createDocumentFragment()
+ df.appendChild(document.createComment(" abc "))
+ df.appendChild(document.createTextNode("\tDEF\t"))
+ df.appendChild(document.createProcessingInstruction("x", " ghi "))
+ df.textContent = argument
+ check(df)
+ }, "DocumentFragment with children set to " + format_value(argument))
+
+ test(function() {
+ var df = document.createDocumentFragment()
+ var child = document.createElement("div")
+ df.appendChild(child)
+ child.appendChild(document.createComment(" abc "))
+ child.appendChild(document.createTextNode("\tDEF\t"))
+ child.appendChild(document.createProcessingInstruction("x", " ghi "))
+ df.textContent = argument
+ check(df)
+ assert_equals(child.childNodes.length, 3,
+ "Should not have changed the internal structure of the removed nodes.")
+ }, "DocumentFragment with descendants set to " + format_value(argument))
+})
+
+// Text, ProcessingInstruction, Comment:
+test(function() {
+ var text = document.createTextNode("abc")
+ text.textContent = "def"
+ assert_equals(text.textContent, "def")
+ assert_equals(text.data, "def")
+}, "For a Text, textContent should set the data")
+
+test(function() {
+ var pi = document.createProcessingInstruction("x", "abc")
+ pi.textContent = "def"
+ assert_equals(pi.textContent, "def")
+ assert_equals(pi.data, "def")
+ assert_equals(pi.target, "x")
+}, "For a ProcessingInstruction, textContent should set the data")
+
+test(function() {
+ var comment = document.createComment("abc")
+ comment.textContent = "def"
+ assert_equals(comment.textContent, "def")
+ assert_equals(comment.data, "def")
+}, "For a Comment, textContent should set the data")
+
+// Any other node:
+documents.forEach(function(argument) {
+ var doc = argument[0], creator = argument[1]
+ test(function() {
+ var root = doc.documentElement
+ doc.textContent = "a"
+ assert_equals(doc.textContent, null)
+ assert_equals(doc.documentElement, root)
+ }, "For Documents created by " + creator + ", setting textContent should do nothing")
+})
+
+doctypes.forEach(function(argument) {
+ var doctype = argument[0], creator = argument[1]
+ test(function() {
+ var props = {
+ name: doctype.name,
+ publicId: doctype.publicId,
+ systemId: doctype.systemId,
+ }
+ doctype.textContent = "b"
+ assert_equals(doctype.textContent, null)
+ assert_equals(doctype.name, props.name, "name should not change")
+ assert_equals(doctype.publicId, props.publicId, "publicId should not change")
+ assert_equals(doctype.systemId, props.systemId, "systemId should not change")
+ }, "For DocumentType created by " + creator + ", setting textContent should do nothing")
+})
+
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesParentNodeappendexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-append-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-append-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-append-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+
+PASS Element.append() without any argument, on a parent having no child.
+PASS Element.append() with null as an argument, on a parent having no child.
+PASS Element.append() with undefined as an argument, on a parent having no child.
+PASS Element.append() with only text as an argument, on a parent having no child.
+PASS Element.append() with only one element as an argument, on a parent having no child.
+PASS Element.append() with null as an argument, on a parent having a child.
+PASS Element.append() with one element and text as argument, on a parent having a child.
+PASS DocumentFrgment.append() without any argument, on a parent having no child.
+PASS DocumentFrgment.append() with null as an argument, on a parent having no child.
+PASS DocumentFrgment.append() with undefined as an argument, on a parent having no child.
+PASS DocumentFrgment.append() with only text as an argument, on a parent having no child.
+PASS DocumentFrgment.append() with only one element as an argument, on a parent having no child.
+PASS DocumentFrgment.append() with null as an argument, on a parent having a child.
+PASS DocumentFrgment.append() with one element and text as argument, on a parent having a child.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesParentNodeappendhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-append.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-append.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-append.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,66 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>ParentNode.append</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-parentnode-append">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+function test_append(node, nodeName) {
+
+ test(function() {
+ var parent = node.cloneNode();
+ parent.append();
+ assert_array_equals(parent.childNodes, []);
+ }, nodeName + '.append() without any argument, on a parent having no child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ parent.append(null);
+ assert_equals(parent.childNodes[0].textContent, 'null');
+ }, nodeName + '.append() with null as an argument, on a parent having no child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ parent.append(undefined);
+ assert_equals(parent.childNodes[0].textContent, 'undefined');
+ }, nodeName + '.append() with undefined as an argument, on a parent having no child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ parent.append('text');
+ assert_equals(parent.childNodes[0].textContent, 'text');
+ }, nodeName + '.append() with only text as an argument, on a parent having no child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ var x = document.createElement('x');
+ parent.append(x);
+ assert_array_equals(parent.childNodes, [x]);
+ }, nodeName + '.append() with only one element as an argument, on a parent having no child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ var child = document.createElement('test');
+ parent.appendChild(child);
+ parent.append(null);
+ assert_equals(parent.childNodes[0], child);
+ assert_equals(parent.childNodes[1].textContent, 'null');
+ }, nodeName + '.append() with null as an argument, on a parent having a child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ var x = document.createElement('x');
+ var child = document.createElement('test');
+ parent.appendChild(child);
+ parent.append(x, 'text');
+ assert_equals(parent.childNodes[0], child);
+ assert_equals(parent.childNodes[1], x);
+ assert_equals(parent.childNodes[2].textContent, 'text');
+ }, nodeName + '.append() with one element and text as argument, on a parent having a child.');
+}
+
+test_append(document.createElement('div'), 'Element');
+test_append(document.createDocumentFragment(), 'DocumentFrgment');
+</script>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesParentNodeprependexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-prepend-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-prepend-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-prepend-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+
+PASS Element.prepend() without any argument, on a parent having no child.
+PASS Element.prepend() with null as an argument, on a parent having no child.
+PASS Element.prepend() with undefined as an argument, on a parent having no child.
+PASS Element.prepend() with only text as an argument, on a parent having no child.
+PASS Element.prepend() with only one element as an argument, on a parent having no child.
+PASS Element.prepend() with null as an argument, on a parent having a child.
+PASS Element.prepend() with one element and text as argument, on a parent having a child.
+PASS DocumentFrgment.prepend() without any argument, on a parent having no child.
+PASS DocumentFrgment.prepend() with null as an argument, on a parent having no child.
+PASS DocumentFrgment.prepend() with undefined as an argument, on a parent having no child.
+PASS DocumentFrgment.prepend() with only text as an argument, on a parent having no child.
+PASS DocumentFrgment.prepend() with only one element as an argument, on a parent having no child.
+PASS DocumentFrgment.prepend() with null as an argument, on a parent having a child.
+PASS DocumentFrgment.prepend() with one element and text as argument, on a parent having a child.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesParentNodeprependhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-prepend.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-prepend.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-prepend.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,66 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>ParentNode.prepend</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-parentnode-prepend">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+function test_prepend(node, nodeName) {
+
+ test(function() {
+ var parent = node.cloneNode();
+ parent.prepend();
+ assert_array_equals(parent.childNodes, []);
+ }, nodeName + '.prepend() without any argument, on a parent having no child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ parent.prepend(null);
+ assert_equals(parent.childNodes[0].textContent, 'null');
+ }, nodeName + '.prepend() with null as an argument, on a parent having no child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ parent.prepend(undefined);
+ assert_equals(parent.childNodes[0].textContent, 'undefined');
+ }, nodeName + '.prepend() with undefined as an argument, on a parent having no child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ parent.prepend('text');
+ assert_equals(parent.childNodes[0].textContent, 'text');
+ }, nodeName + '.prepend() with only text as an argument, on a parent having no child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ var x = document.createElement('x');
+ parent.prepend(x);
+ assert_array_equals(parent.childNodes, [x]);
+ }, nodeName + '.prepend() with only one element as an argument, on a parent having no child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ var child = document.createElement('test');
+ parent.appendChild(child);
+ parent.prepend(null);
+ assert_equals(parent.childNodes[0].textContent, 'null');
+ assert_equals(parent.childNodes[1], child);
+ }, nodeName + '.prepend() with null as an argument, on a parent having a child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ var x = document.createElement('x');
+ var child = document.createElement('test');
+ parent.appendChild(child);
+ parent.prepend(x, 'text');
+ assert_equals(parent.childNodes[0], x);
+ assert_equals(parent.childNodes[1].textContent, 'text');
+ assert_equals(parent.childNodes[2], child);
+ }, nodeName + '.prepend() with one element and text as argument, on a parent having a child.');
+}
+
+test_prepend(document.createElement('div'), 'Element');
+test_prepend(document.createDocumentFragment(), 'DocumentFrgment');
+</script>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesParentNodequerySelectorAllexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,2022 @@
</span><ins>+This test requires JavaScript.
+
+PASS Selectors-API Test Suite: HTML
+PASS Document supports querySelector
+PASS Document supports querySelectorAll
+PASS Document.querySelectorAll returns NodeList instance
+PASS Detached Element supports querySelector
+PASS Detached Element supports querySelectorAll
+PASS Detached Element.querySelectorAll returns NodeList instance
+PASS Fragment supports querySelector
+PASS Fragment supports querySelectorAll
+PASS Fragment.querySelectorAll returns NodeList instance
+PASS In-document Element supports querySelector
+PASS In-document Element supports querySelectorAll
+PASS In-document Element.querySelectorAll returns NodeList instance
+PASS Document.querySelectorAll null
+PASS Document.querySelectorAll undefined
+PASS Document.querySelectorAll no parameter
+PASS Document.querySelector null
+PASS Document.querySelector undefined
+PASS Document.querySelector no parameter
+PASS Document.querySelectorAll tree order
+PASS Detached Element.querySelectorAll null
+PASS Detached Element.querySelectorAll undefined
+PASS Detached Element.querySelectorAll no parameter
+PASS Detached Element.querySelector null
+PASS Detached Element.querySelector undefined
+PASS Detached Element.querySelector no parameter
+PASS Detached Element.querySelectorAll tree order
+PASS Fragment.querySelectorAll null
+PASS Fragment.querySelectorAll undefined
+PASS Fragment.querySelectorAll no parameter
+PASS Fragment.querySelector null
+PASS Fragment.querySelector undefined
+PASS Fragment.querySelector no parameter
+PASS Fragment.querySelectorAll tree order
+PASS In-document Element.querySelectorAll null
+PASS In-document Element.querySelectorAll undefined
+PASS In-document Element.querySelectorAll no parameter
+PASS In-document Element.querySelector null
+PASS In-document Element.querySelector undefined
+PASS In-document Element.querySelector no parameter
+PASS In-document Element.querySelectorAll tree order
+PASS Document: static NodeList
+PASS Document: new NodeList
+PASS Detached Element: static NodeList
+PASS Detached Element: new NodeList
+PASS Fragment: static NodeList
+PASS Fragment: new NodeList
+PASS In-document Element: static NodeList
+PASS In-document Element: new NodeList
+PASS Document.querySelector: Empty String:
+PASS Document.querySelectorAll: Empty String:
+PASS Document.querySelector: Invalid character: [
+PASS Document.querySelectorAll: Invalid character: [
+PASS Document.querySelector: Invalid character: ]
+PASS Document.querySelectorAll: Invalid character: ]
+PASS Document.querySelector: Invalid character: (
+PASS Document.querySelectorAll: Invalid character: (
+PASS Document.querySelector: Invalid character: )
+PASS Document.querySelectorAll: Invalid character: )
+PASS Document.querySelector: Invalid character: {
+PASS Document.querySelectorAll: Invalid character: {
+PASS Document.querySelector: Invalid character: }
+PASS Document.querySelectorAll: Invalid character: }
+PASS Document.querySelector: Invalid character: <
+PASS Document.querySelectorAll: Invalid character: <
+PASS Document.querySelector: Invalid character: >
+PASS Document.querySelectorAll: Invalid character: >
+PASS Document.querySelector: Invalid ID: #
+PASS Document.querySelectorAll: Invalid ID: #
+PASS Document.querySelector: Invalid group of selectors: div,
+PASS Document.querySelectorAll: Invalid group of selectors: div,
+PASS Document.querySelector: Invalid class: .
+PASS Document.querySelectorAll: Invalid class: .
+PASS Document.querySelector: Invalid class: .5cm
+PASS Document.querySelectorAll: Invalid class: .5cm
+PASS Document.querySelector: Invalid class: ..test
+PASS Document.querySelectorAll: Invalid class: ..test
+PASS Document.querySelector: Invalid class: .foo..quux
+PASS Document.querySelectorAll: Invalid class: .foo..quux
+PASS Document.querySelector: Invalid class: .bar.
+PASS Document.querySelectorAll: Invalid class: .bar.
+PASS Document.querySelector: Invalid combinator: div & address, p
+PASS Document.querySelectorAll: Invalid combinator: div & address, p
+FAIL Document.querySelector: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.querySelector(q)
+ }" did not throw
+FAIL Document.querySelectorAll: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" did not throw
+PASS Document.querySelector: Invalid combinator: div ++ address, p
+PASS Document.querySelectorAll: Invalid combinator: div ++ address, p
+PASS Document.querySelector: Invalid combinator: div ~~ address, p
+PASS Document.querySelectorAll: Invalid combinator: div ~~ address, p
+PASS Document.querySelector: Invalid [att=value] selector: [*=test]
+PASS Document.querySelectorAll: Invalid [att=value] selector: [*=test]
+PASS Document.querySelector: Invalid [att=value] selector: [*|*=test]
+PASS Document.querySelectorAll: Invalid [att=value] selector: [*|*=test]
+PASS Document.querySelector: Invalid [att=value] selector: [class= space unquoted ]
+PASS Document.querySelectorAll: Invalid [att=value] selector: [class= space unquoted ]
+PASS Document.querySelector: Unknown pseudo-class: div:example
+PASS Document.querySelectorAll: Unknown pseudo-class: div:example
+PASS Document.querySelector: Unknown pseudo-class: :example
+PASS Document.querySelectorAll: Unknown pseudo-class: :example
+PASS Document.querySelector: Unknown pseudo-element: div::example
+PASS Document.querySelectorAll: Unknown pseudo-element: div::example
+PASS Document.querySelector: Unknown pseudo-element: ::example
+PASS Document.querySelectorAll: Unknown pseudo-element: ::example
+PASS Document.querySelector: Invalid pseudo-element: :::before
+PASS Document.querySelectorAll: Invalid pseudo-element: :::before
+FAIL Document.querySelector: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.querySelector(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Document.querySelectorAll: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Document.querySelector: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.querySelector(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Document.querySelectorAll: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+PASS Document.querySelector: Invalid namespace: ^|div
+PASS Document.querySelectorAll: Invalid namespace: ^|div
+PASS Document.querySelector: Invalid namespace: $|div
+PASS Document.querySelectorAll: Invalid namespace: $|div
+PASS Detached Element.querySelector: Empty String:
+PASS Detached Element.querySelectorAll: Empty String:
+PASS Detached Element.querySelector: Invalid character: [
+PASS Detached Element.querySelectorAll: Invalid character: [
+PASS Detached Element.querySelector: Invalid character: ]
+PASS Detached Element.querySelectorAll: Invalid character: ]
+PASS Detached Element.querySelector: Invalid character: (
+PASS Detached Element.querySelectorAll: Invalid character: (
+PASS Detached Element.querySelector: Invalid character: )
+PASS Detached Element.querySelectorAll: Invalid character: )
+PASS Detached Element.querySelector: Invalid character: {
+PASS Detached Element.querySelectorAll: Invalid character: {
+PASS Detached Element.querySelector: Invalid character: }
+PASS Detached Element.querySelectorAll: Invalid character: }
+PASS Detached Element.querySelector: Invalid character: <
+PASS Detached Element.querySelectorAll: Invalid character: <
+PASS Detached Element.querySelector: Invalid character: >
+PASS Detached Element.querySelectorAll: Invalid character: >
+PASS Detached Element.querySelector: Invalid ID: #
+PASS Detached Element.querySelectorAll: Invalid ID: #
+PASS Detached Element.querySelector: Invalid group of selectors: div,
+PASS Detached Element.querySelectorAll: Invalid group of selectors: div,
+PASS Detached Element.querySelector: Invalid class: .
+PASS Detached Element.querySelectorAll: Invalid class: .
+PASS Detached Element.querySelector: Invalid class: .5cm
+PASS Detached Element.querySelectorAll: Invalid class: .5cm
+PASS Detached Element.querySelector: Invalid class: ..test
+PASS Detached Element.querySelectorAll: Invalid class: ..test
+PASS Detached Element.querySelector: Invalid class: .foo..quux
+PASS Detached Element.querySelectorAll: Invalid class: .foo..quux
+PASS Detached Element.querySelector: Invalid class: .bar.
+PASS Detached Element.querySelectorAll: Invalid class: .bar.
+PASS Detached Element.querySelector: Invalid combinator: div & address, p
+PASS Detached Element.querySelectorAll: Invalid combinator: div & address, p
+FAIL Detached Element.querySelector: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.querySelector(q)
+ }" did not throw
+FAIL Detached Element.querySelectorAll: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" did not throw
+PASS Detached Element.querySelector: Invalid combinator: div ++ address, p
+PASS Detached Element.querySelectorAll: Invalid combinator: div ++ address, p
+PASS Detached Element.querySelector: Invalid combinator: div ~~ address, p
+PASS Detached Element.querySelectorAll: Invalid combinator: div ~~ address, p
+PASS Detached Element.querySelector: Invalid [att=value] selector: [*=test]
+PASS Detached Element.querySelectorAll: Invalid [att=value] selector: [*=test]
+PASS Detached Element.querySelector: Invalid [att=value] selector: [*|*=test]
+PASS Detached Element.querySelectorAll: Invalid [att=value] selector: [*|*=test]
+PASS Detached Element.querySelector: Invalid [att=value] selector: [class= space unquoted ]
+PASS Detached Element.querySelectorAll: Invalid [att=value] selector: [class= space unquoted ]
+PASS Detached Element.querySelector: Unknown pseudo-class: div:example
+PASS Detached Element.querySelectorAll: Unknown pseudo-class: div:example
+PASS Detached Element.querySelector: Unknown pseudo-class: :example
+PASS Detached Element.querySelectorAll: Unknown pseudo-class: :example
+PASS Detached Element.querySelector: Unknown pseudo-element: div::example
+PASS Detached Element.querySelectorAll: Unknown pseudo-element: div::example
+PASS Detached Element.querySelector: Unknown pseudo-element: ::example
+PASS Detached Element.querySelectorAll: Unknown pseudo-element: ::example
+PASS Detached Element.querySelector: Invalid pseudo-element: :::before
+PASS Detached Element.querySelectorAll: Invalid pseudo-element: :::before
+FAIL Detached Element.querySelector: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.querySelector(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Detached Element.querySelectorAll: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Detached Element.querySelector: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.querySelector(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Detached Element.querySelectorAll: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+PASS Detached Element.querySelector: Invalid namespace: ^|div
+PASS Detached Element.querySelectorAll: Invalid namespace: ^|div
+PASS Detached Element.querySelector: Invalid namespace: $|div
+PASS Detached Element.querySelectorAll: Invalid namespace: $|div
+PASS Fragment.querySelector: Empty String:
+PASS Fragment.querySelectorAll: Empty String:
+PASS Fragment.querySelector: Invalid character: [
+PASS Fragment.querySelectorAll: Invalid character: [
+PASS Fragment.querySelector: Invalid character: ]
+PASS Fragment.querySelectorAll: Invalid character: ]
+PASS Fragment.querySelector: Invalid character: (
+PASS Fragment.querySelectorAll: Invalid character: (
+PASS Fragment.querySelector: Invalid character: )
+PASS Fragment.querySelectorAll: Invalid character: )
+PASS Fragment.querySelector: Invalid character: {
+PASS Fragment.querySelectorAll: Invalid character: {
+PASS Fragment.querySelector: Invalid character: }
+PASS Fragment.querySelectorAll: Invalid character: }
+PASS Fragment.querySelector: Invalid character: <
+PASS Fragment.querySelectorAll: Invalid character: <
+PASS Fragment.querySelector: Invalid character: >
+PASS Fragment.querySelectorAll: Invalid character: >
+PASS Fragment.querySelector: Invalid ID: #
+PASS Fragment.querySelectorAll: Invalid ID: #
+PASS Fragment.querySelector: Invalid group of selectors: div,
+PASS Fragment.querySelectorAll: Invalid group of selectors: div,
+PASS Fragment.querySelector: Invalid class: .
+PASS Fragment.querySelectorAll: Invalid class: .
+PASS Fragment.querySelector: Invalid class: .5cm
+PASS Fragment.querySelectorAll: Invalid class: .5cm
+PASS Fragment.querySelector: Invalid class: ..test
+PASS Fragment.querySelectorAll: Invalid class: ..test
+PASS Fragment.querySelector: Invalid class: .foo..quux
+PASS Fragment.querySelectorAll: Invalid class: .foo..quux
+PASS Fragment.querySelector: Invalid class: .bar.
+PASS Fragment.querySelectorAll: Invalid class: .bar.
+PASS Fragment.querySelector: Invalid combinator: div & address, p
+PASS Fragment.querySelectorAll: Invalid combinator: div & address, p
+FAIL Fragment.querySelector: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.querySelector(q)
+ }" did not throw
+FAIL Fragment.querySelectorAll: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" did not throw
+PASS Fragment.querySelector: Invalid combinator: div ++ address, p
+PASS Fragment.querySelectorAll: Invalid combinator: div ++ address, p
+PASS Fragment.querySelector: Invalid combinator: div ~~ address, p
+PASS Fragment.querySelectorAll: Invalid combinator: div ~~ address, p
+PASS Fragment.querySelector: Invalid [att=value] selector: [*=test]
+PASS Fragment.querySelectorAll: Invalid [att=value] selector: [*=test]
+PASS Fragment.querySelector: Invalid [att=value] selector: [*|*=test]
+PASS Fragment.querySelectorAll: Invalid [att=value] selector: [*|*=test]
+PASS Fragment.querySelector: Invalid [att=value] selector: [class= space unquoted ]
+PASS Fragment.querySelectorAll: Invalid [att=value] selector: [class= space unquoted ]
+PASS Fragment.querySelector: Unknown pseudo-class: div:example
+PASS Fragment.querySelectorAll: Unknown pseudo-class: div:example
+PASS Fragment.querySelector: Unknown pseudo-class: :example
+PASS Fragment.querySelectorAll: Unknown pseudo-class: :example
+PASS Fragment.querySelector: Unknown pseudo-element: div::example
+PASS Fragment.querySelectorAll: Unknown pseudo-element: div::example
+PASS Fragment.querySelector: Unknown pseudo-element: ::example
+PASS Fragment.querySelectorAll: Unknown pseudo-element: ::example
+PASS Fragment.querySelector: Invalid pseudo-element: :::before
+PASS Fragment.querySelectorAll: Invalid pseudo-element: :::before
+FAIL Fragment.querySelector: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.querySelector(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Fragment.querySelectorAll: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Fragment.querySelector: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.querySelector(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Fragment.querySelectorAll: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+PASS Fragment.querySelector: Invalid namespace: ^|div
+PASS Fragment.querySelectorAll: Invalid namespace: ^|div
+PASS Fragment.querySelector: Invalid namespace: $|div
+PASS Fragment.querySelectorAll: Invalid namespace: $|div
+PASS In-document Element.querySelector: Empty String:
+PASS In-document Element.querySelectorAll: Empty String:
+PASS In-document Element.querySelector: Invalid character: [
+PASS In-document Element.querySelectorAll: Invalid character: [
+PASS In-document Element.querySelector: Invalid character: ]
+PASS In-document Element.querySelectorAll: Invalid character: ]
+PASS In-document Element.querySelector: Invalid character: (
+PASS In-document Element.querySelectorAll: Invalid character: (
+PASS In-document Element.querySelector: Invalid character: )
+PASS In-document Element.querySelectorAll: Invalid character: )
+PASS In-document Element.querySelector: Invalid character: {
+PASS In-document Element.querySelectorAll: Invalid character: {
+PASS In-document Element.querySelector: Invalid character: }
+PASS In-document Element.querySelectorAll: Invalid character: }
+PASS In-document Element.querySelector: Invalid character: <
+PASS In-document Element.querySelectorAll: Invalid character: <
+PASS In-document Element.querySelector: Invalid character: >
+PASS In-document Element.querySelectorAll: Invalid character: >
+PASS In-document Element.querySelector: Invalid ID: #
+PASS In-document Element.querySelectorAll: Invalid ID: #
+PASS In-document Element.querySelector: Invalid group of selectors: div,
+PASS In-document Element.querySelectorAll: Invalid group of selectors: div,
+PASS In-document Element.querySelector: Invalid class: .
+PASS In-document Element.querySelectorAll: Invalid class: .
+PASS In-document Element.querySelector: Invalid class: .5cm
+PASS In-document Element.querySelectorAll: Invalid class: .5cm
+PASS In-document Element.querySelector: Invalid class: ..test
+PASS In-document Element.querySelectorAll: Invalid class: ..test
+PASS In-document Element.querySelector: Invalid class: .foo..quux
+PASS In-document Element.querySelectorAll: Invalid class: .foo..quux
+PASS In-document Element.querySelector: Invalid class: .bar.
+PASS In-document Element.querySelectorAll: Invalid class: .bar.
+PASS In-document Element.querySelector: Invalid combinator: div & address, p
+PASS In-document Element.querySelectorAll: Invalid combinator: div & address, p
+FAIL In-document Element.querySelector: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.querySelector(q)
+ }" did not throw
+FAIL In-document Element.querySelectorAll: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" did not throw
+PASS In-document Element.querySelector: Invalid combinator: div ++ address, p
+PASS In-document Element.querySelectorAll: Invalid combinator: div ++ address, p
+PASS In-document Element.querySelector: Invalid combinator: div ~~ address, p
+PASS In-document Element.querySelectorAll: Invalid combinator: div ~~ address, p
+PASS In-document Element.querySelector: Invalid [att=value] selector: [*=test]
+PASS In-document Element.querySelectorAll: Invalid [att=value] selector: [*=test]
+PASS In-document Element.querySelector: Invalid [att=value] selector: [*|*=test]
+PASS In-document Element.querySelectorAll: Invalid [att=value] selector: [*|*=test]
+PASS In-document Element.querySelector: Invalid [att=value] selector: [class= space unquoted ]
+PASS In-document Element.querySelectorAll: Invalid [att=value] selector: [class= space unquoted ]
+PASS In-document Element.querySelector: Unknown pseudo-class: div:example
+PASS In-document Element.querySelectorAll: Unknown pseudo-class: div:example
+PASS In-document Element.querySelector: Unknown pseudo-class: :example
+PASS In-document Element.querySelectorAll: Unknown pseudo-class: :example
+PASS In-document Element.querySelector: Unknown pseudo-element: div::example
+PASS In-document Element.querySelectorAll: Unknown pseudo-element: div::example
+PASS In-document Element.querySelector: Unknown pseudo-element: ::example
+PASS In-document Element.querySelectorAll: Unknown pseudo-element: ::example
+PASS In-document Element.querySelector: Invalid pseudo-element: :::before
+PASS In-document Element.querySelectorAll: Invalid pseudo-element: :::before
+FAIL In-document Element.querySelector: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.querySelector(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL In-document Element.querySelectorAll: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL In-document Element.querySelector: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.querySelector(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL In-document Element.querySelectorAll: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+PASS In-document Element.querySelector: Invalid namespace: ^|div
+PASS In-document Element.querySelectorAll: Invalid namespace: ^|div
+PASS In-document Element.querySelector: Invalid namespace: $|div
+PASS In-document Element.querySelectorAll: Invalid namespace: $|div
+PASS Document.querySelectorAll: Type selector, matching html element: html
+PASS Document.querySelector: Type selector, matching html element: html
+PASS Document.querySelectorAll: Type selector, matching body element: body
+PASS Document.querySelector: Type selector, matching body element: body
+PASS Document.querySelectorAll: Universal selector, matching all children of element with specified ID: #universal>*
+PASS Document.querySelector: Universal selector, matching all children of element with specified ID: #universal>*
+PASS Document.querySelectorAll: Universal selector, matching all grandchildren of element with specified ID: #universal>*>*
+PASS Document.querySelector: Universal selector, matching all grandchildren of element with specified ID: #universal>*>*
+PASS Document.querySelectorAll: Universal selector, matching all children of empty element with specified ID: #empty>*
+PASS Document.querySelector: Universal selector, matching all children of empty element with specified ID: #empty>*
+PASS Document.querySelectorAll: Universal selector, matching all descendants of element with specified ID: #universal *
+PASS Document.querySelector: Universal selector, matching all descendants of element with specified ID: #universal *
+PASS Document.querySelectorAll: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align]
+PASS Document.querySelector: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align]
+PASS Document.querySelectorAll: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align]
+PASS Document.querySelector: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align]
+PASS Document.querySelectorAll: Attribute presence selector, matching title attribute, case insensitivity: #attr-presence [TiTlE]
+PASS Document.querySelector: Attribute presence selector, matching title attribute, case insensitivity: #attr-presence [TiTlE]
+PASS Document.querySelectorAll: Attribute presence selector, matching custom data-* attribute: [data-attr-presence]
+PASS Document.querySelector: Attribute presence selector, matching custom data-* attribute: [data-attr-presence]
+PASS Document.querySelectorAll: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align]
+PASS Document.querySelector: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align]
+PASS Document.querySelectorAll: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文]
+PASS Document.querySelector: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文]
+PASS Document.querySelectorAll: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected]
+PASS Document.querySelector: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected]
+PASS Document.querySelectorAll: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected]
+PASS Document.querySelector: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected]
+PASS Document.querySelectorAll: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected]
+PASS Document.querySelector: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected]
+PASS Document.querySelectorAll: Attribute value selector, matching align attribute with value: #attr-value [align="center"]
+PASS Document.querySelector: Attribute value selector, matching align attribute with value: #attr-value [align="center"]
+PASS Document.querySelectorAll: Attribute value selector, matching align attribute with empty value: #attr-value [align=""]
+PASS Document.querySelector: Attribute value selector, matching align attribute with empty value: #attr-value [align=""]
+PASS Document.querySelectorAll: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"]
+PASS Document.querySelector: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"]
+PASS Document.querySelectorAll: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"]
+PASS Document.querySelector: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"]
+PASS Document.querySelectorAll: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"]
+PASS Document.querySelector: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"]
+PASS Document.querySelectorAll: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"]
+PASS Document.querySelector: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"]
+PASS Document.querySelectorAll: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS Document.querySelector: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS Document.querySelectorAll: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS Document.querySelector: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS Document.querySelectorAll: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS Document.querySelector: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS Document.querySelectorAll: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文]
+PASS Document.querySelector: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文]
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"]
+PASS Document.querySelector: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"]
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""]
+PASS Document.querySelector: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""]
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"]
+PASS Document.querySelector: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"]
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"]
+PASS Document.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"]
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"]
+PASS Document.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"]
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS Document.querySelector: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS Document.querySelector: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS Document.querySelector: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"]
+PASS Document.querySelector: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"]
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文]
+PASS Document.querySelector: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文]
+PASS Document.querySelectorAll: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"]
+PASS Document.querySelector: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"]
+PASS Document.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"]
+PASS Document.querySelector: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"]
+PASS Document.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"]
+PASS Document.querySelector: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"]
+PASS Document.querySelectorAll: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"]
+PASS Document.querySelector: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"]
+PASS Document.querySelectorAll: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"]
+PASS Document.querySelector: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"]
+PASS Document.querySelectorAll: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"]
+PASS Document.querySelector: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"]
+PASS Document.querySelectorAll: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple]
+PASS Document.querySelector: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple]
+PASS Document.querySelectorAll: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple']
+PASS Document.querySelector: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple']
+PASS Document.querySelectorAll: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"]
+PASS Document.querySelector: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"]
+PASS Document.querySelectorAll: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple]
+PASS Document.querySelector: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple]
+PASS Document.querySelectorAll: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"]
+PASS Document.querySelector: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"]
+PASS Document.querySelectorAll: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"]
+PASS Document.querySelector: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"]
+PASS Document.querySelectorAll: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple]
+PASS Document.querySelector: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple]
+PASS Document.querySelectorAll: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple ']
+PASS Document.querySelector: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple ']
+PASS Document.querySelectorAll: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "]
+PASS Document.querySelector: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "]
+PASS Document.querySelectorAll: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ]
+PASS Document.querySelector: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ]
+PASS Document.querySelectorAll: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"]
+PASS Document.querySelector: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"]
+PASS Document.querySelectorAll: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"]
+PASS Document.querySelector: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"]
+PASS Document.querySelectorAll: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."]
+PASS Document.querySelector: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."]
+PASS Document.querySelectorAll: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"]
+PASS Document.querySelector: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"]
+PASS Document.querySelectorAll: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"]
+PASS Document.querySelector: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"]
+PASS Document.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple']
+PASS Document.querySelector: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple']
+PASS Document.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange ']
+PASS Document.querySelector: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange ']
+PASS Document.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora']
+PASS Document.querySelector: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora']
+PASS Document.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"]
+PASS Document.querySelector: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"]
+PASS Document.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "]
+PASS Document.querySelector: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "]
+PASS Document.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"]
+PASS Document.querySelector: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"]
+PASS Document.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple]
+PASS Document.querySelector: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple]
+PASS Document.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ]
+PASS Document.querySelector: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ]
+PASS Document.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ]
+PASS Document.querySelector: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ]
+PASS Document.querySelectorAll: :root pseudo-class selector, matching document root element: :root
+PASS Document.querySelector: :root pseudo-class selector, matching document root element: :root
+PASS Document.querySelectorAll: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3)
+PASS Document.querySelector: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3)
+PASS Document.querySelectorAll: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n)
+PASS Document.querySelector: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n)
+PASS Document.querySelectorAll: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4)
+PASS Document.querySelector: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4)
+PASS Document.querySelectorAll: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1)
+PASS Document.querySelector: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1)
+PASS Document.querySelectorAll: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3)
+PASS Document.querySelector: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3)
+PASS Document.querySelectorAll: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n)
+PASS Document.querySelector: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n)
+PASS Document.querySelectorAll: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4)
+PASS Document.querySelector: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4)
+PASS Document.querySelectorAll: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS Document.querySelector: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS Document.querySelectorAll: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3)
+PASS Document.querySelector: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3)
+PASS Document.querySelectorAll: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n)
+PASS Document.querySelector: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n)
+PASS Document.querySelectorAll: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS Document.querySelector: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS Document.querySelectorAll: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS Document.querySelector: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS Document.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS Document.querySelector: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS Document.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS Document.querySelector: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS Document.querySelectorAll: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type
+PASS Document.querySelector: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type
+PASS Document.querySelectorAll: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type
+PASS Document.querySelector: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type
+PASS Document.querySelectorAll: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type
+PASS Document.querySelector: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type
+PASS Document.querySelectorAll: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type
+PASS Document.querySelector: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type
+PASS Document.querySelectorAll: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type
+PASS Document.querySelector: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type
+PASS Document.querySelectorAll: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type
+PASS Document.querySelector: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type
+PASS Document.querySelectorAll: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child
+PASS Document.querySelector: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child
+PASS Document.querySelectorAll: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child
+PASS Document.querySelector: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child
+PASS Document.querySelectorAll: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child
+PASS Document.querySelector: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child
+PASS Document.querySelectorAll: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child
+PASS Document.querySelector: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child
+PASS Document.querySelectorAll: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child
+PASS Document.querySelector: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child
+PASS Document.querySelectorAll: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child
+PASS Document.querySelector: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child
+PASS Document.querySelectorAll: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child
+PASS Document.querySelector: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child
+PASS Document.querySelectorAll: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child
+PASS Document.querySelector: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child
+PASS Document.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type
+PASS Document.querySelector: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type
+PASS Document.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type
+PASS Document.querySelector: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type
+PASS Document.querySelectorAll: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty
+PASS Document.querySelector: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty
+PASS Document.querySelectorAll: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty
+PASS Document.querySelector: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty
+PASS Document.querySelectorAll: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited
+PASS Document.querySelector: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited
+PASS Document.querySelectorAll: :link and :visited pseudo-class selectors, matching link elements with href attributes: #head :link, #head :visited
+PASS Document.querySelector: :link and :visited pseudo-class selectors, matching link elements with href attributes: #head :link, #head :visited
+FAIL Document.querySelectorAll: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target assert_equals: The method should return the expected number of matches. expected 1 but got 0
+FAIL Document.querySelector: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target assert_not_equals: The method should return a match. got disallowed value null
+PASS Document.querySelectorAll: :lang pseudo-class selector, matching inherited language: #pseudo-lang-div1:lang(en)
+PASS Document.querySelector: :lang pseudo-class selector, matching inherited language: #pseudo-lang-div1:lang(en)
+PASS Document.querySelectorAll: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)
+PASS Document.querySelector: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)
+PASS Document.querySelectorAll: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)
+PASS Document.querySelector: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)
+PASS Document.querySelectorAll: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)
+PASS Document.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)
+PASS Document.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled
+PASS Document.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled
+PASS Document.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled
+PASS Document.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled
+PASS Document.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked
+PASS Document.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked
+PASS Document.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div)
+PASS Document.querySelector: :not pseudo-class selector, matching : #not>:not(div)
+PASS Document.querySelectorAll: :not pseudo-class selector, matching : #not * :not(:first-child)
+PASS Document.querySelector: :not pseudo-class selector, matching : #not * :not(:first-child)
+PASS Document.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*)
+PASS Document.querySelector: :not pseudo-class selector, matching nothing: :not(*)
+PASS Document.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*)
+PASS Document.querySelector: :not pseudo-class selector, matching nothing: :not(*|*)
+PASS Document.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line
+PASS Document.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line
+PASS Document.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line
+PASS Document.querySelector: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line
+PASS Document.querySelectorAll: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter
+PASS Document.querySelector: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter
+PASS Document.querySelectorAll: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter
+PASS Document.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter
+PASS Document.querySelectorAll: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before
+PASS Document.querySelector: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before
+PASS Document.querySelectorAll: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before
+PASS Document.querySelector: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before
+PASS Document.querySelectorAll: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after
+PASS Document.querySelector: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after
+PASS Document.querySelectorAll: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after
+PASS Document.querySelector: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after
+PASS Document.querySelectorAll: Class selector, matching element with specified class: .class-p
+PASS Document.querySelector: Class selector, matching element with specified class: .class-p
+PASS Document.querySelectorAll: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana
+PASS Document.querySelector: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana
+PASS Document.querySelectorAll: Class Selector, chained, with type selector: div.apple.banana.orange
+PASS Document.querySelector: Class Selector, chained, with type selector: div.apple.banana.orange
+PASS Document.querySelectorAll: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi
+PASS Document.querySelector: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi
+PASS Document.querySelectorAll: Class selector, matching multiple elements with class value using non-ASCII characters: .台北
+PASS Document.querySelector: Class selector, matching multiple elements with class value using non-ASCII characters: .台北
+PASS Document.querySelectorAll: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北
+PASS Document.querySelector: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北
+PASS Document.querySelectorAll: Class selector, matching element with class with escaped character: .foo\:bar
+PASS Document.querySelector: Class selector, matching element with class with escaped character: .foo\:bar
+PASS Document.querySelectorAll: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar
+PASS Document.querySelector: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar
+PASS Document.querySelectorAll: ID selector, matching element with specified id: #id #id-div1
+PASS Document.querySelector: ID selector, matching element with specified id: #id #id-div1
+PASS Document.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div1
+PASS Document.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div1
+PASS Document.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div2
+PASS Document.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div2
+PASS Document.querySelectorAll: ID Selector, chained, with type selector: div#id-div1, div#id-div2
+PASS Document.querySelector: ID Selector, chained, with type selector: div#id-div1, div#id-div2
+PASS Document.querySelectorAll: ID selector, not matching non-existent descendant: #id #none
+PASS Document.querySelector: ID selector, not matching non-existent descendant: #id #none
+PASS Document.querySelectorAll: ID selector, not matching non-existent ancestor: #none #id-div1
+PASS Document.querySelector: ID selector, not matching non-existent ancestor: #none #id-div1
+PASS Document.querySelectorAll: ID selector, matching multiple elements with duplicate id: #id-li-duplicate
+PASS Document.querySelector: ID selector, matching multiple elements with duplicate id: #id-li-duplicate
+PASS Document.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北Táiběi
+PASS Document.querySelector: ID selector, matching id value using non-ASCII characters: #台北Táiběi
+PASS Document.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北
+PASS Document.querySelector: ID selector, matching id value using non-ASCII characters: #台北
+PASS Document.querySelectorAll: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北
+PASS Document.querySelector: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北
+PASS Document.querySelectorAll: ID selector, matching element with id with escaped character: #\#foo\:bar
+PASS Document.querySelector: ID selector, matching element with id with escaped character: #\#foo\:bar
+PASS Document.querySelectorAll: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar
+PASS Document.querySelector: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar
+PASS Document.querySelectorAll: Namespace selector, matching element with any namespace: #any-namespace *|div
+PASS Document.querySelector: Namespace selector, matching element with any namespace: #any-namespace *|div
+FAIL Document.querySelectorAll: Namespace selector, matching div elements in no namespace only: #no-namespace |div assert_equals: The method should return the expected number of matches. expected 1 but got 4
+FAIL Document.querySelector: Namespace selector, matching div elements in no namespace only: #no-namespace |div assert_equals: The method should return the first match. expected "no-namespace-div3" but got "no-namespace-div1"
+FAIL Document.querySelectorAll: Namespace selector, matching any elements in no namespace only: #no-namespace |* assert_equals: The method should return the expected number of matches. expected 1 but got 4
+FAIL Document.querySelector: Namespace selector, matching any elements in no namespace only: #no-namespace |* assert_equals: The method should return the first match. expected "no-namespace-div3" but got "no-namespace-div1"
+PASS Document.querySelectorAll: Descendant combinator, matching element that is a descendant of an element with id: #descendant div
+PASS Document.querySelector: Descendant combinator, matching element that is a descendant of an element with id: #descendant div
+PASS Document.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: body #descendant-div1
+PASS Document.querySelector: Descendant combinator, matching element with id that is a descendant of an element: body #descendant-div1
+PASS Document.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1
+PASS Document.querySelector: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1
+PASS Document.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2
+PASS Document.querySelector: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2
+PASS Document.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2
+PASS Document.querySelector: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2
+PASS Document.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3
+PASS Document.querySelector: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3
+PASS Document.querySelectorAll: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4
+PASS Document.querySelector: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4
+PASS Document.querySelectorAll: Descendant combinator, whitespace characters: #descendant        
+#descendant-div2
+PASS Document.querySelector: Descendant combinator, whitespace characters: #descendant        
+#descendant-div2
+PASS Document.querySelectorAll: Child combinator, matching element that is a child of an element with id: #child>div
+PASS Document.querySelector: Child combinator, matching element that is a child of an element with id: #child>div
+PASS Document.querySelectorAll: Child combinator, matching element with id that is a child of an element: div>#child-div1
+PASS Document.querySelector: Child combinator, matching element with id that is a child of an element: div>#child-div1
+PASS Document.querySelectorAll: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1
+PASS Document.querySelector: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1
+PASS Document.querySelectorAll: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2
+PASS Document.querySelector: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2
+PASS Document.querySelectorAll: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2
+PASS Document.querySelector: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2
+PASS Document.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3
+PASS Document.querySelector: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3
+PASS Document.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3
+PASS Document.querySelector: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3
+PASS Document.querySelectorAll: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3
+PASS Document.querySelector: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3
+PASS Document.querySelectorAll: Child combinator, surrounded by whitespace: #child-div1        
+>        
+#child-div2
+PASS Document.querySelector: Child combinator, surrounded by whitespace: #child-div1        
+>        
+#child-div2
+PASS Document.querySelectorAll: Child combinator, whitespace after: #child-div1>        
+#child-div2
+PASS Document.querySelector: Child combinator, whitespace after: #child-div1>        
+#child-div2
+PASS Document.querySelectorAll: Child combinator, whitespace before: #child-div1        
+>#child-div2
+PASS Document.querySelector: Child combinator, whitespace before: #child-div1        
+>#child-div2
+PASS Document.querySelectorAll: Child combinator, no whitespace: #child-div1>#child-div2
+PASS Document.querySelector: Child combinator, no whitespace: #child-div1>#child-div2
+PASS Document.querySelectorAll: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div
+PASS Document.querySelector: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div
+PASS Document.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4
+PASS Document.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4
+PASS Document.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4
+PASS Document.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4
+PASS Document.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4
+PASS Document.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4
+PASS Document.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4
+PASS Document.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4
+PASS Document.querySelectorAll: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p
+PASS Document.querySelector: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p
+PASS Document.querySelectorAll: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1
+PASS Document.querySelector: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1
+PASS Document.querySelectorAll: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2        
++        
+#adjacent-p3
+PASS Document.querySelector: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2        
++        
+#adjacent-p3
+PASS Document.querySelectorAll: Adjacent sibling combinator, whitespace after: #adjacent-p2+        
+#adjacent-p3
+PASS Document.querySelector: Adjacent sibling combinator, whitespace after: #adjacent-p2+        
+#adjacent-p3
+PASS Document.querySelectorAll: Adjacent sibling combinator, whitespace before: #adjacent-p2        
++#adjacent-p3
+PASS Document.querySelector: Adjacent sibling combinator, whitespace before: #adjacent-p2        
++#adjacent-p3
+PASS Document.querySelectorAll: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3
+PASS Document.querySelector: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3
+PASS Document.querySelectorAll: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div
+PASS Document.querySelector: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div
+PASS Document.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4
+PASS Document.querySelector: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4
+PASS Document.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4
+PASS Document.querySelector: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4
+PASS Document.querySelectorAll: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div
+PASS Document.querySelector: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div
+PASS Document.querySelectorAll: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p
+PASS Document.querySelector: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p
+PASS Document.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div
+PASS Document.querySelector: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div
+PASS Document.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1
+PASS Document.querySelector: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1
+PASS Document.querySelectorAll: General sibling combinator, surrounded by whitespace: #sibling-p2        
+~        
+#sibling-p3
+PASS Document.querySelector: General sibling combinator, surrounded by whitespace: #sibling-p2        
+~        
+#sibling-p3
+PASS Document.querySelectorAll: General sibling combinator, whitespace after: #sibling-p2~        
+#sibling-p3
+PASS Document.querySelector: General sibling combinator, whitespace after: #sibling-p2~        
+#sibling-p3
+PASS Document.querySelectorAll: General sibling combinator, whitespace before: #sibling-p2        
+~#sibling-p3
+PASS Document.querySelector: General sibling combinator, whitespace before: #sibling-p2        
+~#sibling-p3
+PASS Document.querySelectorAll: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3
+PASS Document.querySelector: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3
+PASS Document.querySelectorAll: Syntax, group of selectors separator, surrounded by whitespace: #group em        
+
+,        
+
+#group strong
+PASS Document.querySelector: Syntax, group of selectors separator, surrounded by whitespace: #group em        
+
+,        
+
+#group strong
+PASS Document.querySelectorAll: Syntax, group of selectors separator, whitespace after: #group em,        
+#group strong
+PASS Document.querySelector: Syntax, group of selectors separator, whitespace after: #group em,        
+#group strong
+PASS Document.querySelectorAll: Syntax, group of selectors separator, whitespace before: #group em        
+,#group strong
+PASS Document.querySelector: Syntax, group of selectors separator, whitespace before: #group em        
+,#group strong
+PASS Document.querySelectorAll: Syntax, group of selectors separator, no whitespace: #group em,#group strong
+PASS Document.querySelector: Syntax, group of selectors separator, no whitespace: #group em,#group strong
+PASS Detached Element.querySelectorAll: Type selector, matching html element: html
+PASS Detached Element.querySelector: Type selector, matching html element: html
+PASS Detached Element.querySelectorAll: Type selector, matching body element: body
+PASS Detached Element.querySelector: Type selector, matching body element: body
+PASS Detached Element.querySelectorAll: Universal selector, matching all children of element with specified ID: #universal>*
+PASS Detached Element.querySelector: Universal selector, matching all children of element with specified ID: #universal>*
+PASS Detached Element.querySelectorAll: Universal selector, matching all grandchildren of element with specified ID: #universal>*>*
+PASS Detached Element.querySelector: Universal selector, matching all grandchildren of element with specified ID: #universal>*>*
+PASS Detached Element.querySelectorAll: Universal selector, matching all children of empty element with specified ID: #empty>*
+PASS Detached Element.querySelector: Universal selector, matching all children of empty element with specified ID: #empty>*
+PASS Detached Element.querySelectorAll: Universal selector, matching all descendants of element with specified ID: #universal *
+PASS Detached Element.querySelector: Universal selector, matching all descendants of element with specified ID: #universal *
+PASS Detached Element.querySelectorAll: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align]
+PASS Detached Element.querySelector: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align]
+PASS Detached Element.querySelectorAll: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align]
+PASS Detached Element.querySelector: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align]
+PASS Detached Element.querySelectorAll: Attribute presence selector, matching title attribute, case insensitivity: #attr-presence [TiTlE]
+PASS Detached Element.querySelector: Attribute presence selector, matching title attribute, case insensitivity: #attr-presence [TiTlE]
+PASS Detached Element.querySelectorAll: Attribute presence selector, matching custom data-* attribute: [data-attr-presence]
+PASS Detached Element.querySelector: Attribute presence selector, matching custom data-* attribute: [data-attr-presence]
+PASS Detached Element.querySelectorAll: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align]
+PASS Detached Element.querySelector: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align]
+PASS Detached Element.querySelectorAll: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文]
+PASS Detached Element.querySelector: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文]
+PASS Detached Element.querySelectorAll: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected]
+PASS Detached Element.querySelector: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected]
+PASS Detached Element.querySelectorAll: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected]
+PASS Detached Element.querySelector: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected]
+PASS Detached Element.querySelectorAll: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected]
+PASS Detached Element.querySelector: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected]
+PASS Detached Element.querySelectorAll: Attribute value selector, matching align attribute with value: #attr-value [align="center"]
+PASS Detached Element.querySelector: Attribute value selector, matching align attribute with value: #attr-value [align="center"]
+PASS Detached Element.querySelectorAll: Attribute value selector, matching align attribute with empty value: #attr-value [align=""]
+PASS Detached Element.querySelector: Attribute value selector, matching align attribute with empty value: #attr-value [align=""]
+PASS Detached Element.querySelectorAll: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"]
+PASS Detached Element.querySelector: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"]
+PASS Detached Element.querySelectorAll: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"]
+PASS Detached Element.querySelector: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"]
+PASS Detached Element.querySelectorAll: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"]
+PASS Detached Element.querySelector: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"]
+PASS Detached Element.querySelectorAll: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"]
+PASS Detached Element.querySelector: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"]
+PASS Detached Element.querySelectorAll: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS Detached Element.querySelector: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS Detached Element.querySelectorAll: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS Detached Element.querySelector: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS Detached Element.querySelectorAll: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS Detached Element.querySelector: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS Detached Element.querySelectorAll: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文]
+PASS Detached Element.querySelector: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文]
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"]
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"]
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""]
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""]
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"]
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"]
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"]
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"]
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"]
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"]
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"]
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"]
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文]
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文]
+PASS Detached Element.querySelectorAll: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"]
+PASS Detached Element.querySelector: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"]
+PASS Detached Element.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"]
+PASS Detached Element.querySelector: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"]
+PASS Detached Element.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"]
+PASS Detached Element.querySelector: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"]
+PASS Detached Element.querySelectorAll: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"]
+PASS Detached Element.querySelector: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"]
+PASS Detached Element.querySelectorAll: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"]
+PASS Detached Element.querySelector: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"]
+PASS Detached Element.querySelectorAll: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"]
+PASS Detached Element.querySelector: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"]
+PASS Detached Element.querySelectorAll: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple]
+PASS Detached Element.querySelector: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple]
+PASS Detached Element.querySelectorAll: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple']
+PASS Detached Element.querySelector: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple']
+PASS Detached Element.querySelectorAll: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"]
+PASS Detached Element.querySelector: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"]
+PASS Detached Element.querySelectorAll: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple]
+PASS Detached Element.querySelector: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple]
+PASS Detached Element.querySelectorAll: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"]
+PASS Detached Element.querySelector: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"]
+PASS Detached Element.querySelectorAll: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"]
+PASS Detached Element.querySelector: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"]
+PASS Detached Element.querySelectorAll: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple]
+PASS Detached Element.querySelector: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple]
+PASS Detached Element.querySelectorAll: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple ']
+PASS Detached Element.querySelector: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple ']
+PASS Detached Element.querySelectorAll: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "]
+PASS Detached Element.querySelector: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "]
+PASS Detached Element.querySelectorAll: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ]
+PASS Detached Element.querySelector: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ]
+PASS Detached Element.querySelectorAll: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"]
+PASS Detached Element.querySelector: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"]
+PASS Detached Element.querySelectorAll: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"]
+PASS Detached Element.querySelector: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"]
+PASS Detached Element.querySelectorAll: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."]
+PASS Detached Element.querySelector: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."]
+PASS Detached Element.querySelectorAll: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"]
+PASS Detached Element.querySelector: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"]
+PASS Detached Element.querySelectorAll: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"]
+PASS Detached Element.querySelector: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"]
+PASS Detached Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple']
+PASS Detached Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple']
+PASS Detached Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange ']
+PASS Detached Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange ']
+PASS Detached Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora']
+PASS Detached Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora']
+PASS Detached Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"]
+PASS Detached Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"]
+PASS Detached Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "]
+PASS Detached Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "]
+PASS Detached Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"]
+PASS Detached Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"]
+PASS Detached Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple]
+PASS Detached Element.querySelector: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple]
+PASS Detached Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ]
+PASS Detached Element.querySelector: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ]
+PASS Detached Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ]
+PASS Detached Element.querySelector: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ]
+PASS Detached Element.querySelectorAll: :root pseudo-class selector, not matching document root element: :root
+PASS Detached Element.querySelector: :root pseudo-class selector, not matching document root element: :root
+PASS Detached Element.querySelectorAll: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3)
+PASS Detached Element.querySelector: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3)
+PASS Detached Element.querySelectorAll: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n)
+PASS Detached Element.querySelector: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n)
+PASS Detached Element.querySelectorAll: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4)
+PASS Detached Element.querySelector: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4)
+PASS Detached Element.querySelectorAll: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1)
+PASS Detached Element.querySelector: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1)
+PASS Detached Element.querySelectorAll: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3)
+PASS Detached Element.querySelector: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3)
+PASS Detached Element.querySelectorAll: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n)
+PASS Detached Element.querySelector: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n)
+PASS Detached Element.querySelectorAll: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4)
+PASS Detached Element.querySelector: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4)
+PASS Detached Element.querySelectorAll: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS Detached Element.querySelector: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS Detached Element.querySelectorAll: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3)
+PASS Detached Element.querySelector: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3)
+PASS Detached Element.querySelectorAll: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n)
+PASS Detached Element.querySelector: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n)
+PASS Detached Element.querySelectorAll: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS Detached Element.querySelector: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS Detached Element.querySelectorAll: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS Detached Element.querySelector: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS Detached Element.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS Detached Element.querySelector: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS Detached Element.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS Detached Element.querySelector: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS Detached Element.querySelectorAll: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type
+PASS Detached Element.querySelector: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type
+PASS Detached Element.querySelectorAll: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type
+PASS Detached Element.querySelector: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type
+PASS Detached Element.querySelectorAll: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type
+PASS Detached Element.querySelector: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type
+PASS Detached Element.querySelectorAll: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type
+PASS Detached Element.querySelector: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type
+PASS Detached Element.querySelectorAll: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type
+PASS Detached Element.querySelector: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type
+PASS Detached Element.querySelectorAll: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type
+PASS Detached Element.querySelector: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type
+PASS Detached Element.querySelectorAll: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child
+PASS Detached Element.querySelector: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child
+PASS Detached Element.querySelectorAll: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child
+PASS Detached Element.querySelector: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child
+PASS Detached Element.querySelectorAll: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child
+PASS Detached Element.querySelector: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child
+PASS Detached Element.querySelectorAll: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child
+PASS Detached Element.querySelector: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child
+PASS Detached Element.querySelectorAll: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child
+PASS Detached Element.querySelector: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child
+PASS Detached Element.querySelectorAll: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child
+PASS Detached Element.querySelector: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child
+PASS Detached Element.querySelectorAll: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child
+PASS Detached Element.querySelector: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child
+PASS Detached Element.querySelectorAll: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child
+PASS Detached Element.querySelector: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child
+PASS Detached Element.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type
+PASS Detached Element.querySelector: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type
+PASS Detached Element.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type
+PASS Detached Element.querySelector: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type
+PASS Detached Element.querySelectorAll: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty
+PASS Detached Element.querySelector: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty
+PASS Detached Element.querySelectorAll: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty
+PASS Detached Element.querySelector: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty
+PASS Detached Element.querySelectorAll: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited
+PASS Detached Element.querySelector: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited
+PASS Detached Element.querySelectorAll: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited
+PASS Detached Element.querySelector: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited
+PASS Detached Element.querySelectorAll: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited
+PASS Detached Element.querySelector: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited
+PASS Detached Element.querySelectorAll: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target
+PASS Detached Element.querySelector: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target
+PASS Detached Element.querySelectorAll: :lang pseudo-class selector, not matching element with no inherited language: #pseudo-lang-div1:lang(en)
+PASS Detached Element.querySelector: :lang pseudo-class selector, not matching element with no inherited language: #pseudo-lang-div1:lang(en)
+PASS Detached Element.querySelectorAll: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)
+PASS Detached Element.querySelector: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)
+PASS Detached Element.querySelectorAll: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)
+PASS Detached Element.querySelector: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)
+PASS Detached Element.querySelectorAll: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)
+PASS Detached Element.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)
+PASS Detached Element.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled
+PASS Detached Element.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled
+PASS Detached Element.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled
+PASS Detached Element.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled
+PASS Detached Element.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked
+PASS Detached Element.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked
+PASS Detached Element.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div)
+PASS Detached Element.querySelector: :not pseudo-class selector, matching : #not>:not(div)
+PASS Detached Element.querySelectorAll: :not pseudo-class selector, matching : #not * :not(:first-child)
+PASS Detached Element.querySelector: :not pseudo-class selector, matching : #not * :not(:first-child)
+PASS Detached Element.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*)
+PASS Detached Element.querySelector: :not pseudo-class selector, matching nothing: :not(*)
+PASS Detached Element.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*)
+PASS Detached Element.querySelector: :not pseudo-class selector, matching nothing: :not(*|*)
+PASS Detached Element.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line
+PASS Detached Element.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line
+PASS Detached Element.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line
+PASS Detached Element.querySelector: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line
+PASS Detached Element.querySelectorAll: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter
+PASS Detached Element.querySelector: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter
+PASS Detached Element.querySelectorAll: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter
+PASS Detached Element.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter
+PASS Detached Element.querySelectorAll: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before
+PASS Detached Element.querySelector: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before
+PASS Detached Element.querySelectorAll: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before
+PASS Detached Element.querySelector: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before
+PASS Detached Element.querySelectorAll: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after
+PASS Detached Element.querySelector: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after
+PASS Detached Element.querySelectorAll: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after
+PASS Detached Element.querySelector: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after
+PASS Detached Element.querySelectorAll: Class selector, matching element with specified class: .class-p
+PASS Detached Element.querySelector: Class selector, matching element with specified class: .class-p
+PASS Detached Element.querySelectorAll: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana
+PASS Detached Element.querySelector: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana
+PASS Detached Element.querySelectorAll: Class Selector, chained, with type selector: div.apple.banana.orange
+PASS Detached Element.querySelector: Class Selector, chained, with type selector: div.apple.banana.orange
+PASS Detached Element.querySelectorAll: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi
+PASS Detached Element.querySelector: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi
+PASS Detached Element.querySelectorAll: Class selector, matching multiple elements with class value using non-ASCII characters: .台北
+PASS Detached Element.querySelector: Class selector, matching multiple elements with class value using non-ASCII characters: .台北
+PASS Detached Element.querySelectorAll: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北
+PASS Detached Element.querySelector: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北
+PASS Detached Element.querySelectorAll: Class selector, matching element with class with escaped character: .foo\:bar
+PASS Detached Element.querySelector: Class selector, matching element with class with escaped character: .foo\:bar
+PASS Detached Element.querySelectorAll: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar
+PASS Detached Element.querySelector: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar
+PASS Detached Element.querySelectorAll: ID selector, matching element with specified id: #id #id-div1
+PASS Detached Element.querySelector: ID selector, matching element with specified id: #id #id-div1
+PASS Detached Element.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div1
+PASS Detached Element.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div1
+PASS Detached Element.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div2
+PASS Detached Element.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div2
+PASS Detached Element.querySelectorAll: ID Selector, chained, with type selector: div#id-div1, div#id-div2
+PASS Detached Element.querySelector: ID Selector, chained, with type selector: div#id-div1, div#id-div2
+PASS Detached Element.querySelectorAll: ID selector, not matching non-existent descendant: #id #none
+PASS Detached Element.querySelector: ID selector, not matching non-existent descendant: #id #none
+PASS Detached Element.querySelectorAll: ID selector, not matching non-existent ancestor: #none #id-div1
+PASS Detached Element.querySelector: ID selector, not matching non-existent ancestor: #none #id-div1
+PASS Detached Element.querySelectorAll: ID selector, matching multiple elements with duplicate id: #id-li-duplicate
+PASS Detached Element.querySelector: ID selector, matching multiple elements with duplicate id: #id-li-duplicate
+PASS Detached Element.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北Táiběi
+PASS Detached Element.querySelector: ID selector, matching id value using non-ASCII characters: #台北Táiběi
+PASS Detached Element.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北
+PASS Detached Element.querySelector: ID selector, matching id value using non-ASCII characters: #台北
+PASS Detached Element.querySelectorAll: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北
+PASS Detached Element.querySelector: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北
+PASS Detached Element.querySelectorAll: ID selector, matching element with id with escaped character: #\#foo\:bar
+PASS Detached Element.querySelector: ID selector, matching element with id with escaped character: #\#foo\:bar
+PASS Detached Element.querySelectorAll: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar
+PASS Detached Element.querySelector: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar
+PASS Detached Element.querySelectorAll: Namespace selector, matching element with any namespace: #any-namespace *|div
+PASS Detached Element.querySelector: Namespace selector, matching element with any namespace: #any-namespace *|div
+FAIL Detached Element.querySelectorAll: Namespace selector, matching div elements in no namespace only: #no-namespace |div assert_equals: The method should return the expected number of matches. expected 1 but got 4
+FAIL Detached Element.querySelector: Namespace selector, matching div elements in no namespace only: #no-namespace |div assert_equals: The method should return the first match. expected "no-namespace-div3" but got "no-namespace-div1"
+FAIL Detached Element.querySelectorAll: Namespace selector, matching any elements in no namespace only: #no-namespace |* assert_equals: The method should return the expected number of matches. expected 1 but got 4
+FAIL Detached Element.querySelector: Namespace selector, matching any elements in no namespace only: #no-namespace |* assert_equals: The method should return the first match. expected "no-namespace-div3" but got "no-namespace-div1"
+PASS Detached Element.querySelectorAll: Descendant combinator, matching element that is a descendant of an element with id: #descendant div
+PASS Detached Element.querySelector: Descendant combinator, matching element that is a descendant of an element with id: #descendant div
+PASS Detached Element.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1
+PASS Detached Element.querySelector: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1
+PASS Detached Element.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2
+PASS Detached Element.querySelector: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2
+PASS Detached Element.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2
+PASS Detached Element.querySelector: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2
+PASS Detached Element.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3
+PASS Detached Element.querySelector: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3
+PASS Detached Element.querySelectorAll: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4
+PASS Detached Element.querySelector: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4
+PASS Detached Element.querySelectorAll: Descendant combinator, whitespace characters: #descendant        
+#descendant-div2
+PASS Detached Element.querySelector: Descendant combinator, whitespace characters: #descendant        
+#descendant-div2
+PASS Detached Element.querySelectorAll: Child combinator, matching element that is a child of an element with id: #child>div
+PASS Detached Element.querySelector: Child combinator, matching element that is a child of an element with id: #child>div
+PASS Detached Element.querySelectorAll: Child combinator, matching element with id that is a child of an element: div>#child-div1
+PASS Detached Element.querySelector: Child combinator, matching element with id that is a child of an element: div>#child-div1
+PASS Detached Element.querySelectorAll: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1
+PASS Detached Element.querySelector: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1
+PASS Detached Element.querySelectorAll: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2
+PASS Detached Element.querySelector: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2
+PASS Detached Element.querySelectorAll: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2
+PASS Detached Element.querySelector: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2
+PASS Detached Element.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3
+PASS Detached Element.querySelector: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3
+PASS Detached Element.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3
+PASS Detached Element.querySelector: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3
+PASS Detached Element.querySelectorAll: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3
+PASS Detached Element.querySelector: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3
+PASS Detached Element.querySelectorAll: Child combinator, surrounded by whitespace: #child-div1        
+>        
+#child-div2
+PASS Detached Element.querySelector: Child combinator, surrounded by whitespace: #child-div1        
+>        
+#child-div2
+PASS Detached Element.querySelectorAll: Child combinator, whitespace after: #child-div1>        
+#child-div2
+PASS Detached Element.querySelector: Child combinator, whitespace after: #child-div1>        
+#child-div2
+PASS Detached Element.querySelectorAll: Child combinator, whitespace before: #child-div1        
+>#child-div2
+PASS Detached Element.querySelector: Child combinator, whitespace before: #child-div1        
+>#child-div2
+PASS Detached Element.querySelectorAll: Child combinator, no whitespace: #child-div1>#child-div2
+PASS Detached Element.querySelector: Child combinator, no whitespace: #child-div1>#child-div2
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div
+PASS Detached Element.querySelector: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4
+PASS Detached Element.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4
+PASS Detached Element.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4
+PASS Detached Element.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4
+PASS Detached Element.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p
+PASS Detached Element.querySelector: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1
+PASS Detached Element.querySelector: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2        
++        
+#adjacent-p3
+PASS Detached Element.querySelector: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2        
++        
+#adjacent-p3
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, whitespace after: #adjacent-p2+        
+#adjacent-p3
+PASS Detached Element.querySelector: Adjacent sibling combinator, whitespace after: #adjacent-p2+        
+#adjacent-p3
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, whitespace before: #adjacent-p2        
++#adjacent-p3
+PASS Detached Element.querySelector: Adjacent sibling combinator, whitespace before: #adjacent-p2        
++#adjacent-p3
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3
+PASS Detached Element.querySelector: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3
+PASS Detached Element.querySelectorAll: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div
+PASS Detached Element.querySelector: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div
+PASS Detached Element.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4
+PASS Detached Element.querySelector: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4
+PASS Detached Element.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4
+PASS Detached Element.querySelector: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4
+PASS Detached Element.querySelectorAll: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div
+PASS Detached Element.querySelector: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div
+PASS Detached Element.querySelectorAll: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p
+PASS Detached Element.querySelector: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p
+PASS Detached Element.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div
+PASS Detached Element.querySelector: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div
+PASS Detached Element.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1
+PASS Detached Element.querySelector: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1
+PASS Detached Element.querySelectorAll: General sibling combinator, surrounded by whitespace: #sibling-p2        
+~        
+#sibling-p3
+PASS Detached Element.querySelector: General sibling combinator, surrounded by whitespace: #sibling-p2        
+~        
+#sibling-p3
+PASS Detached Element.querySelectorAll: General sibling combinator, whitespace after: #sibling-p2~        
+#sibling-p3
+PASS Detached Element.querySelector: General sibling combinator, whitespace after: #sibling-p2~        
+#sibling-p3
+PASS Detached Element.querySelectorAll: General sibling combinator, whitespace before: #sibling-p2        
+~#sibling-p3
+PASS Detached Element.querySelector: General sibling combinator, whitespace before: #sibling-p2        
+~#sibling-p3
+PASS Detached Element.querySelectorAll: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3
+PASS Detached Element.querySelector: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3
+PASS Detached Element.querySelectorAll: Syntax, group of selectors separator, surrounded by whitespace: #group em        
+
+,        
+
+#group strong
+PASS Detached Element.querySelector: Syntax, group of selectors separator, surrounded by whitespace: #group em        
+
+,        
+
+#group strong
+PASS Detached Element.querySelectorAll: Syntax, group of selectors separator, whitespace after: #group em,        
+#group strong
+PASS Detached Element.querySelector: Syntax, group of selectors separator, whitespace after: #group em,        
+#group strong
+PASS Detached Element.querySelectorAll: Syntax, group of selectors separator, whitespace before: #group em        
+,#group strong
+PASS Detached Element.querySelector: Syntax, group of selectors separator, whitespace before: #group em        
+,#group strong
+PASS Detached Element.querySelectorAll: Syntax, group of selectors separator, no whitespace: #group em,#group strong
+PASS Detached Element.querySelector: Syntax, group of selectors separator, no whitespace: #group em,#group strong
+PASS Fragment.querySelectorAll: Type selector, matching html element: html
+PASS Fragment.querySelector: Type selector, matching html element: html
+PASS Fragment.querySelectorAll: Type selector, matching body element: body
+PASS Fragment.querySelector: Type selector, matching body element: body
+PASS Fragment.querySelectorAll: Universal selector, matching all children of element with specified ID: #universal>*
+PASS Fragment.querySelector: Universal selector, matching all children of element with specified ID: #universal>*
+PASS Fragment.querySelectorAll: Universal selector, matching all grandchildren of element with specified ID: #universal>*>*
+PASS Fragment.querySelector: Universal selector, matching all grandchildren of element with specified ID: #universal>*>*
+PASS Fragment.querySelectorAll: Universal selector, matching all children of empty element with specified ID: #empty>*
+PASS Fragment.querySelector: Universal selector, matching all children of empty element with specified ID: #empty>*
+PASS Fragment.querySelectorAll: Universal selector, matching all descendants of element with specified ID: #universal *
+PASS Fragment.querySelector: Universal selector, matching all descendants of element with specified ID: #universal *
+PASS Fragment.querySelectorAll: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align]
+PASS Fragment.querySelector: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align]
+PASS Fragment.querySelectorAll: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align]
+PASS Fragment.querySelector: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align]
+PASS Fragment.querySelectorAll: Attribute presence selector, matching title attribute, case insensitivity: #attr-presence [TiTlE]
+PASS Fragment.querySelector: Attribute presence selector, matching title attribute, case insensitivity: #attr-presence [TiTlE]
+PASS Fragment.querySelectorAll: Attribute presence selector, matching custom data-* attribute: [data-attr-presence]
+PASS Fragment.querySelector: Attribute presence selector, matching custom data-* attribute: [data-attr-presence]
+PASS Fragment.querySelectorAll: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align]
+PASS Fragment.querySelector: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align]
+PASS Fragment.querySelectorAll: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文]
+PASS Fragment.querySelector: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文]
+PASS Fragment.querySelectorAll: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected]
+PASS Fragment.querySelector: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected]
+PASS Fragment.querySelectorAll: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected]
+PASS Fragment.querySelector: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected]
+PASS Fragment.querySelectorAll: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected]
+PASS Fragment.querySelector: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected]
+PASS Fragment.querySelectorAll: Attribute value selector, matching align attribute with value: #attr-value [align="center"]
+PASS Fragment.querySelector: Attribute value selector, matching align attribute with value: #attr-value [align="center"]
+PASS Fragment.querySelectorAll: Attribute value selector, matching align attribute with empty value: #attr-value [align=""]
+PASS Fragment.querySelector: Attribute value selector, matching align attribute with empty value: #attr-value [align=""]
+PASS Fragment.querySelectorAll: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"]
+PASS Fragment.querySelector: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"]
+PASS Fragment.querySelectorAll: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"]
+PASS Fragment.querySelector: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"]
+PASS Fragment.querySelectorAll: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"]
+PASS Fragment.querySelector: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"]
+PASS Fragment.querySelectorAll: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"]
+PASS Fragment.querySelector: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"]
+PASS Fragment.querySelectorAll: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS Fragment.querySelector: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS Fragment.querySelectorAll: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS Fragment.querySelector: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS Fragment.querySelectorAll: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS Fragment.querySelector: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS Fragment.querySelectorAll: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文]
+PASS Fragment.querySelector: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文]
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"]
+PASS Fragment.querySelector: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"]
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""]
+PASS Fragment.querySelector: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""]
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"]
+PASS Fragment.querySelector: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"]
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"]
+PASS Fragment.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"]
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"]
+PASS Fragment.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"]
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS Fragment.querySelector: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS Fragment.querySelector: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS Fragment.querySelector: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"]
+PASS Fragment.querySelector: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"]
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文]
+PASS Fragment.querySelector: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文]
+PASS Fragment.querySelectorAll: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"]
+PASS Fragment.querySelector: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"]
+PASS Fragment.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"]
+PASS Fragment.querySelector: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"]
+PASS Fragment.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"]
+PASS Fragment.querySelector: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"]
+PASS Fragment.querySelectorAll: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"]
+PASS Fragment.querySelector: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"]
+PASS Fragment.querySelectorAll: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"]
+PASS Fragment.querySelector: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"]
+PASS Fragment.querySelectorAll: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"]
+PASS Fragment.querySelector: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"]
+PASS Fragment.querySelectorAll: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple]
+PASS Fragment.querySelector: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple]
+PASS Fragment.querySelectorAll: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple']
+PASS Fragment.querySelector: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple']
+PASS Fragment.querySelectorAll: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"]
+PASS Fragment.querySelector: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"]
+PASS Fragment.querySelectorAll: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple]
+PASS Fragment.querySelector: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple]
+PASS Fragment.querySelectorAll: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"]
+PASS Fragment.querySelector: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"]
+PASS Fragment.querySelectorAll: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"]
+PASS Fragment.querySelector: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"]
+PASS Fragment.querySelectorAll: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple]
+PASS Fragment.querySelector: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple]
+PASS Fragment.querySelectorAll: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple ']
+PASS Fragment.querySelector: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple ']
+PASS Fragment.querySelectorAll: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "]
+PASS Fragment.querySelector: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "]
+PASS Fragment.querySelectorAll: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ]
+PASS Fragment.querySelector: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ]
+PASS Fragment.querySelectorAll: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"]
+PASS Fragment.querySelector: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"]
+PASS Fragment.querySelectorAll: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"]
+PASS Fragment.querySelector: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"]
+PASS Fragment.querySelectorAll: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."]
+PASS Fragment.querySelector: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."]
+PASS Fragment.querySelectorAll: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"]
+PASS Fragment.querySelector: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"]
+PASS Fragment.querySelectorAll: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"]
+PASS Fragment.querySelector: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"]
+PASS Fragment.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple']
+PASS Fragment.querySelector: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple']
+PASS Fragment.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange ']
+PASS Fragment.querySelector: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange ']
+PASS Fragment.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora']
+PASS Fragment.querySelector: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora']
+PASS Fragment.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"]
+PASS Fragment.querySelector: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"]
+PASS Fragment.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "]
+PASS Fragment.querySelector: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "]
+PASS Fragment.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"]
+PASS Fragment.querySelector: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"]
+PASS Fragment.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple]
+PASS Fragment.querySelector: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple]
+PASS Fragment.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ]
+PASS Fragment.querySelector: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ]
+PASS Fragment.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ]
+PASS Fragment.querySelector: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ]
+PASS Fragment.querySelectorAll: :root pseudo-class selector, not matching document root element: :root
+PASS Fragment.querySelector: :root pseudo-class selector, not matching document root element: :root
+PASS Fragment.querySelectorAll: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3)
+PASS Fragment.querySelector: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3)
+PASS Fragment.querySelectorAll: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n)
+PASS Fragment.querySelector: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n)
+PASS Fragment.querySelectorAll: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4)
+PASS Fragment.querySelector: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4)
+PASS Fragment.querySelectorAll: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1)
+PASS Fragment.querySelector: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1)
+PASS Fragment.querySelectorAll: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3)
+PASS Fragment.querySelector: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3)
+PASS Fragment.querySelectorAll: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n)
+PASS Fragment.querySelector: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n)
+PASS Fragment.querySelectorAll: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4)
+PASS Fragment.querySelector: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4)
+PASS Fragment.querySelectorAll: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS Fragment.querySelector: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS Fragment.querySelectorAll: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3)
+PASS Fragment.querySelector: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3)
+PASS Fragment.querySelectorAll: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n)
+PASS Fragment.querySelector: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n)
+PASS Fragment.querySelectorAll: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS Fragment.querySelector: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS Fragment.querySelectorAll: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS Fragment.querySelector: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS Fragment.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS Fragment.querySelector: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS Fragment.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS Fragment.querySelector: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS Fragment.querySelectorAll: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type
+PASS Fragment.querySelector: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type
+PASS Fragment.querySelectorAll: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type
+PASS Fragment.querySelector: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type
+PASS Fragment.querySelectorAll: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type
+PASS Fragment.querySelector: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type
+PASS Fragment.querySelectorAll: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type
+PASS Fragment.querySelector: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type
+PASS Fragment.querySelectorAll: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type
+PASS Fragment.querySelector: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type
+PASS Fragment.querySelectorAll: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type
+PASS Fragment.querySelector: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type
+PASS Fragment.querySelectorAll: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child
+PASS Fragment.querySelector: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child
+PASS Fragment.querySelectorAll: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child
+PASS Fragment.querySelector: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child
+PASS Fragment.querySelectorAll: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child
+PASS Fragment.querySelector: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child
+PASS Fragment.querySelectorAll: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child
+PASS Fragment.querySelector: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child
+PASS Fragment.querySelectorAll: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child
+PASS Fragment.querySelector: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child
+PASS Fragment.querySelectorAll: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child
+PASS Fragment.querySelector: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child
+PASS Fragment.querySelectorAll: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child
+PASS Fragment.querySelector: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child
+PASS Fragment.querySelectorAll: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child
+PASS Fragment.querySelector: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child
+PASS Fragment.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type
+PASS Fragment.querySelector: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type
+PASS Fragment.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type
+PASS Fragment.querySelector: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type
+PASS Fragment.querySelectorAll: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty
+PASS Fragment.querySelector: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty
+PASS Fragment.querySelectorAll: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty
+PASS Fragment.querySelector: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty
+PASS Fragment.querySelectorAll: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited
+PASS Fragment.querySelector: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited
+PASS Fragment.querySelectorAll: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited
+PASS Fragment.querySelector: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited
+PASS Fragment.querySelectorAll: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited
+PASS Fragment.querySelector: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited
+PASS Fragment.querySelectorAll: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target
+PASS Fragment.querySelector: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target
+PASS Fragment.querySelectorAll: :lang pseudo-class selector, not matching element with no inherited language: #pseudo-lang-div1:lang(en)
+PASS Fragment.querySelector: :lang pseudo-class selector, not matching element with no inherited language: #pseudo-lang-div1:lang(en)
+PASS Fragment.querySelectorAll: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)
+PASS Fragment.querySelector: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)
+PASS Fragment.querySelectorAll: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)
+PASS Fragment.querySelector: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)
+PASS Fragment.querySelectorAll: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)
+PASS Fragment.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)
+PASS Fragment.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled
+PASS Fragment.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled
+PASS Fragment.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled
+PASS Fragment.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled
+PASS Fragment.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked
+PASS Fragment.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked
+PASS Fragment.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div)
+PASS Fragment.querySelector: :not pseudo-class selector, matching : #not>:not(div)
+PASS Fragment.querySelectorAll: :not pseudo-class selector, matching : #not * :not(:first-child)
+PASS Fragment.querySelector: :not pseudo-class selector, matching : #not * :not(:first-child)
+PASS Fragment.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*)
+PASS Fragment.querySelector: :not pseudo-class selector, matching nothing: :not(*)
+PASS Fragment.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*)
+PASS Fragment.querySelector: :not pseudo-class selector, matching nothing: :not(*|*)
+PASS Fragment.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line
+PASS Fragment.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line
+PASS Fragment.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line
+PASS Fragment.querySelector: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line
+PASS Fragment.querySelectorAll: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter
+PASS Fragment.querySelector: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter
+PASS Fragment.querySelectorAll: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter
+PASS Fragment.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter
+PASS Fragment.querySelectorAll: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before
+PASS Fragment.querySelector: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before
+PASS Fragment.querySelectorAll: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before
+PASS Fragment.querySelector: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before
+PASS Fragment.querySelectorAll: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after
+PASS Fragment.querySelector: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after
+PASS Fragment.querySelectorAll: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after
+PASS Fragment.querySelector: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after
+PASS Fragment.querySelectorAll: Class selector, matching element with specified class: .class-p
+PASS Fragment.querySelector: Class selector, matching element with specified class: .class-p
+PASS Fragment.querySelectorAll: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana
+PASS Fragment.querySelector: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana
+PASS Fragment.querySelectorAll: Class Selector, chained, with type selector: div.apple.banana.orange
+PASS Fragment.querySelector: Class Selector, chained, with type selector: div.apple.banana.orange
+PASS Fragment.querySelectorAll: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi
+PASS Fragment.querySelector: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi
+PASS Fragment.querySelectorAll: Class selector, matching multiple elements with class value using non-ASCII characters: .台北
+PASS Fragment.querySelector: Class selector, matching multiple elements with class value using non-ASCII characters: .台北
+PASS Fragment.querySelectorAll: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北
+PASS Fragment.querySelector: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北
+PASS Fragment.querySelectorAll: Class selector, matching element with class with escaped character: .foo\:bar
+PASS Fragment.querySelector: Class selector, matching element with class with escaped character: .foo\:bar
+PASS Fragment.querySelectorAll: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar
+PASS Fragment.querySelector: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar
+PASS Fragment.querySelectorAll: ID selector, matching element with specified id: #id #id-div1
+PASS Fragment.querySelector: ID selector, matching element with specified id: #id #id-div1
+PASS Fragment.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div1
+PASS Fragment.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div1
+PASS Fragment.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div2
+PASS Fragment.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div2
+PASS Fragment.querySelectorAll: ID Selector, chained, with type selector: div#id-div1, div#id-div2
+PASS Fragment.querySelector: ID Selector, chained, with type selector: div#id-div1, div#id-div2
+PASS Fragment.querySelectorAll: ID selector, not matching non-existent descendant: #id #none
+PASS Fragment.querySelector: ID selector, not matching non-existent descendant: #id #none
+PASS Fragment.querySelectorAll: ID selector, not matching non-existent ancestor: #none #id-div1
+PASS Fragment.querySelector: ID selector, not matching non-existent ancestor: #none #id-div1
+PASS Fragment.querySelectorAll: ID selector, matching multiple elements with duplicate id: #id-li-duplicate
+PASS Fragment.querySelector: ID selector, matching multiple elements with duplicate id: #id-li-duplicate
+PASS Fragment.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北Táiběi
+PASS Fragment.querySelector: ID selector, matching id value using non-ASCII characters: #台北Táiběi
+PASS Fragment.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北
+PASS Fragment.querySelector: ID selector, matching id value using non-ASCII characters: #台北
+PASS Fragment.querySelectorAll: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北
+PASS Fragment.querySelector: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北
+PASS Fragment.querySelectorAll: ID selector, matching element with id with escaped character: #\#foo\:bar
+PASS Fragment.querySelector: ID selector, matching element with id with escaped character: #\#foo\:bar
+PASS Fragment.querySelectorAll: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar
+PASS Fragment.querySelector: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar
+PASS Fragment.querySelectorAll: Namespace selector, matching element with any namespace: #any-namespace *|div
+PASS Fragment.querySelector: Namespace selector, matching element with any namespace: #any-namespace *|div
+FAIL Fragment.querySelectorAll: Namespace selector, matching div elements in no namespace only: #no-namespace |div assert_equals: The method should return the expected number of matches. expected 1 but got 4
+FAIL Fragment.querySelector: Namespace selector, matching div elements in no namespace only: #no-namespace |div assert_equals: The method should return the first match. expected "no-namespace-div3" but got "no-namespace-div1"
+FAIL Fragment.querySelectorAll: Namespace selector, matching any elements in no namespace only: #no-namespace |* assert_equals: The method should return the expected number of matches. expected 1 but got 4
+FAIL Fragment.querySelector: Namespace selector, matching any elements in no namespace only: #no-namespace |* assert_equals: The method should return the first match. expected "no-namespace-div3" but got "no-namespace-div1"
+PASS Fragment.querySelectorAll: Descendant combinator, matching element that is a descendant of an element with id: #descendant div
+PASS Fragment.querySelector: Descendant combinator, matching element that is a descendant of an element with id: #descendant div
+PASS Fragment.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1
+PASS Fragment.querySelector: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1
+PASS Fragment.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2
+PASS Fragment.querySelector: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2
+PASS Fragment.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2
+PASS Fragment.querySelector: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2
+PASS Fragment.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3
+PASS Fragment.querySelector: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3
+PASS Fragment.querySelectorAll: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4
+PASS Fragment.querySelector: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4
+PASS Fragment.querySelectorAll: Descendant combinator, whitespace characters: #descendant        
+#descendant-div2
+PASS Fragment.querySelector: Descendant combinator, whitespace characters: #descendant        
+#descendant-div2
+PASS Fragment.querySelectorAll: Child combinator, matching element that is a child of an element with id: #child>div
+PASS Fragment.querySelector: Child combinator, matching element that is a child of an element with id: #child>div
+PASS Fragment.querySelectorAll: Child combinator, matching element with id that is a child of an element: div>#child-div1
+PASS Fragment.querySelector: Child combinator, matching element with id that is a child of an element: div>#child-div1
+PASS Fragment.querySelectorAll: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1
+PASS Fragment.querySelector: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1
+PASS Fragment.querySelectorAll: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2
+PASS Fragment.querySelector: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2
+PASS Fragment.querySelectorAll: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2
+PASS Fragment.querySelector: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2
+PASS Fragment.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3
+PASS Fragment.querySelector: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3
+PASS Fragment.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3
+PASS Fragment.querySelector: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3
+PASS Fragment.querySelectorAll: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3
+PASS Fragment.querySelector: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3
+PASS Fragment.querySelectorAll: Child combinator, surrounded by whitespace: #child-div1        
+>        
+#child-div2
+PASS Fragment.querySelector: Child combinator, surrounded by whitespace: #child-div1        
+>        
+#child-div2
+PASS Fragment.querySelectorAll: Child combinator, whitespace after: #child-div1>        
+#child-div2
+PASS Fragment.querySelector: Child combinator, whitespace after: #child-div1>        
+#child-div2
+PASS Fragment.querySelectorAll: Child combinator, whitespace before: #child-div1        
+>#child-div2
+PASS Fragment.querySelector: Child combinator, whitespace before: #child-div1        
+>#child-div2
+PASS Fragment.querySelectorAll: Child combinator, no whitespace: #child-div1>#child-div2
+PASS Fragment.querySelector: Child combinator, no whitespace: #child-div1>#child-div2
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div
+PASS Fragment.querySelector: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4
+PASS Fragment.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4
+PASS Fragment.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4
+PASS Fragment.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4
+PASS Fragment.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p
+PASS Fragment.querySelector: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1
+PASS Fragment.querySelector: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2        
++        
+#adjacent-p3
+PASS Fragment.querySelector: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2        
++        
+#adjacent-p3
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, whitespace after: #adjacent-p2+        
+#adjacent-p3
+PASS Fragment.querySelector: Adjacent sibling combinator, whitespace after: #adjacent-p2+        
+#adjacent-p3
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, whitespace before: #adjacent-p2        
++#adjacent-p3
+PASS Fragment.querySelector: Adjacent sibling combinator, whitespace before: #adjacent-p2        
++#adjacent-p3
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3
+PASS Fragment.querySelector: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3
+PASS Fragment.querySelectorAll: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div
+PASS Fragment.querySelector: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div
+PASS Fragment.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4
+PASS Fragment.querySelector: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4
+PASS Fragment.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4
+PASS Fragment.querySelector: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4
+PASS Fragment.querySelectorAll: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div
+PASS Fragment.querySelector: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div
+PASS Fragment.querySelectorAll: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p
+PASS Fragment.querySelector: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p
+PASS Fragment.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div
+PASS Fragment.querySelector: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div
+PASS Fragment.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1
+PASS Fragment.querySelector: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1
+PASS Fragment.querySelectorAll: General sibling combinator, surrounded by whitespace: #sibling-p2        
+~        
+#sibling-p3
+PASS Fragment.querySelector: General sibling combinator, surrounded by whitespace: #sibling-p2        
+~        
+#sibling-p3
+PASS Fragment.querySelectorAll: General sibling combinator, whitespace after: #sibling-p2~        
+#sibling-p3
+PASS Fragment.querySelector: General sibling combinator, whitespace after: #sibling-p2~        
+#sibling-p3
+PASS Fragment.querySelectorAll: General sibling combinator, whitespace before: #sibling-p2        
+~#sibling-p3
+PASS Fragment.querySelector: General sibling combinator, whitespace before: #sibling-p2        
+~#sibling-p3
+PASS Fragment.querySelectorAll: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3
+PASS Fragment.querySelector: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3
+PASS Fragment.querySelectorAll: Syntax, group of selectors separator, surrounded by whitespace: #group em        
+
+,        
+
+#group strong
+PASS Fragment.querySelector: Syntax, group of selectors separator, surrounded by whitespace: #group em        
+
+,        
+
+#group strong
+PASS Fragment.querySelectorAll: Syntax, group of selectors separator, whitespace after: #group em,        
+#group strong
+PASS Fragment.querySelector: Syntax, group of selectors separator, whitespace after: #group em,        
+#group strong
+PASS Fragment.querySelectorAll: Syntax, group of selectors separator, whitespace before: #group em        
+,#group strong
+PASS Fragment.querySelector: Syntax, group of selectors separator, whitespace before: #group em        
+,#group strong
+PASS Fragment.querySelectorAll: Syntax, group of selectors separator, no whitespace: #group em,#group strong
+PASS Fragment.querySelector: Syntax, group of selectors separator, no whitespace: #group em,#group strong
+PASS In-document Element.querySelectorAll: Type selector, matching html element: html
+PASS In-document Element.querySelector: Type selector, matching html element: html
+PASS In-document Element.querySelectorAll: Type selector, matching body element: body
+PASS In-document Element.querySelector: Type selector, matching body element: body
+PASS In-document Element.querySelectorAll: Universal selector, matching all children of element with specified ID: #universal>*
+PASS In-document Element.querySelector: Universal selector, matching all children of element with specified ID: #universal>*
+PASS In-document Element.querySelectorAll: Universal selector, matching all grandchildren of element with specified ID: #universal>*>*
+PASS In-document Element.querySelector: Universal selector, matching all grandchildren of element with specified ID: #universal>*>*
+PASS In-document Element.querySelectorAll: Universal selector, matching all children of empty element with specified ID: #empty>*
+PASS In-document Element.querySelector: Universal selector, matching all children of empty element with specified ID: #empty>*
+PASS In-document Element.querySelectorAll: Universal selector, matching all descendants of element with specified ID: #universal *
+PASS In-document Element.querySelector: Universal selector, matching all descendants of element with specified ID: #universal *
+PASS In-document Element.querySelectorAll: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align]
+PASS In-document Element.querySelector: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align]
+PASS In-document Element.querySelectorAll: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align]
+PASS In-document Element.querySelector: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align]
+PASS In-document Element.querySelectorAll: Attribute presence selector, matching title attribute, case insensitivity: #attr-presence [TiTlE]
+PASS In-document Element.querySelector: Attribute presence selector, matching title attribute, case insensitivity: #attr-presence [TiTlE]
+PASS In-document Element.querySelectorAll: Attribute presence selector, matching custom data-* attribute: [data-attr-presence]
+PASS In-document Element.querySelector: Attribute presence selector, matching custom data-* attribute: [data-attr-presence]
+PASS In-document Element.querySelectorAll: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align]
+PASS In-document Element.querySelector: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align]
+PASS In-document Element.querySelectorAll: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文]
+PASS In-document Element.querySelector: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文]
+PASS In-document Element.querySelectorAll: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected]
+PASS In-document Element.querySelector: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected]
+PASS In-document Element.querySelectorAll: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected]
+PASS In-document Element.querySelector: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected]
+PASS In-document Element.querySelectorAll: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected]
+PASS In-document Element.querySelector: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected]
+PASS In-document Element.querySelectorAll: Attribute value selector, matching align attribute with value: #attr-value [align="center"]
+PASS In-document Element.querySelector: Attribute value selector, matching align attribute with value: #attr-value [align="center"]
+PASS In-document Element.querySelectorAll: Attribute value selector, matching align attribute with empty value: #attr-value [align=""]
+PASS In-document Element.querySelector: Attribute value selector, matching align attribute with empty value: #attr-value [align=""]
+PASS In-document Element.querySelectorAll: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"]
+PASS In-document Element.querySelector: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"]
+PASS In-document Element.querySelectorAll: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"]
+PASS In-document Element.querySelector: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"]
+PASS In-document Element.querySelectorAll: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"]
+PASS In-document Element.querySelector: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"]
+PASS In-document Element.querySelectorAll: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"]
+PASS In-document Element.querySelector: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"]
+PASS In-document Element.querySelectorAll: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS In-document Element.querySelector: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS In-document Element.querySelectorAll: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS In-document Element.querySelector: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS In-document Element.querySelectorAll: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS In-document Element.querySelector: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS In-document Element.querySelectorAll: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文]
+PASS In-document Element.querySelector: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文]
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"]
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"]
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""]
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""]
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"]
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"]
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"]
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"]
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"]
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"]
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"]
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"]
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文]
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文]
+PASS In-document Element.querySelectorAll: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"]
+PASS In-document Element.querySelector: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"]
+PASS In-document Element.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"]
+PASS In-document Element.querySelector: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"]
+PASS In-document Element.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"]
+PASS In-document Element.querySelector: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"]
+PASS In-document Element.querySelectorAll: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"]
+PASS In-document Element.querySelector: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"]
+PASS In-document Element.querySelectorAll: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"]
+PASS In-document Element.querySelector: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"]
+PASS In-document Element.querySelectorAll: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"]
+PASS In-document Element.querySelector: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"]
+PASS In-document Element.querySelectorAll: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple]
+PASS In-document Element.querySelector: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple]
+PASS In-document Element.querySelectorAll: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple']
+PASS In-document Element.querySelector: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple']
+PASS In-document Element.querySelectorAll: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"]
+PASS In-document Element.querySelector: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"]
+PASS In-document Element.querySelectorAll: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple]
+PASS In-document Element.querySelector: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple]
+PASS In-document Element.querySelectorAll: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"]
+PASS In-document Element.querySelector: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"]
+PASS In-document Element.querySelectorAll: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"]
+PASS In-document Element.querySelector: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"]
+PASS In-document Element.querySelectorAll: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple]
+PASS In-document Element.querySelector: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple]
+PASS In-document Element.querySelectorAll: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple ']
+PASS In-document Element.querySelector: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple ']
+PASS In-document Element.querySelectorAll: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "]
+PASS In-document Element.querySelector: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "]
+PASS In-document Element.querySelectorAll: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ]
+PASS In-document Element.querySelector: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ]
+PASS In-document Element.querySelectorAll: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"]
+PASS In-document Element.querySelector: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"]
+PASS In-document Element.querySelectorAll: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"]
+PASS In-document Element.querySelector: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"]
+PASS In-document Element.querySelectorAll: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."]
+PASS In-document Element.querySelector: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."]
+PASS In-document Element.querySelectorAll: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"]
+PASS In-document Element.querySelector: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"]
+PASS In-document Element.querySelectorAll: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"]
+PASS In-document Element.querySelector: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"]
+PASS In-document Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple']
+PASS In-document Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple']
+PASS In-document Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange ']
+PASS In-document Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange ']
+PASS In-document Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora']
+PASS In-document Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora']
+PASS In-document Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"]
+PASS In-document Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"]
+PASS In-document Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "]
+PASS In-document Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "]
+PASS In-document Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"]
+PASS In-document Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"]
+PASS In-document Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple]
+PASS In-document Element.querySelector: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple]
+PASS In-document Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ]
+PASS In-document Element.querySelector: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ]
+PASS In-document Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ]
+PASS In-document Element.querySelector: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ]
+PASS In-document Element.querySelectorAll: :root pseudo-class selector, not matching document root element: :root
+PASS In-document Element.querySelector: :root pseudo-class selector, not matching document root element: :root
+PASS In-document Element.querySelectorAll: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3)
+PASS In-document Element.querySelector: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3)
+PASS In-document Element.querySelectorAll: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n)
+PASS In-document Element.querySelector: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n)
+PASS In-document Element.querySelectorAll: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4)
+PASS In-document Element.querySelector: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4)
+PASS In-document Element.querySelectorAll: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1)
+PASS In-document Element.querySelector: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1)
+PASS In-document Element.querySelectorAll: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3)
+PASS In-document Element.querySelector: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3)
+PASS In-document Element.querySelectorAll: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n)
+PASS In-document Element.querySelector: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n)
+PASS In-document Element.querySelectorAll: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4)
+PASS In-document Element.querySelector: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4)
+PASS In-document Element.querySelectorAll: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS In-document Element.querySelector: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS In-document Element.querySelectorAll: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3)
+PASS In-document Element.querySelector: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3)
+PASS In-document Element.querySelectorAll: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n)
+PASS In-document Element.querySelector: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n)
+PASS In-document Element.querySelectorAll: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS In-document Element.querySelector: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS In-document Element.querySelectorAll: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS In-document Element.querySelector: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS In-document Element.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS In-document Element.querySelector: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS In-document Element.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS In-document Element.querySelector: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS In-document Element.querySelectorAll: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type
+PASS In-document Element.querySelector: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type
+PASS In-document Element.querySelectorAll: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type
+PASS In-document Element.querySelector: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type
+PASS In-document Element.querySelectorAll: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type
+PASS In-document Element.querySelector: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type
+PASS In-document Element.querySelectorAll: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type
+PASS In-document Element.querySelector: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type
+PASS In-document Element.querySelectorAll: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type
+PASS In-document Element.querySelector: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type
+PASS In-document Element.querySelectorAll: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type
+PASS In-document Element.querySelector: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type
+PASS In-document Element.querySelectorAll: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child
+PASS In-document Element.querySelector: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child
+PASS In-document Element.querySelectorAll: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child
+PASS In-document Element.querySelector: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child
+PASS In-document Element.querySelectorAll: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child
+PASS In-document Element.querySelector: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child
+PASS In-document Element.querySelectorAll: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child
+PASS In-document Element.querySelector: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child
+PASS In-document Element.querySelectorAll: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child
+PASS In-document Element.querySelector: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child
+PASS In-document Element.querySelectorAll: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child
+PASS In-document Element.querySelector: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child
+PASS In-document Element.querySelectorAll: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child
+PASS In-document Element.querySelector: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child
+PASS In-document Element.querySelectorAll: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child
+PASS In-document Element.querySelector: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child
+PASS In-document Element.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type
+PASS In-document Element.querySelector: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type
+PASS In-document Element.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type
+PASS In-document Element.querySelector: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type
+PASS In-document Element.querySelectorAll: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty
+PASS In-document Element.querySelector: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty
+PASS In-document Element.querySelectorAll: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty
+PASS In-document Element.querySelector: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty
+PASS In-document Element.querySelectorAll: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited
+PASS In-document Element.querySelector: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited
+PASS In-document Element.querySelectorAll: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited
+PASS In-document Element.querySelector: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited
+PASS In-document Element.querySelectorAll: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited
+PASS In-document Element.querySelector: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited
+FAIL In-document Element.querySelectorAll: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target assert_equals: The method should return the expected number of matches. expected 1 but got 0
+FAIL In-document Element.querySelector: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target assert_not_equals: The method should return a match. got disallowed value null
+PASS In-document Element.querySelectorAll: :lang pseudo-class selector, matching inherited language: #pseudo-lang-div1:lang(en)
+PASS In-document Element.querySelector: :lang pseudo-class selector, matching inherited language: #pseudo-lang-div1:lang(en)
+PASS In-document Element.querySelectorAll: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)
+PASS In-document Element.querySelector: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)
+PASS In-document Element.querySelectorAll: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)
+PASS In-document Element.querySelector: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)
+PASS In-document Element.querySelectorAll: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)
+PASS In-document Element.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)
+PASS In-document Element.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled
+PASS In-document Element.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled
+PASS In-document Element.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled
+PASS In-document Element.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled
+PASS In-document Element.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked
+PASS In-document Element.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked
+PASS In-document Element.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div)
+PASS In-document Element.querySelector: :not pseudo-class selector, matching : #not>:not(div)
+PASS In-document Element.querySelectorAll: :not pseudo-class selector, matching : #not * :not(:first-child)
+PASS In-document Element.querySelector: :not pseudo-class selector, matching : #not * :not(:first-child)
+PASS In-document Element.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*)
+PASS In-document Element.querySelector: :not pseudo-class selector, matching nothing: :not(*)
+PASS In-document Element.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*)
+PASS In-document Element.querySelector: :not pseudo-class selector, matching nothing: :not(*|*)
+PASS In-document Element.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line
+PASS In-document Element.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line
+PASS In-document Element.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line
+PASS In-document Element.querySelector: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line
+PASS In-document Element.querySelectorAll: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter
+PASS In-document Element.querySelector: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter
+PASS In-document Element.querySelectorAll: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter
+PASS In-document Element.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter
+PASS In-document Element.querySelectorAll: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before
+PASS In-document Element.querySelector: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before
+PASS In-document Element.querySelectorAll: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before
+PASS In-document Element.querySelector: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before
+PASS In-document Element.querySelectorAll: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after
+PASS In-document Element.querySelector: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after
+PASS In-document Element.querySelectorAll: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after
+PASS In-document Element.querySelector: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after
+PASS In-document Element.querySelectorAll: Class selector, matching element with specified class: .class-p
+PASS In-document Element.querySelector: Class selector, matching element with specified class: .class-p
+PASS In-document Element.querySelectorAll: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana
+PASS In-document Element.querySelector: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana
+PASS In-document Element.querySelectorAll: Class Selector, chained, with type selector: div.apple.banana.orange
+PASS In-document Element.querySelector: Class Selector, chained, with type selector: div.apple.banana.orange
+PASS In-document Element.querySelectorAll: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi
+PASS In-document Element.querySelector: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi
+PASS In-document Element.querySelectorAll: Class selector, matching multiple elements with class value using non-ASCII characters: .台北
+PASS In-document Element.querySelector: Class selector, matching multiple elements with class value using non-ASCII characters: .台北
+PASS In-document Element.querySelectorAll: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北
+PASS In-document Element.querySelector: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北
+PASS In-document Element.querySelectorAll: Class selector, matching element with class with escaped character: .foo\:bar
+PASS In-document Element.querySelector: Class selector, matching element with class with escaped character: .foo\:bar
+PASS In-document Element.querySelectorAll: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar
+PASS In-document Element.querySelector: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar
+PASS In-document Element.querySelectorAll: ID selector, matching element with specified id: #id #id-div1
+PASS In-document Element.querySelector: ID selector, matching element with specified id: #id #id-div1
+PASS In-document Element.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div1
+PASS In-document Element.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div1
+PASS In-document Element.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div2
+PASS In-document Element.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div2
+PASS In-document Element.querySelectorAll: ID Selector, chained, with type selector: div#id-div1, div#id-div2
+PASS In-document Element.querySelector: ID Selector, chained, with type selector: div#id-div1, div#id-div2
+PASS In-document Element.querySelectorAll: ID selector, not matching non-existent descendant: #id #none
+PASS In-document Element.querySelector: ID selector, not matching non-existent descendant: #id #none
+PASS In-document Element.querySelectorAll: ID selector, not matching non-existent ancestor: #none #id-div1
+PASS In-document Element.querySelector: ID selector, not matching non-existent ancestor: #none #id-div1
+PASS In-document Element.querySelectorAll: ID selector, matching multiple elements with duplicate id: #id-li-duplicate
+PASS In-document Element.querySelector: ID selector, matching multiple elements with duplicate id: #id-li-duplicate
+PASS In-document Element.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北Táiběi
+PASS In-document Element.querySelector: ID selector, matching id value using non-ASCII characters: #台北Táiběi
+PASS In-document Element.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北
+PASS In-document Element.querySelector: ID selector, matching id value using non-ASCII characters: #台北
+PASS In-document Element.querySelectorAll: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北
+PASS In-document Element.querySelector: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北
+PASS In-document Element.querySelectorAll: ID selector, matching element with id with escaped character: #\#foo\:bar
+PASS In-document Element.querySelector: ID selector, matching element with id with escaped character: #\#foo\:bar
+PASS In-document Element.querySelectorAll: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar
+PASS In-document Element.querySelector: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar
+PASS In-document Element.querySelectorAll: Namespace selector, matching element with any namespace: #any-namespace *|div
+PASS In-document Element.querySelector: Namespace selector, matching element with any namespace: #any-namespace *|div
+FAIL In-document Element.querySelectorAll: Namespace selector, matching div elements in no namespace only: #no-namespace |div assert_equals: The method should return the expected number of matches. expected 1 but got 4
+FAIL In-document Element.querySelector: Namespace selector, matching div elements in no namespace only: #no-namespace |div assert_equals: The method should return the first match. expected "no-namespace-div3" but got "no-namespace-div1"
+FAIL In-document Element.querySelectorAll: Namespace selector, matching any elements in no namespace only: #no-namespace |* assert_equals: The method should return the expected number of matches. expected 1 but got 4
+FAIL In-document Element.querySelector: Namespace selector, matching any elements in no namespace only: #no-namespace |* assert_equals: The method should return the first match. expected "no-namespace-div3" but got "no-namespace-div1"
+PASS In-document Element.querySelectorAll: Descendant combinator, matching element that is a descendant of an element with id: #descendant div
+PASS In-document Element.querySelector: Descendant combinator, matching element that is a descendant of an element with id: #descendant div
+PASS In-document Element.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: body #descendant-div1
+PASS In-document Element.querySelector: Descendant combinator, matching element with id that is a descendant of an element: body #descendant-div1
+PASS In-document Element.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1
+PASS In-document Element.querySelector: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1
+PASS In-document Element.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2
+PASS In-document Element.querySelector: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2
+PASS In-document Element.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2
+PASS In-document Element.querySelector: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2
+PASS In-document Element.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3
+PASS In-document Element.querySelector: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3
+PASS In-document Element.querySelectorAll: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4
+PASS In-document Element.querySelector: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4
+PASS In-document Element.querySelectorAll: Descendant combinator, whitespace characters: #descendant        
+#descendant-div2
+PASS In-document Element.querySelector: Descendant combinator, whitespace characters: #descendant        
+#descendant-div2
+PASS In-document Element.querySelectorAll: Child combinator, matching element that is a child of an element with id: #child>div
+PASS In-document Element.querySelector: Child combinator, matching element that is a child of an element with id: #child>div
+PASS In-document Element.querySelectorAll: Child combinator, matching element with id that is a child of an element: div>#child-div1
+PASS In-document Element.querySelector: Child combinator, matching element with id that is a child of an element: div>#child-div1
+PASS In-document Element.querySelectorAll: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1
+PASS In-document Element.querySelector: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1
+PASS In-document Element.querySelectorAll: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2
+PASS In-document Element.querySelector: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2
+PASS In-document Element.querySelectorAll: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2
+PASS In-document Element.querySelector: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2
+PASS In-document Element.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3
+PASS In-document Element.querySelector: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3
+PASS In-document Element.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3
+PASS In-document Element.querySelector: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3
+PASS In-document Element.querySelectorAll: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3
+PASS In-document Element.querySelector: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3
+PASS In-document Element.querySelectorAll: Child combinator, surrounded by whitespace: #child-div1        
+>        
+#child-div2
+PASS In-document Element.querySelector: Child combinator, surrounded by whitespace: #child-div1        
+>        
+#child-div2
+PASS In-document Element.querySelectorAll: Child combinator, whitespace after: #child-div1>        
+#child-div2
+PASS In-document Element.querySelector: Child combinator, whitespace after: #child-div1>        
+#child-div2
+PASS In-document Element.querySelectorAll: Child combinator, whitespace before: #child-div1        
+>#child-div2
+PASS In-document Element.querySelector: Child combinator, whitespace before: #child-div1        
+>#child-div2
+PASS In-document Element.querySelectorAll: Child combinator, no whitespace: #child-div1>#child-div2
+PASS In-document Element.querySelector: Child combinator, no whitespace: #child-div1>#child-div2
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div
+PASS In-document Element.querySelector: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4
+PASS In-document Element.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4
+PASS In-document Element.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4
+PASS In-document Element.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4
+PASS In-document Element.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p
+PASS In-document Element.querySelector: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1
+PASS In-document Element.querySelector: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2        
++        
+#adjacent-p3
+PASS In-document Element.querySelector: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2        
++        
+#adjacent-p3
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, whitespace after: #adjacent-p2+        
+#adjacent-p3
+PASS In-document Element.querySelector: Adjacent sibling combinator, whitespace after: #adjacent-p2+        
+#adjacent-p3
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, whitespace before: #adjacent-p2        
++#adjacent-p3
+PASS In-document Element.querySelector: Adjacent sibling combinator, whitespace before: #adjacent-p2        
++#adjacent-p3
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3
+PASS In-document Element.querySelector: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3
+PASS In-document Element.querySelectorAll: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div
+PASS In-document Element.querySelector: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div
+PASS In-document Element.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4
+PASS In-document Element.querySelector: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4
+PASS In-document Element.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4
+PASS In-document Element.querySelector: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4
+PASS In-document Element.querySelectorAll: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div
+PASS In-document Element.querySelector: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div
+PASS In-document Element.querySelectorAll: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p
+PASS In-document Element.querySelector: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p
+PASS In-document Element.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div
+PASS In-document Element.querySelector: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div
+PASS In-document Element.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1
+PASS In-document Element.querySelector: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1
+PASS In-document Element.querySelectorAll: General sibling combinator, surrounded by whitespace: #sibling-p2        
+~        
+#sibling-p3
+PASS In-document Element.querySelector: General sibling combinator, surrounded by whitespace: #sibling-p2        
+~        
+#sibling-p3
+PASS In-document Element.querySelectorAll: General sibling combinator, whitespace after: #sibling-p2~        
+#sibling-p3
+PASS In-document Element.querySelector: General sibling combinator, whitespace after: #sibling-p2~        
+#sibling-p3
+PASS In-document Element.querySelectorAll: General sibling combinator, whitespace before: #sibling-p2        
+~#sibling-p3
+PASS In-document Element.querySelector: General sibling combinator, whitespace before: #sibling-p2        
+~#sibling-p3
+PASS In-document Element.querySelectorAll: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3
+PASS In-document Element.querySelector: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3
+PASS In-document Element.querySelectorAll: Syntax, group of selectors separator, surrounded by whitespace: #group em        
+
+,        
+
+#group strong
+PASS In-document Element.querySelector: Syntax, group of selectors separator, surrounded by whitespace: #group em        
+
+,        
+
+#group strong
+PASS In-document Element.querySelectorAll: Syntax, group of selectors separator, whitespace after: #group em,        
+#group strong
+PASS In-document Element.querySelector: Syntax, group of selectors separator, whitespace after: #group em,        
+#group strong
+PASS In-document Element.querySelectorAll: Syntax, group of selectors separator, whitespace before: #group em        
+,#group strong
+PASS In-document Element.querySelector: Syntax, group of selectors separator, whitespace before: #group em        
+,#group strong
+PASS In-document Element.querySelectorAll: Syntax, group of selectors separator, no whitespace: #group em,#group strong
+PASS In-document Element.querySelector: Syntax, group of selectors separator, no whitespace: #group em,#group strong
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesParentNodequerySelectorAllxhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,2022 @@
</span><ins>+This test requires JavaScript.
+
+PASS Selectors-API Test Suite: XHTML
+PASS Document supports querySelector
+PASS Document supports querySelectorAll
+PASS Document.querySelectorAll returns NodeList instance
+PASS Detached Element supports querySelector
+PASS Detached Element supports querySelectorAll
+PASS Detached Element.querySelectorAll returns NodeList instance
+PASS Fragment supports querySelector
+PASS Fragment supports querySelectorAll
+PASS Fragment.querySelectorAll returns NodeList instance
+PASS In-document Element supports querySelector
+PASS In-document Element supports querySelectorAll
+PASS In-document Element.querySelectorAll returns NodeList instance
+PASS Document.querySelectorAll null
+PASS Document.querySelectorAll undefined
+PASS Document.querySelectorAll no parameter
+PASS Document.querySelector null
+PASS Document.querySelector undefined
+PASS Document.querySelector no parameter
+PASS Document.querySelectorAll tree order
+PASS Detached Element.querySelectorAll null
+PASS Detached Element.querySelectorAll undefined
+PASS Detached Element.querySelectorAll no parameter
+PASS Detached Element.querySelector null
+PASS Detached Element.querySelector undefined
+PASS Detached Element.querySelector no parameter
+PASS Detached Element.querySelectorAll tree order
+PASS Fragment.querySelectorAll null
+PASS Fragment.querySelectorAll undefined
+PASS Fragment.querySelectorAll no parameter
+PASS Fragment.querySelector null
+PASS Fragment.querySelector undefined
+PASS Fragment.querySelector no parameter
+PASS Fragment.querySelectorAll tree order
+PASS In-document Element.querySelectorAll null
+PASS In-document Element.querySelectorAll undefined
+PASS In-document Element.querySelectorAll no parameter
+PASS In-document Element.querySelector null
+PASS In-document Element.querySelector undefined
+PASS In-document Element.querySelector no parameter
+PASS In-document Element.querySelectorAll tree order
+PASS Document: static NodeList
+PASS Document: new NodeList
+PASS Detached Element: static NodeList
+PASS Detached Element: new NodeList
+PASS Fragment: static NodeList
+PASS Fragment: new NodeList
+PASS In-document Element: static NodeList
+PASS In-document Element: new NodeList
+PASS Document.querySelector: Empty String:
+PASS Document.querySelectorAll: Empty String:
+PASS Document.querySelector: Invalid character: [
+PASS Document.querySelectorAll: Invalid character: [
+PASS Document.querySelector: Invalid character: ]
+PASS Document.querySelectorAll: Invalid character: ]
+PASS Document.querySelector: Invalid character: (
+PASS Document.querySelectorAll: Invalid character: (
+PASS Document.querySelector: Invalid character: )
+PASS Document.querySelectorAll: Invalid character: )
+PASS Document.querySelector: Invalid character: {
+PASS Document.querySelectorAll: Invalid character: {
+PASS Document.querySelector: Invalid character: }
+PASS Document.querySelectorAll: Invalid character: }
+PASS Document.querySelector: Invalid character: <
+PASS Document.querySelectorAll: Invalid character: <
+PASS Document.querySelector: Invalid character: >
+PASS Document.querySelectorAll: Invalid character: >
+PASS Document.querySelector: Invalid ID: #
+PASS Document.querySelectorAll: Invalid ID: #
+PASS Document.querySelector: Invalid group of selectors: div,
+PASS Document.querySelectorAll: Invalid group of selectors: div,
+PASS Document.querySelector: Invalid class: .
+PASS Document.querySelectorAll: Invalid class: .
+PASS Document.querySelector: Invalid class: .5cm
+PASS Document.querySelectorAll: Invalid class: .5cm
+PASS Document.querySelector: Invalid class: ..test
+PASS Document.querySelectorAll: Invalid class: ..test
+PASS Document.querySelector: Invalid class: .foo..quux
+PASS Document.querySelectorAll: Invalid class: .foo..quux
+PASS Document.querySelector: Invalid class: .bar.
+PASS Document.querySelectorAll: Invalid class: .bar.
+PASS Document.querySelector: Invalid combinator: div & address, p
+PASS Document.querySelectorAll: Invalid combinator: div & address, p
+FAIL Document.querySelector: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.querySelector(q)
+ }" did not throw
+FAIL Document.querySelectorAll: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" did not throw
+PASS Document.querySelector: Invalid combinator: div ++ address, p
+PASS Document.querySelectorAll: Invalid combinator: div ++ address, p
+PASS Document.querySelector: Invalid combinator: div ~~ address, p
+PASS Document.querySelectorAll: Invalid combinator: div ~~ address, p
+PASS Document.querySelector: Invalid [att=value] selector: [*=test]
+PASS Document.querySelectorAll: Invalid [att=value] selector: [*=test]
+PASS Document.querySelector: Invalid [att=value] selector: [*|*=test]
+PASS Document.querySelectorAll: Invalid [att=value] selector: [*|*=test]
+PASS Document.querySelector: Invalid [att=value] selector: [class= space unquoted ]
+PASS Document.querySelectorAll: Invalid [att=value] selector: [class= space unquoted ]
+PASS Document.querySelector: Unknown pseudo-class: div:example
+PASS Document.querySelectorAll: Unknown pseudo-class: div:example
+PASS Document.querySelector: Unknown pseudo-class: :example
+PASS Document.querySelectorAll: Unknown pseudo-class: :example
+PASS Document.querySelector: Unknown pseudo-element: div::example
+PASS Document.querySelectorAll: Unknown pseudo-element: div::example
+PASS Document.querySelector: Unknown pseudo-element: ::example
+PASS Document.querySelectorAll: Unknown pseudo-element: ::example
+PASS Document.querySelector: Invalid pseudo-element: :::before
+PASS Document.querySelectorAll: Invalid pseudo-element: :::before
+FAIL Document.querySelector: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.querySelector(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Document.querySelectorAll: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Document.querySelector: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.querySelector(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Document.querySelectorAll: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+PASS Document.querySelector: Invalid namespace: ^|div
+PASS Document.querySelectorAll: Invalid namespace: ^|div
+PASS Document.querySelector: Invalid namespace: $|div
+PASS Document.querySelectorAll: Invalid namespace: $|div
+PASS Detached Element.querySelector: Empty String:
+PASS Detached Element.querySelectorAll: Empty String:
+PASS Detached Element.querySelector: Invalid character: [
+PASS Detached Element.querySelectorAll: Invalid character: [
+PASS Detached Element.querySelector: Invalid character: ]
+PASS Detached Element.querySelectorAll: Invalid character: ]
+PASS Detached Element.querySelector: Invalid character: (
+PASS Detached Element.querySelectorAll: Invalid character: (
+PASS Detached Element.querySelector: Invalid character: )
+PASS Detached Element.querySelectorAll: Invalid character: )
+PASS Detached Element.querySelector: Invalid character: {
+PASS Detached Element.querySelectorAll: Invalid character: {
+PASS Detached Element.querySelector: Invalid character: }
+PASS Detached Element.querySelectorAll: Invalid character: }
+PASS Detached Element.querySelector: Invalid character: <
+PASS Detached Element.querySelectorAll: Invalid character: <
+PASS Detached Element.querySelector: Invalid character: >
+PASS Detached Element.querySelectorAll: Invalid character: >
+PASS Detached Element.querySelector: Invalid ID: #
+PASS Detached Element.querySelectorAll: Invalid ID: #
+PASS Detached Element.querySelector: Invalid group of selectors: div,
+PASS Detached Element.querySelectorAll: Invalid group of selectors: div,
+PASS Detached Element.querySelector: Invalid class: .
+PASS Detached Element.querySelectorAll: Invalid class: .
+PASS Detached Element.querySelector: Invalid class: .5cm
+PASS Detached Element.querySelectorAll: Invalid class: .5cm
+PASS Detached Element.querySelector: Invalid class: ..test
+PASS Detached Element.querySelectorAll: Invalid class: ..test
+PASS Detached Element.querySelector: Invalid class: .foo..quux
+PASS Detached Element.querySelectorAll: Invalid class: .foo..quux
+PASS Detached Element.querySelector: Invalid class: .bar.
+PASS Detached Element.querySelectorAll: Invalid class: .bar.
+PASS Detached Element.querySelector: Invalid combinator: div & address, p
+PASS Detached Element.querySelectorAll: Invalid combinator: div & address, p
+FAIL Detached Element.querySelector: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.querySelector(q)
+ }" did not throw
+FAIL Detached Element.querySelectorAll: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" did not throw
+PASS Detached Element.querySelector: Invalid combinator: div ++ address, p
+PASS Detached Element.querySelectorAll: Invalid combinator: div ++ address, p
+PASS Detached Element.querySelector: Invalid combinator: div ~~ address, p
+PASS Detached Element.querySelectorAll: Invalid combinator: div ~~ address, p
+PASS Detached Element.querySelector: Invalid [att=value] selector: [*=test]
+PASS Detached Element.querySelectorAll: Invalid [att=value] selector: [*=test]
+PASS Detached Element.querySelector: Invalid [att=value] selector: [*|*=test]
+PASS Detached Element.querySelectorAll: Invalid [att=value] selector: [*|*=test]
+PASS Detached Element.querySelector: Invalid [att=value] selector: [class= space unquoted ]
+PASS Detached Element.querySelectorAll: Invalid [att=value] selector: [class= space unquoted ]
+PASS Detached Element.querySelector: Unknown pseudo-class: div:example
+PASS Detached Element.querySelectorAll: Unknown pseudo-class: div:example
+PASS Detached Element.querySelector: Unknown pseudo-class: :example
+PASS Detached Element.querySelectorAll: Unknown pseudo-class: :example
+PASS Detached Element.querySelector: Unknown pseudo-element: div::example
+PASS Detached Element.querySelectorAll: Unknown pseudo-element: div::example
+PASS Detached Element.querySelector: Unknown pseudo-element: ::example
+PASS Detached Element.querySelectorAll: Unknown pseudo-element: ::example
+PASS Detached Element.querySelector: Invalid pseudo-element: :::before
+PASS Detached Element.querySelectorAll: Invalid pseudo-element: :::before
+FAIL Detached Element.querySelector: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.querySelector(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Detached Element.querySelectorAll: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Detached Element.querySelector: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.querySelector(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Detached Element.querySelectorAll: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+PASS Detached Element.querySelector: Invalid namespace: ^|div
+PASS Detached Element.querySelectorAll: Invalid namespace: ^|div
+PASS Detached Element.querySelector: Invalid namespace: $|div
+PASS Detached Element.querySelectorAll: Invalid namespace: $|div
+PASS Fragment.querySelector: Empty String:
+PASS Fragment.querySelectorAll: Empty String:
+PASS Fragment.querySelector: Invalid character: [
+PASS Fragment.querySelectorAll: Invalid character: [
+PASS Fragment.querySelector: Invalid character: ]
+PASS Fragment.querySelectorAll: Invalid character: ]
+PASS Fragment.querySelector: Invalid character: (
+PASS Fragment.querySelectorAll: Invalid character: (
+PASS Fragment.querySelector: Invalid character: )
+PASS Fragment.querySelectorAll: Invalid character: )
+PASS Fragment.querySelector: Invalid character: {
+PASS Fragment.querySelectorAll: Invalid character: {
+PASS Fragment.querySelector: Invalid character: }
+PASS Fragment.querySelectorAll: Invalid character: }
+PASS Fragment.querySelector: Invalid character: <
+PASS Fragment.querySelectorAll: Invalid character: <
+PASS Fragment.querySelector: Invalid character: >
+PASS Fragment.querySelectorAll: Invalid character: >
+PASS Fragment.querySelector: Invalid ID: #
+PASS Fragment.querySelectorAll: Invalid ID: #
+PASS Fragment.querySelector: Invalid group of selectors: div,
+PASS Fragment.querySelectorAll: Invalid group of selectors: div,
+PASS Fragment.querySelector: Invalid class: .
+PASS Fragment.querySelectorAll: Invalid class: .
+PASS Fragment.querySelector: Invalid class: .5cm
+PASS Fragment.querySelectorAll: Invalid class: .5cm
+PASS Fragment.querySelector: Invalid class: ..test
+PASS Fragment.querySelectorAll: Invalid class: ..test
+PASS Fragment.querySelector: Invalid class: .foo..quux
+PASS Fragment.querySelectorAll: Invalid class: .foo..quux
+PASS Fragment.querySelector: Invalid class: .bar.
+PASS Fragment.querySelectorAll: Invalid class: .bar.
+PASS Fragment.querySelector: Invalid combinator: div & address, p
+PASS Fragment.querySelectorAll: Invalid combinator: div & address, p
+FAIL Fragment.querySelector: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.querySelector(q)
+ }" did not throw
+FAIL Fragment.querySelectorAll: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" did not throw
+PASS Fragment.querySelector: Invalid combinator: div ++ address, p
+PASS Fragment.querySelectorAll: Invalid combinator: div ++ address, p
+PASS Fragment.querySelector: Invalid combinator: div ~~ address, p
+PASS Fragment.querySelectorAll: Invalid combinator: div ~~ address, p
+PASS Fragment.querySelector: Invalid [att=value] selector: [*=test]
+PASS Fragment.querySelectorAll: Invalid [att=value] selector: [*=test]
+PASS Fragment.querySelector: Invalid [att=value] selector: [*|*=test]
+PASS Fragment.querySelectorAll: Invalid [att=value] selector: [*|*=test]
+PASS Fragment.querySelector: Invalid [att=value] selector: [class= space unquoted ]
+PASS Fragment.querySelectorAll: Invalid [att=value] selector: [class= space unquoted ]
+PASS Fragment.querySelector: Unknown pseudo-class: div:example
+PASS Fragment.querySelectorAll: Unknown pseudo-class: div:example
+PASS Fragment.querySelector: Unknown pseudo-class: :example
+PASS Fragment.querySelectorAll: Unknown pseudo-class: :example
+PASS Fragment.querySelector: Unknown pseudo-element: div::example
+PASS Fragment.querySelectorAll: Unknown pseudo-element: div::example
+PASS Fragment.querySelector: Unknown pseudo-element: ::example
+PASS Fragment.querySelectorAll: Unknown pseudo-element: ::example
+PASS Fragment.querySelector: Invalid pseudo-element: :::before
+PASS Fragment.querySelectorAll: Invalid pseudo-element: :::before
+FAIL Fragment.querySelector: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.querySelector(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Fragment.querySelectorAll: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Fragment.querySelector: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.querySelector(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL Fragment.querySelectorAll: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+PASS Fragment.querySelector: Invalid namespace: ^|div
+PASS Fragment.querySelectorAll: Invalid namespace: ^|div
+PASS Fragment.querySelector: Invalid namespace: $|div
+PASS Fragment.querySelectorAll: Invalid namespace: $|div
+PASS In-document Element.querySelector: Empty String:
+PASS In-document Element.querySelectorAll: Empty String:
+PASS In-document Element.querySelector: Invalid character: [
+PASS In-document Element.querySelectorAll: Invalid character: [
+PASS In-document Element.querySelector: Invalid character: ]
+PASS In-document Element.querySelectorAll: Invalid character: ]
+PASS In-document Element.querySelector: Invalid character: (
+PASS In-document Element.querySelectorAll: Invalid character: (
+PASS In-document Element.querySelector: Invalid character: )
+PASS In-document Element.querySelectorAll: Invalid character: )
+PASS In-document Element.querySelector: Invalid character: {
+PASS In-document Element.querySelectorAll: Invalid character: {
+PASS In-document Element.querySelector: Invalid character: }
+PASS In-document Element.querySelectorAll: Invalid character: }
+PASS In-document Element.querySelector: Invalid character: <
+PASS In-document Element.querySelectorAll: Invalid character: <
+PASS In-document Element.querySelector: Invalid character: >
+PASS In-document Element.querySelectorAll: Invalid character: >
+PASS In-document Element.querySelector: Invalid ID: #
+PASS In-document Element.querySelectorAll: Invalid ID: #
+PASS In-document Element.querySelector: Invalid group of selectors: div,
+PASS In-document Element.querySelectorAll: Invalid group of selectors: div,
+PASS In-document Element.querySelector: Invalid class: .
+PASS In-document Element.querySelectorAll: Invalid class: .
+PASS In-document Element.querySelector: Invalid class: .5cm
+PASS In-document Element.querySelectorAll: Invalid class: .5cm
+PASS In-document Element.querySelector: Invalid class: ..test
+PASS In-document Element.querySelectorAll: Invalid class: ..test
+PASS In-document Element.querySelector: Invalid class: .foo..quux
+PASS In-document Element.querySelectorAll: Invalid class: .foo..quux
+PASS In-document Element.querySelector: Invalid class: .bar.
+PASS In-document Element.querySelectorAll: Invalid class: .bar.
+PASS In-document Element.querySelector: Invalid combinator: div & address, p
+PASS In-document Element.querySelectorAll: Invalid combinator: div & address, p
+FAIL In-document Element.querySelector: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.querySelector(q)
+ }" did not throw
+FAIL In-document Element.querySelectorAll: Invalid combinator: div >> address, p assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" did not throw
+PASS In-document Element.querySelector: Invalid combinator: div ++ address, p
+PASS In-document Element.querySelectorAll: Invalid combinator: div ++ address, p
+PASS In-document Element.querySelector: Invalid combinator: div ~~ address, p
+PASS In-document Element.querySelectorAll: Invalid combinator: div ~~ address, p
+PASS In-document Element.querySelector: Invalid [att=value] selector: [*=test]
+PASS In-document Element.querySelectorAll: Invalid [att=value] selector: [*=test]
+PASS In-document Element.querySelector: Invalid [att=value] selector: [*|*=test]
+PASS In-document Element.querySelectorAll: Invalid [att=value] selector: [*|*=test]
+PASS In-document Element.querySelector: Invalid [att=value] selector: [class= space unquoted ]
+PASS In-document Element.querySelectorAll: Invalid [att=value] selector: [class= space unquoted ]
+PASS In-document Element.querySelector: Unknown pseudo-class: div:example
+PASS In-document Element.querySelectorAll: Unknown pseudo-class: div:example
+PASS In-document Element.querySelector: Unknown pseudo-class: :example
+PASS In-document Element.querySelectorAll: Unknown pseudo-class: :example
+PASS In-document Element.querySelector: Unknown pseudo-element: div::example
+PASS In-document Element.querySelectorAll: Unknown pseudo-element: div::example
+PASS In-document Element.querySelector: Unknown pseudo-element: ::example
+PASS In-document Element.querySelectorAll: Unknown pseudo-element: ::example
+PASS In-document Element.querySelector: Invalid pseudo-element: :::before
+PASS In-document Element.querySelectorAll: Invalid pseudo-element: :::before
+FAIL In-document Element.querySelector: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.querySelector(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL In-document Element.querySelectorAll: Undeclared namespace: ns|div assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL In-document Element.querySelector: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.querySelector(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+FAIL In-document Element.querySelectorAll: Undeclared namespace: :not(ns|div) assert_throws: function "function () {
+ root.querySelectorAll(q)
+ }" threw object "Error: NamespaceError: DOM Exception 14" that is not a DOMException SyntaxError: property "code" is equal to 14, expected 12
+PASS In-document Element.querySelector: Invalid namespace: ^|div
+PASS In-document Element.querySelectorAll: Invalid namespace: ^|div
+PASS In-document Element.querySelector: Invalid namespace: $|div
+PASS In-document Element.querySelectorAll: Invalid namespace: $|div
+PASS Document.querySelectorAll: Type selector, matching html element: html
+PASS Document.querySelector: Type selector, matching html element: html
+PASS Document.querySelectorAll: Type selector, matching body element: body
+PASS Document.querySelector: Type selector, matching body element: body
+PASS Document.querySelectorAll: Universal selector, matching all children of element with specified ID: #universal>*
+PASS Document.querySelector: Universal selector, matching all children of element with specified ID: #universal>*
+PASS Document.querySelectorAll: Universal selector, matching all grandchildren of element with specified ID: #universal>*>*
+PASS Document.querySelector: Universal selector, matching all grandchildren of element with specified ID: #universal>*>*
+PASS Document.querySelectorAll: Universal selector, matching all children of empty element with specified ID: #empty>*
+PASS Document.querySelector: Universal selector, matching all children of empty element with specified ID: #empty>*
+PASS Document.querySelectorAll: Universal selector, matching all descendants of element with specified ID: #universal *
+PASS Document.querySelector: Universal selector, matching all descendants of element with specified ID: #universal *
+PASS Document.querySelectorAll: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align]
+PASS Document.querySelector: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align]
+PASS Document.querySelectorAll: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align]
+PASS Document.querySelector: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align]
+PASS Document.querySelectorAll: Attribute presence selector, not matching title attribute, case sensitivity: #attr-presence [TiTlE]
+PASS Document.querySelector: Attribute presence selector, not matching title attribute, case sensitivity: #attr-presence [TiTlE]
+PASS Document.querySelectorAll: Attribute presence selector, matching custom data-* attribute: [data-attr-presence]
+PASS Document.querySelector: Attribute presence selector, matching custom data-* attribute: [data-attr-presence]
+PASS Document.querySelectorAll: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align]
+PASS Document.querySelector: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align]
+PASS Document.querySelectorAll: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文]
+PASS Document.querySelector: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文]
+PASS Document.querySelectorAll: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected]
+PASS Document.querySelector: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected]
+PASS Document.querySelectorAll: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected]
+PASS Document.querySelector: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected]
+PASS Document.querySelectorAll: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected]
+PASS Document.querySelector: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected]
+PASS Document.querySelectorAll: Attribute value selector, matching align attribute with value: #attr-value [align="center"]
+PASS Document.querySelector: Attribute value selector, matching align attribute with value: #attr-value [align="center"]
+PASS Document.querySelectorAll: Attribute value selector, matching align attribute with empty value: #attr-value [align=""]
+PASS Document.querySelector: Attribute value selector, matching align attribute with empty value: #attr-value [align=""]
+PASS Document.querySelectorAll: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"]
+PASS Document.querySelector: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"]
+PASS Document.querySelectorAll: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"]
+PASS Document.querySelector: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"]
+PASS Document.querySelectorAll: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"]
+PASS Document.querySelector: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"]
+PASS Document.querySelectorAll: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"]
+PASS Document.querySelector: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"]
+PASS Document.querySelectorAll: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS Document.querySelector: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS Document.querySelectorAll: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS Document.querySelector: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS Document.querySelectorAll: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS Document.querySelector: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS Document.querySelectorAll: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文]
+PASS Document.querySelector: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文]
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"]
+PASS Document.querySelector: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"]
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""]
+PASS Document.querySelector: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""]
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"]
+PASS Document.querySelector: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"]
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"]
+PASS Document.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"]
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"]
+PASS Document.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"]
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS Document.querySelector: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS Document.querySelector: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS Document.querySelector: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"]
+PASS Document.querySelector: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"]
+PASS Document.querySelectorAll: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文]
+PASS Document.querySelector: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文]
+PASS Document.querySelectorAll: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"]
+PASS Document.querySelector: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"]
+PASS Document.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"]
+PASS Document.querySelector: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"]
+PASS Document.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"]
+PASS Document.querySelector: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"]
+PASS Document.querySelectorAll: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"]
+PASS Document.querySelector: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"]
+PASS Document.querySelectorAll: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"]
+PASS Document.querySelector: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"]
+PASS Document.querySelectorAll: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"]
+PASS Document.querySelector: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"]
+PASS Document.querySelectorAll: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple]
+PASS Document.querySelector: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple]
+PASS Document.querySelectorAll: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple']
+PASS Document.querySelector: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple']
+PASS Document.querySelectorAll: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"]
+PASS Document.querySelector: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"]
+PASS Document.querySelectorAll: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple]
+PASS Document.querySelector: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple]
+PASS Document.querySelectorAll: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"]
+PASS Document.querySelector: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"]
+PASS Document.querySelectorAll: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"]
+PASS Document.querySelector: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"]
+PASS Document.querySelectorAll: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple]
+PASS Document.querySelector: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple]
+PASS Document.querySelectorAll: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple ']
+PASS Document.querySelector: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple ']
+PASS Document.querySelectorAll: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "]
+PASS Document.querySelector: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "]
+PASS Document.querySelectorAll: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ]
+PASS Document.querySelector: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ]
+PASS Document.querySelectorAll: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"]
+PASS Document.querySelector: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"]
+PASS Document.querySelectorAll: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"]
+PASS Document.querySelector: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"]
+PASS Document.querySelectorAll: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."]
+PASS Document.querySelector: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."]
+PASS Document.querySelectorAll: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"]
+PASS Document.querySelector: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"]
+PASS Document.querySelectorAll: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"]
+PASS Document.querySelector: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"]
+PASS Document.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple']
+PASS Document.querySelector: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple']
+PASS Document.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange ']
+PASS Document.querySelector: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange ']
+PASS Document.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora']
+PASS Document.querySelector: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora']
+PASS Document.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"]
+PASS Document.querySelector: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"]
+PASS Document.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "]
+PASS Document.querySelector: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "]
+PASS Document.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"]
+PASS Document.querySelector: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"]
+PASS Document.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple]
+PASS Document.querySelector: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple]
+PASS Document.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ]
+PASS Document.querySelector: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ]
+PASS Document.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ]
+PASS Document.querySelector: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ]
+PASS Document.querySelectorAll: :root pseudo-class selector, matching document root element: :root
+PASS Document.querySelector: :root pseudo-class selector, matching document root element: :root
+PASS Document.querySelectorAll: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3)
+PASS Document.querySelector: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3)
+PASS Document.querySelectorAll: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n)
+PASS Document.querySelector: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n)
+PASS Document.querySelectorAll: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4)
+PASS Document.querySelector: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4)
+PASS Document.querySelectorAll: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1)
+PASS Document.querySelector: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1)
+PASS Document.querySelectorAll: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3)
+PASS Document.querySelector: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3)
+PASS Document.querySelectorAll: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n)
+PASS Document.querySelector: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n)
+PASS Document.querySelectorAll: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4)
+PASS Document.querySelector: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4)
+PASS Document.querySelectorAll: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS Document.querySelector: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS Document.querySelectorAll: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3)
+PASS Document.querySelector: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3)
+PASS Document.querySelectorAll: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n)
+PASS Document.querySelector: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n)
+PASS Document.querySelectorAll: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS Document.querySelector: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS Document.querySelectorAll: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS Document.querySelector: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS Document.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS Document.querySelector: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS Document.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS Document.querySelector: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS Document.querySelectorAll: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type
+PASS Document.querySelector: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type
+PASS Document.querySelectorAll: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type
+PASS Document.querySelector: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type
+PASS Document.querySelectorAll: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type
+PASS Document.querySelector: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type
+PASS Document.querySelectorAll: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type
+PASS Document.querySelector: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type
+PASS Document.querySelectorAll: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type
+PASS Document.querySelector: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type
+PASS Document.querySelectorAll: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type
+PASS Document.querySelector: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type
+PASS Document.querySelectorAll: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child
+PASS Document.querySelector: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child
+PASS Document.querySelectorAll: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child
+PASS Document.querySelector: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child
+PASS Document.querySelectorAll: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child
+PASS Document.querySelector: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child
+PASS Document.querySelectorAll: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child
+PASS Document.querySelector: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child
+PASS Document.querySelectorAll: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child
+PASS Document.querySelector: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child
+PASS Document.querySelectorAll: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child
+PASS Document.querySelector: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child
+PASS Document.querySelectorAll: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child
+PASS Document.querySelector: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child
+PASS Document.querySelectorAll: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child
+PASS Document.querySelector: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child
+PASS Document.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type
+PASS Document.querySelector: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type
+PASS Document.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type
+PASS Document.querySelector: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type
+PASS Document.querySelectorAll: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty
+PASS Document.querySelector: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty
+PASS Document.querySelectorAll: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty
+PASS Document.querySelector: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty
+PASS Document.querySelectorAll: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited
+PASS Document.querySelector: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited
+PASS Document.querySelectorAll: :link and :visited pseudo-class selectors, matching link elements with href attributes: #head :link, #head :visited
+PASS Document.querySelector: :link and :visited pseudo-class selectors, matching link elements with href attributes: #head :link, #head :visited
+FAIL Document.querySelectorAll: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target assert_equals: The method should return the expected number of matches. expected 1 but got 0
+FAIL Document.querySelector: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target assert_not_equals: The method should return a match. got disallowed value null
+PASS Document.querySelectorAll: :lang pseudo-class selector, matching inherited language: #pseudo-lang-div1:lang(en)
+PASS Document.querySelector: :lang pseudo-class selector, matching inherited language: #pseudo-lang-div1:lang(en)
+PASS Document.querySelectorAll: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)
+PASS Document.querySelector: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)
+PASS Document.querySelectorAll: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)
+PASS Document.querySelector: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)
+PASS Document.querySelectorAll: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)
+PASS Document.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)
+PASS Document.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled
+PASS Document.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled
+PASS Document.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled
+PASS Document.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled
+PASS Document.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked
+PASS Document.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked
+PASS Document.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div)
+PASS Document.querySelector: :not pseudo-class selector, matching : #not>:not(div)
+PASS Document.querySelectorAll: :not pseudo-class selector, matching : #not * :not(:first-child)
+PASS Document.querySelector: :not pseudo-class selector, matching : #not * :not(:first-child)
+PASS Document.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*)
+PASS Document.querySelector: :not pseudo-class selector, matching nothing: :not(*)
+PASS Document.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*)
+PASS Document.querySelector: :not pseudo-class selector, matching nothing: :not(*|*)
+PASS Document.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line
+PASS Document.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line
+PASS Document.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line
+PASS Document.querySelector: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line
+PASS Document.querySelectorAll: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter
+PASS Document.querySelector: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter
+PASS Document.querySelectorAll: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter
+PASS Document.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter
+PASS Document.querySelectorAll: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before
+PASS Document.querySelector: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before
+PASS Document.querySelectorAll: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before
+PASS Document.querySelector: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before
+PASS Document.querySelectorAll: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after
+PASS Document.querySelector: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after
+PASS Document.querySelectorAll: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after
+PASS Document.querySelector: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after
+PASS Document.querySelectorAll: Class selector, matching element with specified class: .class-p
+PASS Document.querySelector: Class selector, matching element with specified class: .class-p
+PASS Document.querySelectorAll: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana
+PASS Document.querySelector: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana
+PASS Document.querySelectorAll: Class Selector, chained, with type selector: div.apple.banana.orange
+PASS Document.querySelector: Class Selector, chained, with type selector: div.apple.banana.orange
+PASS Document.querySelectorAll: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi
+PASS Document.querySelector: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi
+PASS Document.querySelectorAll: Class selector, matching multiple elements with class value using non-ASCII characters: .台北
+PASS Document.querySelector: Class selector, matching multiple elements with class value using non-ASCII characters: .台北
+PASS Document.querySelectorAll: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北
+PASS Document.querySelector: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北
+PASS Document.querySelectorAll: Class selector, matching element with class with escaped character: .foo\:bar
+PASS Document.querySelector: Class selector, matching element with class with escaped character: .foo\:bar
+PASS Document.querySelectorAll: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar
+PASS Document.querySelector: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar
+PASS Document.querySelectorAll: ID selector, matching element with specified id: #id #id-div1
+PASS Document.querySelector: ID selector, matching element with specified id: #id #id-div1
+PASS Document.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div1
+PASS Document.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div1
+PASS Document.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div2
+PASS Document.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div2
+PASS Document.querySelectorAll: ID Selector, chained, with type selector: div#id-div1, div#id-div2
+PASS Document.querySelector: ID Selector, chained, with type selector: div#id-div1, div#id-div2
+PASS Document.querySelectorAll: ID selector, not matching non-existent descendant: #id #none
+PASS Document.querySelector: ID selector, not matching non-existent descendant: #id #none
+PASS Document.querySelectorAll: ID selector, not matching non-existent ancestor: #none #id-div1
+PASS Document.querySelector: ID selector, not matching non-existent ancestor: #none #id-div1
+PASS Document.querySelectorAll: ID selector, matching multiple elements with duplicate id: #id-li-duplicate
+PASS Document.querySelector: ID selector, matching multiple elements with duplicate id: #id-li-duplicate
+PASS Document.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北Táiběi
+PASS Document.querySelector: ID selector, matching id value using non-ASCII characters: #台北Táiběi
+PASS Document.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北
+PASS Document.querySelector: ID selector, matching id value using non-ASCII characters: #台北
+PASS Document.querySelectorAll: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北
+PASS Document.querySelector: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北
+PASS Document.querySelectorAll: ID selector, matching element with id with escaped character: #\#foo\:bar
+PASS Document.querySelector: ID selector, matching element with id with escaped character: #\#foo\:bar
+PASS Document.querySelectorAll: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar
+PASS Document.querySelector: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar
+PASS Document.querySelectorAll: Namespace selector, matching element with any namespace: #any-namespace *|div
+PASS Document.querySelector: Namespace selector, matching element with any namespace: #any-namespace *|div
+FAIL Document.querySelectorAll: Namespace selector, matching div elements in no namespace only: #no-namespace |div assert_equals: The method should return the expected number of matches. expected 1 but got 4
+FAIL Document.querySelector: Namespace selector, matching div elements in no namespace only: #no-namespace |div assert_equals: The method should return the first match. expected "no-namespace-div3" but got "no-namespace-div1"
+FAIL Document.querySelectorAll: Namespace selector, matching any elements in no namespace only: #no-namespace |* assert_equals: The method should return the expected number of matches. expected 1 but got 4
+FAIL Document.querySelector: Namespace selector, matching any elements in no namespace only: #no-namespace |* assert_equals: The method should return the first match. expected "no-namespace-div3" but got "no-namespace-div1"
+PASS Document.querySelectorAll: Descendant combinator, matching element that is a descendant of an element with id: #descendant div
+PASS Document.querySelector: Descendant combinator, matching element that is a descendant of an element with id: #descendant div
+PASS Document.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: body #descendant-div1
+PASS Document.querySelector: Descendant combinator, matching element with id that is a descendant of an element: body #descendant-div1
+PASS Document.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1
+PASS Document.querySelector: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1
+PASS Document.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2
+PASS Document.querySelector: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2
+PASS Document.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2
+PASS Document.querySelector: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2
+PASS Document.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3
+PASS Document.querySelector: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3
+PASS Document.querySelectorAll: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4
+PASS Document.querySelector: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4
+PASS Document.querySelectorAll: Descendant combinator, whitespace characters: #descendant        
+#descendant-div2
+PASS Document.querySelector: Descendant combinator, whitespace characters: #descendant        
+#descendant-div2
+PASS Document.querySelectorAll: Child combinator, matching element that is a child of an element with id: #child>div
+PASS Document.querySelector: Child combinator, matching element that is a child of an element with id: #child>div
+PASS Document.querySelectorAll: Child combinator, matching element with id that is a child of an element: div>#child-div1
+PASS Document.querySelector: Child combinator, matching element with id that is a child of an element: div>#child-div1
+PASS Document.querySelectorAll: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1
+PASS Document.querySelector: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1
+PASS Document.querySelectorAll: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2
+PASS Document.querySelector: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2
+PASS Document.querySelectorAll: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2
+PASS Document.querySelector: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2
+PASS Document.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3
+PASS Document.querySelector: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3
+PASS Document.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3
+PASS Document.querySelector: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3
+PASS Document.querySelectorAll: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3
+PASS Document.querySelector: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3
+PASS Document.querySelectorAll: Child combinator, surrounded by whitespace: #child-div1        
+>        
+#child-div2
+PASS Document.querySelector: Child combinator, surrounded by whitespace: #child-div1        
+>        
+#child-div2
+PASS Document.querySelectorAll: Child combinator, whitespace after: #child-div1>        
+#child-div2
+PASS Document.querySelector: Child combinator, whitespace after: #child-div1>        
+#child-div2
+PASS Document.querySelectorAll: Child combinator, whitespace before: #child-div1        
+>#child-div2
+PASS Document.querySelector: Child combinator, whitespace before: #child-div1        
+>#child-div2
+PASS Document.querySelectorAll: Child combinator, no whitespace: #child-div1>#child-div2
+PASS Document.querySelector: Child combinator, no whitespace: #child-div1>#child-div2
+PASS Document.querySelectorAll: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div
+PASS Document.querySelector: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div
+PASS Document.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4
+PASS Document.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4
+PASS Document.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4
+PASS Document.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4
+PASS Document.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4
+PASS Document.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4
+PASS Document.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4
+PASS Document.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4
+PASS Document.querySelectorAll: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p
+PASS Document.querySelector: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p
+PASS Document.querySelectorAll: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1
+PASS Document.querySelector: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1
+PASS Document.querySelectorAll: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2        
++        
+#adjacent-p3
+PASS Document.querySelector: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2        
++        
+#adjacent-p3
+PASS Document.querySelectorAll: Adjacent sibling combinator, whitespace after: #adjacent-p2+        
+#adjacent-p3
+PASS Document.querySelector: Adjacent sibling combinator, whitespace after: #adjacent-p2+        
+#adjacent-p3
+PASS Document.querySelectorAll: Adjacent sibling combinator, whitespace before: #adjacent-p2        
++#adjacent-p3
+PASS Document.querySelector: Adjacent sibling combinator, whitespace before: #adjacent-p2        
++#adjacent-p3
+PASS Document.querySelectorAll: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3
+PASS Document.querySelector: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3
+PASS Document.querySelectorAll: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div
+PASS Document.querySelector: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div
+PASS Document.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4
+PASS Document.querySelector: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4
+PASS Document.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4
+PASS Document.querySelector: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4
+PASS Document.querySelectorAll: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div
+PASS Document.querySelector: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div
+PASS Document.querySelectorAll: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p
+PASS Document.querySelector: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p
+PASS Document.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div
+PASS Document.querySelector: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div
+PASS Document.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1
+PASS Document.querySelector: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1
+PASS Document.querySelectorAll: General sibling combinator, surrounded by whitespace: #sibling-p2        
+~        
+#sibling-p3
+PASS Document.querySelector: General sibling combinator, surrounded by whitespace: #sibling-p2        
+~        
+#sibling-p3
+PASS Document.querySelectorAll: General sibling combinator, whitespace after: #sibling-p2~        
+#sibling-p3
+PASS Document.querySelector: General sibling combinator, whitespace after: #sibling-p2~        
+#sibling-p3
+PASS Document.querySelectorAll: General sibling combinator, whitespace before: #sibling-p2        
+~#sibling-p3
+PASS Document.querySelector: General sibling combinator, whitespace before: #sibling-p2        
+~#sibling-p3
+PASS Document.querySelectorAll: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3
+PASS Document.querySelector: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3
+PASS Document.querySelectorAll: Syntax, group of selectors separator, surrounded by whitespace: #group em        
+
+,        
+
+#group strong
+PASS Document.querySelector: Syntax, group of selectors separator, surrounded by whitespace: #group em        
+
+,        
+
+#group strong
+PASS Document.querySelectorAll: Syntax, group of selectors separator, whitespace after: #group em,        
+#group strong
+PASS Document.querySelector: Syntax, group of selectors separator, whitespace after: #group em,        
+#group strong
+PASS Document.querySelectorAll: Syntax, group of selectors separator, whitespace before: #group em        
+,#group strong
+PASS Document.querySelector: Syntax, group of selectors separator, whitespace before: #group em        
+,#group strong
+PASS Document.querySelectorAll: Syntax, group of selectors separator, no whitespace: #group em,#group strong
+PASS Document.querySelector: Syntax, group of selectors separator, no whitespace: #group em,#group strong
+PASS Detached Element.querySelectorAll: Type selector, matching html element: html
+PASS Detached Element.querySelector: Type selector, matching html element: html
+PASS Detached Element.querySelectorAll: Type selector, matching body element: body
+PASS Detached Element.querySelector: Type selector, matching body element: body
+PASS Detached Element.querySelectorAll: Universal selector, matching all children of element with specified ID: #universal>*
+PASS Detached Element.querySelector: Universal selector, matching all children of element with specified ID: #universal>*
+PASS Detached Element.querySelectorAll: Universal selector, matching all grandchildren of element with specified ID: #universal>*>*
+PASS Detached Element.querySelector: Universal selector, matching all grandchildren of element with specified ID: #universal>*>*
+PASS Detached Element.querySelectorAll: Universal selector, matching all children of empty element with specified ID: #empty>*
+PASS Detached Element.querySelector: Universal selector, matching all children of empty element with specified ID: #empty>*
+PASS Detached Element.querySelectorAll: Universal selector, matching all descendants of element with specified ID: #universal *
+PASS Detached Element.querySelector: Universal selector, matching all descendants of element with specified ID: #universal *
+PASS Detached Element.querySelectorAll: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align]
+PASS Detached Element.querySelector: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align]
+PASS Detached Element.querySelectorAll: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align]
+PASS Detached Element.querySelector: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align]
+PASS Detached Element.querySelectorAll: Attribute presence selector, not matching title attribute, case sensitivity: #attr-presence [TiTlE]
+PASS Detached Element.querySelector: Attribute presence selector, not matching title attribute, case sensitivity: #attr-presence [TiTlE]
+PASS Detached Element.querySelectorAll: Attribute presence selector, matching custom data-* attribute: [data-attr-presence]
+PASS Detached Element.querySelector: Attribute presence selector, matching custom data-* attribute: [data-attr-presence]
+PASS Detached Element.querySelectorAll: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align]
+PASS Detached Element.querySelector: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align]
+PASS Detached Element.querySelectorAll: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文]
+PASS Detached Element.querySelector: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文]
+PASS Detached Element.querySelectorAll: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected]
+PASS Detached Element.querySelector: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected]
+PASS Detached Element.querySelectorAll: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected]
+PASS Detached Element.querySelector: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected]
+PASS Detached Element.querySelectorAll: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected]
+PASS Detached Element.querySelector: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected]
+PASS Detached Element.querySelectorAll: Attribute value selector, matching align attribute with value: #attr-value [align="center"]
+PASS Detached Element.querySelector: Attribute value selector, matching align attribute with value: #attr-value [align="center"]
+PASS Detached Element.querySelectorAll: Attribute value selector, matching align attribute with empty value: #attr-value [align=""]
+PASS Detached Element.querySelector: Attribute value selector, matching align attribute with empty value: #attr-value [align=""]
+PASS Detached Element.querySelectorAll: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"]
+PASS Detached Element.querySelector: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"]
+PASS Detached Element.querySelectorAll: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"]
+PASS Detached Element.querySelector: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"]
+PASS Detached Element.querySelectorAll: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"]
+PASS Detached Element.querySelector: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"]
+PASS Detached Element.querySelectorAll: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"]
+PASS Detached Element.querySelector: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"]
+PASS Detached Element.querySelectorAll: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS Detached Element.querySelector: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS Detached Element.querySelectorAll: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS Detached Element.querySelector: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS Detached Element.querySelectorAll: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS Detached Element.querySelector: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS Detached Element.querySelectorAll: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文]
+PASS Detached Element.querySelector: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文]
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"]
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"]
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""]
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""]
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"]
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"]
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"]
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"]
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"]
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"]
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"]
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"]
+PASS Detached Element.querySelectorAll: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文]
+PASS Detached Element.querySelector: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文]
+PASS Detached Element.querySelectorAll: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"]
+PASS Detached Element.querySelector: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"]
+PASS Detached Element.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"]
+PASS Detached Element.querySelector: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"]
+PASS Detached Element.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"]
+PASS Detached Element.querySelector: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"]
+PASS Detached Element.querySelectorAll: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"]
+PASS Detached Element.querySelector: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"]
+PASS Detached Element.querySelectorAll: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"]
+PASS Detached Element.querySelector: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"]
+PASS Detached Element.querySelectorAll: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"]
+PASS Detached Element.querySelector: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"]
+PASS Detached Element.querySelectorAll: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple]
+PASS Detached Element.querySelector: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple]
+PASS Detached Element.querySelectorAll: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple']
+PASS Detached Element.querySelector: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple']
+PASS Detached Element.querySelectorAll: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"]
+PASS Detached Element.querySelector: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"]
+PASS Detached Element.querySelectorAll: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple]
+PASS Detached Element.querySelector: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple]
+PASS Detached Element.querySelectorAll: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"]
+PASS Detached Element.querySelector: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"]
+PASS Detached Element.querySelectorAll: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"]
+PASS Detached Element.querySelector: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"]
+PASS Detached Element.querySelectorAll: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple]
+PASS Detached Element.querySelector: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple]
+PASS Detached Element.querySelectorAll: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple ']
+PASS Detached Element.querySelector: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple ']
+PASS Detached Element.querySelectorAll: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "]
+PASS Detached Element.querySelector: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "]
+PASS Detached Element.querySelectorAll: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ]
+PASS Detached Element.querySelector: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ]
+PASS Detached Element.querySelectorAll: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"]
+PASS Detached Element.querySelector: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"]
+PASS Detached Element.querySelectorAll: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"]
+PASS Detached Element.querySelector: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"]
+PASS Detached Element.querySelectorAll: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."]
+PASS Detached Element.querySelector: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."]
+PASS Detached Element.querySelectorAll: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"]
+PASS Detached Element.querySelector: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"]
+PASS Detached Element.querySelectorAll: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"]
+PASS Detached Element.querySelector: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"]
+PASS Detached Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple']
+PASS Detached Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple']
+PASS Detached Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange ']
+PASS Detached Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange ']
+PASS Detached Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora']
+PASS Detached Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora']
+PASS Detached Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"]
+PASS Detached Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"]
+PASS Detached Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "]
+PASS Detached Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "]
+PASS Detached Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"]
+PASS Detached Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"]
+PASS Detached Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple]
+PASS Detached Element.querySelector: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple]
+PASS Detached Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ]
+PASS Detached Element.querySelector: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ]
+PASS Detached Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ]
+PASS Detached Element.querySelector: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ]
+PASS Detached Element.querySelectorAll: :root pseudo-class selector, not matching document root element: :root
+PASS Detached Element.querySelector: :root pseudo-class selector, not matching document root element: :root
+PASS Detached Element.querySelectorAll: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3)
+PASS Detached Element.querySelector: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3)
+PASS Detached Element.querySelectorAll: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n)
+PASS Detached Element.querySelector: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n)
+PASS Detached Element.querySelectorAll: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4)
+PASS Detached Element.querySelector: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4)
+PASS Detached Element.querySelectorAll: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1)
+PASS Detached Element.querySelector: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1)
+PASS Detached Element.querySelectorAll: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3)
+PASS Detached Element.querySelector: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3)
+PASS Detached Element.querySelectorAll: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n)
+PASS Detached Element.querySelector: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n)
+PASS Detached Element.querySelectorAll: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4)
+PASS Detached Element.querySelector: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4)
+PASS Detached Element.querySelectorAll: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS Detached Element.querySelector: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS Detached Element.querySelectorAll: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3)
+PASS Detached Element.querySelector: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3)
+PASS Detached Element.querySelectorAll: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n)
+PASS Detached Element.querySelector: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n)
+PASS Detached Element.querySelectorAll: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS Detached Element.querySelector: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS Detached Element.querySelectorAll: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS Detached Element.querySelector: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS Detached Element.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS Detached Element.querySelector: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS Detached Element.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS Detached Element.querySelector: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS Detached Element.querySelectorAll: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type
+PASS Detached Element.querySelector: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type
+PASS Detached Element.querySelectorAll: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type
+PASS Detached Element.querySelector: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type
+PASS Detached Element.querySelectorAll: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type
+PASS Detached Element.querySelector: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type
+PASS Detached Element.querySelectorAll: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type
+PASS Detached Element.querySelector: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type
+PASS Detached Element.querySelectorAll: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type
+PASS Detached Element.querySelector: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type
+PASS Detached Element.querySelectorAll: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type
+PASS Detached Element.querySelector: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type
+PASS Detached Element.querySelectorAll: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child
+PASS Detached Element.querySelector: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child
+PASS Detached Element.querySelectorAll: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child
+PASS Detached Element.querySelector: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child
+PASS Detached Element.querySelectorAll: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child
+PASS Detached Element.querySelector: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child
+PASS Detached Element.querySelectorAll: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child
+PASS Detached Element.querySelector: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child
+PASS Detached Element.querySelectorAll: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child
+PASS Detached Element.querySelector: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child
+PASS Detached Element.querySelectorAll: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child
+PASS Detached Element.querySelector: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child
+PASS Detached Element.querySelectorAll: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child
+PASS Detached Element.querySelector: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child
+PASS Detached Element.querySelectorAll: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child
+PASS Detached Element.querySelector: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child
+PASS Detached Element.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type
+PASS Detached Element.querySelector: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type
+PASS Detached Element.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type
+PASS Detached Element.querySelector: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type
+PASS Detached Element.querySelectorAll: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty
+PASS Detached Element.querySelector: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty
+PASS Detached Element.querySelectorAll: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty
+PASS Detached Element.querySelector: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty
+PASS Detached Element.querySelectorAll: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited
+PASS Detached Element.querySelector: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited
+PASS Detached Element.querySelectorAll: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited
+PASS Detached Element.querySelector: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited
+PASS Detached Element.querySelectorAll: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited
+PASS Detached Element.querySelector: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited
+PASS Detached Element.querySelectorAll: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target
+PASS Detached Element.querySelector: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target
+PASS Detached Element.querySelectorAll: :lang pseudo-class selector, not matching element with no inherited language: #pseudo-lang-div1:lang(en)
+PASS Detached Element.querySelector: :lang pseudo-class selector, not matching element with no inherited language: #pseudo-lang-div1:lang(en)
+PASS Detached Element.querySelectorAll: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)
+PASS Detached Element.querySelector: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)
+PASS Detached Element.querySelectorAll: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)
+PASS Detached Element.querySelector: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)
+PASS Detached Element.querySelectorAll: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)
+PASS Detached Element.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)
+PASS Detached Element.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled
+PASS Detached Element.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled
+PASS Detached Element.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled
+PASS Detached Element.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled
+PASS Detached Element.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked
+PASS Detached Element.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked
+PASS Detached Element.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div)
+PASS Detached Element.querySelector: :not pseudo-class selector, matching : #not>:not(div)
+PASS Detached Element.querySelectorAll: :not pseudo-class selector, matching : #not * :not(:first-child)
+PASS Detached Element.querySelector: :not pseudo-class selector, matching : #not * :not(:first-child)
+PASS Detached Element.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*)
+PASS Detached Element.querySelector: :not pseudo-class selector, matching nothing: :not(*)
+PASS Detached Element.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*)
+PASS Detached Element.querySelector: :not pseudo-class selector, matching nothing: :not(*|*)
+PASS Detached Element.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line
+PASS Detached Element.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line
+PASS Detached Element.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line
+PASS Detached Element.querySelector: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line
+PASS Detached Element.querySelectorAll: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter
+PASS Detached Element.querySelector: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter
+PASS Detached Element.querySelectorAll: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter
+PASS Detached Element.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter
+PASS Detached Element.querySelectorAll: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before
+PASS Detached Element.querySelector: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before
+PASS Detached Element.querySelectorAll: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before
+PASS Detached Element.querySelector: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before
+PASS Detached Element.querySelectorAll: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after
+PASS Detached Element.querySelector: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after
+PASS Detached Element.querySelectorAll: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after
+PASS Detached Element.querySelector: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after
+PASS Detached Element.querySelectorAll: Class selector, matching element with specified class: .class-p
+PASS Detached Element.querySelector: Class selector, matching element with specified class: .class-p
+PASS Detached Element.querySelectorAll: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana
+PASS Detached Element.querySelector: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana
+PASS Detached Element.querySelectorAll: Class Selector, chained, with type selector: div.apple.banana.orange
+PASS Detached Element.querySelector: Class Selector, chained, with type selector: div.apple.banana.orange
+PASS Detached Element.querySelectorAll: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi
+PASS Detached Element.querySelector: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi
+PASS Detached Element.querySelectorAll: Class selector, matching multiple elements with class value using non-ASCII characters: .台北
+PASS Detached Element.querySelector: Class selector, matching multiple elements with class value using non-ASCII characters: .台北
+PASS Detached Element.querySelectorAll: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北
+PASS Detached Element.querySelector: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北
+PASS Detached Element.querySelectorAll: Class selector, matching element with class with escaped character: .foo\:bar
+PASS Detached Element.querySelector: Class selector, matching element with class with escaped character: .foo\:bar
+PASS Detached Element.querySelectorAll: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar
+PASS Detached Element.querySelector: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar
+PASS Detached Element.querySelectorAll: ID selector, matching element with specified id: #id #id-div1
+PASS Detached Element.querySelector: ID selector, matching element with specified id: #id #id-div1
+PASS Detached Element.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div1
+PASS Detached Element.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div1
+PASS Detached Element.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div2
+PASS Detached Element.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div2
+PASS Detached Element.querySelectorAll: ID Selector, chained, with type selector: div#id-div1, div#id-div2
+PASS Detached Element.querySelector: ID Selector, chained, with type selector: div#id-div1, div#id-div2
+PASS Detached Element.querySelectorAll: ID selector, not matching non-existent descendant: #id #none
+PASS Detached Element.querySelector: ID selector, not matching non-existent descendant: #id #none
+PASS Detached Element.querySelectorAll: ID selector, not matching non-existent ancestor: #none #id-div1
+PASS Detached Element.querySelector: ID selector, not matching non-existent ancestor: #none #id-div1
+PASS Detached Element.querySelectorAll: ID selector, matching multiple elements with duplicate id: #id-li-duplicate
+PASS Detached Element.querySelector: ID selector, matching multiple elements with duplicate id: #id-li-duplicate
+PASS Detached Element.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北Táiběi
+PASS Detached Element.querySelector: ID selector, matching id value using non-ASCII characters: #台北Táiběi
+PASS Detached Element.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北
+PASS Detached Element.querySelector: ID selector, matching id value using non-ASCII characters: #台北
+PASS Detached Element.querySelectorAll: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北
+PASS Detached Element.querySelector: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北
+PASS Detached Element.querySelectorAll: ID selector, matching element with id with escaped character: #\#foo\:bar
+PASS Detached Element.querySelector: ID selector, matching element with id with escaped character: #\#foo\:bar
+PASS Detached Element.querySelectorAll: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar
+PASS Detached Element.querySelector: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar
+PASS Detached Element.querySelectorAll: Namespace selector, matching element with any namespace: #any-namespace *|div
+PASS Detached Element.querySelector: Namespace selector, matching element with any namespace: #any-namespace *|div
+FAIL Detached Element.querySelectorAll: Namespace selector, matching div elements in no namespace only: #no-namespace |div assert_equals: The method should return the expected number of matches. expected 1 but got 4
+FAIL Detached Element.querySelector: Namespace selector, matching div elements in no namespace only: #no-namespace |div assert_equals: The method should return the first match. expected "no-namespace-div3" but got "no-namespace-div1"
+FAIL Detached Element.querySelectorAll: Namespace selector, matching any elements in no namespace only: #no-namespace |* assert_equals: The method should return the expected number of matches. expected 1 but got 4
+FAIL Detached Element.querySelector: Namespace selector, matching any elements in no namespace only: #no-namespace |* assert_equals: The method should return the first match. expected "no-namespace-div3" but got "no-namespace-div1"
+PASS Detached Element.querySelectorAll: Descendant combinator, matching element that is a descendant of an element with id: #descendant div
+PASS Detached Element.querySelector: Descendant combinator, matching element that is a descendant of an element with id: #descendant div
+PASS Detached Element.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1
+PASS Detached Element.querySelector: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1
+PASS Detached Element.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2
+PASS Detached Element.querySelector: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2
+PASS Detached Element.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2
+PASS Detached Element.querySelector: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2
+PASS Detached Element.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3
+PASS Detached Element.querySelector: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3
+PASS Detached Element.querySelectorAll: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4
+PASS Detached Element.querySelector: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4
+PASS Detached Element.querySelectorAll: Descendant combinator, whitespace characters: #descendant        
+#descendant-div2
+PASS Detached Element.querySelector: Descendant combinator, whitespace characters: #descendant        
+#descendant-div2
+PASS Detached Element.querySelectorAll: Child combinator, matching element that is a child of an element with id: #child>div
+PASS Detached Element.querySelector: Child combinator, matching element that is a child of an element with id: #child>div
+PASS Detached Element.querySelectorAll: Child combinator, matching element with id that is a child of an element: div>#child-div1
+PASS Detached Element.querySelector: Child combinator, matching element with id that is a child of an element: div>#child-div1
+PASS Detached Element.querySelectorAll: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1
+PASS Detached Element.querySelector: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1
+PASS Detached Element.querySelectorAll: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2
+PASS Detached Element.querySelector: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2
+PASS Detached Element.querySelectorAll: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2
+PASS Detached Element.querySelector: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2
+PASS Detached Element.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3
+PASS Detached Element.querySelector: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3
+PASS Detached Element.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3
+PASS Detached Element.querySelector: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3
+PASS Detached Element.querySelectorAll: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3
+PASS Detached Element.querySelector: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3
+PASS Detached Element.querySelectorAll: Child combinator, surrounded by whitespace: #child-div1        
+>        
+#child-div2
+PASS Detached Element.querySelector: Child combinator, surrounded by whitespace: #child-div1        
+>        
+#child-div2
+PASS Detached Element.querySelectorAll: Child combinator, whitespace after: #child-div1>        
+#child-div2
+PASS Detached Element.querySelector: Child combinator, whitespace after: #child-div1>        
+#child-div2
+PASS Detached Element.querySelectorAll: Child combinator, whitespace before: #child-div1        
+>#child-div2
+PASS Detached Element.querySelector: Child combinator, whitespace before: #child-div1        
+>#child-div2
+PASS Detached Element.querySelectorAll: Child combinator, no whitespace: #child-div1>#child-div2
+PASS Detached Element.querySelector: Child combinator, no whitespace: #child-div1>#child-div2
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div
+PASS Detached Element.querySelector: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4
+PASS Detached Element.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4
+PASS Detached Element.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4
+PASS Detached Element.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4
+PASS Detached Element.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p
+PASS Detached Element.querySelector: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1
+PASS Detached Element.querySelector: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2        
++        
+#adjacent-p3
+PASS Detached Element.querySelector: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2        
++        
+#adjacent-p3
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, whitespace after: #adjacent-p2+        
+#adjacent-p3
+PASS Detached Element.querySelector: Adjacent sibling combinator, whitespace after: #adjacent-p2+        
+#adjacent-p3
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, whitespace before: #adjacent-p2        
++#adjacent-p3
+PASS Detached Element.querySelector: Adjacent sibling combinator, whitespace before: #adjacent-p2        
++#adjacent-p3
+PASS Detached Element.querySelectorAll: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3
+PASS Detached Element.querySelector: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3
+PASS Detached Element.querySelectorAll: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div
+PASS Detached Element.querySelector: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div
+PASS Detached Element.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4
+PASS Detached Element.querySelector: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4
+PASS Detached Element.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4
+PASS Detached Element.querySelector: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4
+PASS Detached Element.querySelectorAll: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div
+PASS Detached Element.querySelector: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div
+PASS Detached Element.querySelectorAll: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p
+PASS Detached Element.querySelector: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p
+PASS Detached Element.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div
+PASS Detached Element.querySelector: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div
+PASS Detached Element.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1
+PASS Detached Element.querySelector: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1
+PASS Detached Element.querySelectorAll: General sibling combinator, surrounded by whitespace: #sibling-p2        
+~        
+#sibling-p3
+PASS Detached Element.querySelector: General sibling combinator, surrounded by whitespace: #sibling-p2        
+~        
+#sibling-p3
+PASS Detached Element.querySelectorAll: General sibling combinator, whitespace after: #sibling-p2~        
+#sibling-p3
+PASS Detached Element.querySelector: General sibling combinator, whitespace after: #sibling-p2~        
+#sibling-p3
+PASS Detached Element.querySelectorAll: General sibling combinator, whitespace before: #sibling-p2        
+~#sibling-p3
+PASS Detached Element.querySelector: General sibling combinator, whitespace before: #sibling-p2        
+~#sibling-p3
+PASS Detached Element.querySelectorAll: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3
+PASS Detached Element.querySelector: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3
+PASS Detached Element.querySelectorAll: Syntax, group of selectors separator, surrounded by whitespace: #group em        
+
+,        
+
+#group strong
+PASS Detached Element.querySelector: Syntax, group of selectors separator, surrounded by whitespace: #group em        
+
+,        
+
+#group strong
+PASS Detached Element.querySelectorAll: Syntax, group of selectors separator, whitespace after: #group em,        
+#group strong
+PASS Detached Element.querySelector: Syntax, group of selectors separator, whitespace after: #group em,        
+#group strong
+PASS Detached Element.querySelectorAll: Syntax, group of selectors separator, whitespace before: #group em        
+,#group strong
+PASS Detached Element.querySelector: Syntax, group of selectors separator, whitespace before: #group em        
+,#group strong
+PASS Detached Element.querySelectorAll: Syntax, group of selectors separator, no whitespace: #group em,#group strong
+PASS Detached Element.querySelector: Syntax, group of selectors separator, no whitespace: #group em,#group strong
+PASS Fragment.querySelectorAll: Type selector, matching html element: html
+PASS Fragment.querySelector: Type selector, matching html element: html
+PASS Fragment.querySelectorAll: Type selector, matching body element: body
+PASS Fragment.querySelector: Type selector, matching body element: body
+PASS Fragment.querySelectorAll: Universal selector, matching all children of element with specified ID: #universal>*
+PASS Fragment.querySelector: Universal selector, matching all children of element with specified ID: #universal>*
+PASS Fragment.querySelectorAll: Universal selector, matching all grandchildren of element with specified ID: #universal>*>*
+PASS Fragment.querySelector: Universal selector, matching all grandchildren of element with specified ID: #universal>*>*
+PASS Fragment.querySelectorAll: Universal selector, matching all children of empty element with specified ID: #empty>*
+PASS Fragment.querySelector: Universal selector, matching all children of empty element with specified ID: #empty>*
+PASS Fragment.querySelectorAll: Universal selector, matching all descendants of element with specified ID: #universal *
+PASS Fragment.querySelector: Universal selector, matching all descendants of element with specified ID: #universal *
+PASS Fragment.querySelectorAll: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align]
+PASS Fragment.querySelector: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align]
+PASS Fragment.querySelectorAll: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align]
+PASS Fragment.querySelector: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align]
+PASS Fragment.querySelectorAll: Attribute presence selector, not matching title attribute, case sensitivity: #attr-presence [TiTlE]
+PASS Fragment.querySelector: Attribute presence selector, not matching title attribute, case sensitivity: #attr-presence [TiTlE]
+PASS Fragment.querySelectorAll: Attribute presence selector, matching custom data-* attribute: [data-attr-presence]
+PASS Fragment.querySelector: Attribute presence selector, matching custom data-* attribute: [data-attr-presence]
+PASS Fragment.querySelectorAll: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align]
+PASS Fragment.querySelector: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align]
+PASS Fragment.querySelectorAll: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文]
+PASS Fragment.querySelector: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文]
+PASS Fragment.querySelectorAll: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected]
+PASS Fragment.querySelector: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected]
+PASS Fragment.querySelectorAll: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected]
+PASS Fragment.querySelector: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected]
+PASS Fragment.querySelectorAll: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected]
+PASS Fragment.querySelector: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected]
+PASS Fragment.querySelectorAll: Attribute value selector, matching align attribute with value: #attr-value [align="center"]
+PASS Fragment.querySelector: Attribute value selector, matching align attribute with value: #attr-value [align="center"]
+PASS Fragment.querySelectorAll: Attribute value selector, matching align attribute with empty value: #attr-value [align=""]
+PASS Fragment.querySelector: Attribute value selector, matching align attribute with empty value: #attr-value [align=""]
+PASS Fragment.querySelectorAll: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"]
+PASS Fragment.querySelector: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"]
+PASS Fragment.querySelectorAll: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"]
+PASS Fragment.querySelector: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"]
+PASS Fragment.querySelectorAll: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"]
+PASS Fragment.querySelector: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"]
+PASS Fragment.querySelectorAll: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"]
+PASS Fragment.querySelector: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"]
+PASS Fragment.querySelectorAll: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS Fragment.querySelector: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS Fragment.querySelectorAll: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS Fragment.querySelector: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS Fragment.querySelectorAll: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS Fragment.querySelector: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS Fragment.querySelectorAll: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文]
+PASS Fragment.querySelector: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文]
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"]
+PASS Fragment.querySelector: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"]
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""]
+PASS Fragment.querySelector: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""]
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"]
+PASS Fragment.querySelector: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"]
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"]
+PASS Fragment.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"]
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"]
+PASS Fragment.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"]
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS Fragment.querySelector: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS Fragment.querySelector: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS Fragment.querySelector: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"]
+PASS Fragment.querySelector: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"]
+PASS Fragment.querySelectorAll: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文]
+PASS Fragment.querySelector: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文]
+PASS Fragment.querySelectorAll: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"]
+PASS Fragment.querySelector: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"]
+PASS Fragment.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"]
+PASS Fragment.querySelector: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"]
+PASS Fragment.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"]
+PASS Fragment.querySelector: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"]
+PASS Fragment.querySelectorAll: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"]
+PASS Fragment.querySelector: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"]
+PASS Fragment.querySelectorAll: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"]
+PASS Fragment.querySelector: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"]
+PASS Fragment.querySelectorAll: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"]
+PASS Fragment.querySelector: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"]
+PASS Fragment.querySelectorAll: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple]
+PASS Fragment.querySelector: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple]
+PASS Fragment.querySelectorAll: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple']
+PASS Fragment.querySelector: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple']
+PASS Fragment.querySelectorAll: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"]
+PASS Fragment.querySelector: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"]
+PASS Fragment.querySelectorAll: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple]
+PASS Fragment.querySelector: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple]
+PASS Fragment.querySelectorAll: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"]
+PASS Fragment.querySelector: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"]
+PASS Fragment.querySelectorAll: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"]
+PASS Fragment.querySelector: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"]
+PASS Fragment.querySelectorAll: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple]
+PASS Fragment.querySelector: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple]
+PASS Fragment.querySelectorAll: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple ']
+PASS Fragment.querySelector: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple ']
+PASS Fragment.querySelectorAll: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "]
+PASS Fragment.querySelector: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "]
+PASS Fragment.querySelectorAll: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ]
+PASS Fragment.querySelector: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ]
+PASS Fragment.querySelectorAll: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"]
+PASS Fragment.querySelector: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"]
+PASS Fragment.querySelectorAll: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"]
+PASS Fragment.querySelector: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"]
+PASS Fragment.querySelectorAll: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."]
+PASS Fragment.querySelector: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."]
+PASS Fragment.querySelectorAll: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"]
+PASS Fragment.querySelector: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"]
+PASS Fragment.querySelectorAll: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"]
+PASS Fragment.querySelector: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"]
+PASS Fragment.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple']
+PASS Fragment.querySelector: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple']
+PASS Fragment.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange ']
+PASS Fragment.querySelector: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange ']
+PASS Fragment.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora']
+PASS Fragment.querySelector: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora']
+PASS Fragment.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"]
+PASS Fragment.querySelector: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"]
+PASS Fragment.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "]
+PASS Fragment.querySelector: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "]
+PASS Fragment.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"]
+PASS Fragment.querySelector: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"]
+PASS Fragment.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple]
+PASS Fragment.querySelector: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple]
+PASS Fragment.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ]
+PASS Fragment.querySelector: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ]
+PASS Fragment.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ]
+PASS Fragment.querySelector: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ]
+PASS Fragment.querySelectorAll: :root pseudo-class selector, not matching document root element: :root
+PASS Fragment.querySelector: :root pseudo-class selector, not matching document root element: :root
+PASS Fragment.querySelectorAll: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3)
+PASS Fragment.querySelector: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3)
+PASS Fragment.querySelectorAll: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n)
+PASS Fragment.querySelector: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n)
+PASS Fragment.querySelectorAll: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4)
+PASS Fragment.querySelector: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4)
+PASS Fragment.querySelectorAll: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1)
+PASS Fragment.querySelector: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1)
+PASS Fragment.querySelectorAll: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3)
+PASS Fragment.querySelector: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3)
+PASS Fragment.querySelectorAll: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n)
+PASS Fragment.querySelector: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n)
+PASS Fragment.querySelectorAll: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4)
+PASS Fragment.querySelector: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4)
+PASS Fragment.querySelectorAll: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS Fragment.querySelector: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS Fragment.querySelectorAll: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3)
+PASS Fragment.querySelector: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3)
+PASS Fragment.querySelectorAll: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n)
+PASS Fragment.querySelector: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n)
+PASS Fragment.querySelectorAll: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS Fragment.querySelector: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS Fragment.querySelectorAll: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS Fragment.querySelector: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS Fragment.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS Fragment.querySelector: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS Fragment.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS Fragment.querySelector: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS Fragment.querySelectorAll: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type
+PASS Fragment.querySelector: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type
+PASS Fragment.querySelectorAll: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type
+PASS Fragment.querySelector: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type
+PASS Fragment.querySelectorAll: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type
+PASS Fragment.querySelector: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type
+PASS Fragment.querySelectorAll: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type
+PASS Fragment.querySelector: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type
+PASS Fragment.querySelectorAll: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type
+PASS Fragment.querySelector: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type
+PASS Fragment.querySelectorAll: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type
+PASS Fragment.querySelector: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type
+PASS Fragment.querySelectorAll: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child
+PASS Fragment.querySelector: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child
+PASS Fragment.querySelectorAll: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child
+PASS Fragment.querySelector: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child
+PASS Fragment.querySelectorAll: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child
+PASS Fragment.querySelector: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child
+PASS Fragment.querySelectorAll: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child
+PASS Fragment.querySelector: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child
+PASS Fragment.querySelectorAll: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child
+PASS Fragment.querySelector: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child
+PASS Fragment.querySelectorAll: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child
+PASS Fragment.querySelector: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child
+PASS Fragment.querySelectorAll: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child
+PASS Fragment.querySelector: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child
+PASS Fragment.querySelectorAll: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child
+PASS Fragment.querySelector: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child
+PASS Fragment.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type
+PASS Fragment.querySelector: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type
+PASS Fragment.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type
+PASS Fragment.querySelector: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type
+PASS Fragment.querySelectorAll: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty
+PASS Fragment.querySelector: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty
+PASS Fragment.querySelectorAll: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty
+PASS Fragment.querySelector: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty
+PASS Fragment.querySelectorAll: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited
+PASS Fragment.querySelector: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited
+PASS Fragment.querySelectorAll: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited
+PASS Fragment.querySelector: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited
+PASS Fragment.querySelectorAll: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited
+PASS Fragment.querySelector: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited
+PASS Fragment.querySelectorAll: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target
+PASS Fragment.querySelector: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target
+PASS Fragment.querySelectorAll: :lang pseudo-class selector, not matching element with no inherited language: #pseudo-lang-div1:lang(en)
+PASS Fragment.querySelector: :lang pseudo-class selector, not matching element with no inherited language: #pseudo-lang-div1:lang(en)
+PASS Fragment.querySelectorAll: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)
+PASS Fragment.querySelector: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)
+PASS Fragment.querySelectorAll: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)
+PASS Fragment.querySelector: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)
+PASS Fragment.querySelectorAll: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)
+PASS Fragment.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)
+PASS Fragment.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled
+PASS Fragment.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled
+PASS Fragment.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled
+PASS Fragment.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled
+PASS Fragment.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked
+PASS Fragment.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked
+PASS Fragment.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div)
+PASS Fragment.querySelector: :not pseudo-class selector, matching : #not>:not(div)
+PASS Fragment.querySelectorAll: :not pseudo-class selector, matching : #not * :not(:first-child)
+PASS Fragment.querySelector: :not pseudo-class selector, matching : #not * :not(:first-child)
+PASS Fragment.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*)
+PASS Fragment.querySelector: :not pseudo-class selector, matching nothing: :not(*)
+PASS Fragment.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*)
+PASS Fragment.querySelector: :not pseudo-class selector, matching nothing: :not(*|*)
+PASS Fragment.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line
+PASS Fragment.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line
+PASS Fragment.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line
+PASS Fragment.querySelector: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line
+PASS Fragment.querySelectorAll: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter
+PASS Fragment.querySelector: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter
+PASS Fragment.querySelectorAll: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter
+PASS Fragment.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter
+PASS Fragment.querySelectorAll: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before
+PASS Fragment.querySelector: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before
+PASS Fragment.querySelectorAll: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before
+PASS Fragment.querySelector: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before
+PASS Fragment.querySelectorAll: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after
+PASS Fragment.querySelector: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after
+PASS Fragment.querySelectorAll: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after
+PASS Fragment.querySelector: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after
+PASS Fragment.querySelectorAll: Class selector, matching element with specified class: .class-p
+PASS Fragment.querySelector: Class selector, matching element with specified class: .class-p
+PASS Fragment.querySelectorAll: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana
+PASS Fragment.querySelector: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana
+PASS Fragment.querySelectorAll: Class Selector, chained, with type selector: div.apple.banana.orange
+PASS Fragment.querySelector: Class Selector, chained, with type selector: div.apple.banana.orange
+PASS Fragment.querySelectorAll: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi
+PASS Fragment.querySelector: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi
+PASS Fragment.querySelectorAll: Class selector, matching multiple elements with class value using non-ASCII characters: .台北
+PASS Fragment.querySelector: Class selector, matching multiple elements with class value using non-ASCII characters: .台北
+PASS Fragment.querySelectorAll: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北
+PASS Fragment.querySelector: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北
+PASS Fragment.querySelectorAll: Class selector, matching element with class with escaped character: .foo\:bar
+PASS Fragment.querySelector: Class selector, matching element with class with escaped character: .foo\:bar
+PASS Fragment.querySelectorAll: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar
+PASS Fragment.querySelector: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar
+PASS Fragment.querySelectorAll: ID selector, matching element with specified id: #id #id-div1
+PASS Fragment.querySelector: ID selector, matching element with specified id: #id #id-div1
+PASS Fragment.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div1
+PASS Fragment.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div1
+PASS Fragment.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div2
+PASS Fragment.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div2
+PASS Fragment.querySelectorAll: ID Selector, chained, with type selector: div#id-div1, div#id-div2
+PASS Fragment.querySelector: ID Selector, chained, with type selector: div#id-div1, div#id-div2
+PASS Fragment.querySelectorAll: ID selector, not matching non-existent descendant: #id #none
+PASS Fragment.querySelector: ID selector, not matching non-existent descendant: #id #none
+PASS Fragment.querySelectorAll: ID selector, not matching non-existent ancestor: #none #id-div1
+PASS Fragment.querySelector: ID selector, not matching non-existent ancestor: #none #id-div1
+PASS Fragment.querySelectorAll: ID selector, matching multiple elements with duplicate id: #id-li-duplicate
+PASS Fragment.querySelector: ID selector, matching multiple elements with duplicate id: #id-li-duplicate
+PASS Fragment.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北Táiběi
+PASS Fragment.querySelector: ID selector, matching id value using non-ASCII characters: #台北Táiběi
+PASS Fragment.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北
+PASS Fragment.querySelector: ID selector, matching id value using non-ASCII characters: #台北
+PASS Fragment.querySelectorAll: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北
+PASS Fragment.querySelector: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北
+PASS Fragment.querySelectorAll: ID selector, matching element with id with escaped character: #\#foo\:bar
+PASS Fragment.querySelector: ID selector, matching element with id with escaped character: #\#foo\:bar
+PASS Fragment.querySelectorAll: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar
+PASS Fragment.querySelector: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar
+PASS Fragment.querySelectorAll: Namespace selector, matching element with any namespace: #any-namespace *|div
+PASS Fragment.querySelector: Namespace selector, matching element with any namespace: #any-namespace *|div
+FAIL Fragment.querySelectorAll: Namespace selector, matching div elements in no namespace only: #no-namespace |div assert_equals: The method should return the expected number of matches. expected 1 but got 4
+FAIL Fragment.querySelector: Namespace selector, matching div elements in no namespace only: #no-namespace |div assert_equals: The method should return the first match. expected "no-namespace-div3" but got "no-namespace-div1"
+FAIL Fragment.querySelectorAll: Namespace selector, matching any elements in no namespace only: #no-namespace |* assert_equals: The method should return the expected number of matches. expected 1 but got 4
+FAIL Fragment.querySelector: Namespace selector, matching any elements in no namespace only: #no-namespace |* assert_equals: The method should return the first match. expected "no-namespace-div3" but got "no-namespace-div1"
+PASS Fragment.querySelectorAll: Descendant combinator, matching element that is a descendant of an element with id: #descendant div
+PASS Fragment.querySelector: Descendant combinator, matching element that is a descendant of an element with id: #descendant div
+PASS Fragment.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1
+PASS Fragment.querySelector: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1
+PASS Fragment.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2
+PASS Fragment.querySelector: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2
+PASS Fragment.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2
+PASS Fragment.querySelector: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2
+PASS Fragment.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3
+PASS Fragment.querySelector: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3
+PASS Fragment.querySelectorAll: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4
+PASS Fragment.querySelector: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4
+PASS Fragment.querySelectorAll: Descendant combinator, whitespace characters: #descendant        
+#descendant-div2
+PASS Fragment.querySelector: Descendant combinator, whitespace characters: #descendant        
+#descendant-div2
+PASS Fragment.querySelectorAll: Child combinator, matching element that is a child of an element with id: #child>div
+PASS Fragment.querySelector: Child combinator, matching element that is a child of an element with id: #child>div
+PASS Fragment.querySelectorAll: Child combinator, matching element with id that is a child of an element: div>#child-div1
+PASS Fragment.querySelector: Child combinator, matching element with id that is a child of an element: div>#child-div1
+PASS Fragment.querySelectorAll: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1
+PASS Fragment.querySelector: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1
+PASS Fragment.querySelectorAll: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2
+PASS Fragment.querySelector: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2
+PASS Fragment.querySelectorAll: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2
+PASS Fragment.querySelector: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2
+PASS Fragment.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3
+PASS Fragment.querySelector: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3
+PASS Fragment.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3
+PASS Fragment.querySelector: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3
+PASS Fragment.querySelectorAll: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3
+PASS Fragment.querySelector: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3
+PASS Fragment.querySelectorAll: Child combinator, surrounded by whitespace: #child-div1        
+>        
+#child-div2
+PASS Fragment.querySelector: Child combinator, surrounded by whitespace: #child-div1        
+>        
+#child-div2
+PASS Fragment.querySelectorAll: Child combinator, whitespace after: #child-div1>        
+#child-div2
+PASS Fragment.querySelector: Child combinator, whitespace after: #child-div1>        
+#child-div2
+PASS Fragment.querySelectorAll: Child combinator, whitespace before: #child-div1        
+>#child-div2
+PASS Fragment.querySelector: Child combinator, whitespace before: #child-div1        
+>#child-div2
+PASS Fragment.querySelectorAll: Child combinator, no whitespace: #child-div1>#child-div2
+PASS Fragment.querySelector: Child combinator, no whitespace: #child-div1>#child-div2
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div
+PASS Fragment.querySelector: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4
+PASS Fragment.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4
+PASS Fragment.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4
+PASS Fragment.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4
+PASS Fragment.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p
+PASS Fragment.querySelector: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1
+PASS Fragment.querySelector: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2        
++        
+#adjacent-p3
+PASS Fragment.querySelector: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2        
++        
+#adjacent-p3
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, whitespace after: #adjacent-p2+        
+#adjacent-p3
+PASS Fragment.querySelector: Adjacent sibling combinator, whitespace after: #adjacent-p2+        
+#adjacent-p3
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, whitespace before: #adjacent-p2        
++#adjacent-p3
+PASS Fragment.querySelector: Adjacent sibling combinator, whitespace before: #adjacent-p2        
++#adjacent-p3
+PASS Fragment.querySelectorAll: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3
+PASS Fragment.querySelector: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3
+PASS Fragment.querySelectorAll: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div
+PASS Fragment.querySelector: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div
+PASS Fragment.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4
+PASS Fragment.querySelector: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4
+PASS Fragment.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4
+PASS Fragment.querySelector: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4
+PASS Fragment.querySelectorAll: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div
+PASS Fragment.querySelector: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div
+PASS Fragment.querySelectorAll: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p
+PASS Fragment.querySelector: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p
+PASS Fragment.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div
+PASS Fragment.querySelector: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div
+PASS Fragment.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1
+PASS Fragment.querySelector: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1
+PASS Fragment.querySelectorAll: General sibling combinator, surrounded by whitespace: #sibling-p2        
+~        
+#sibling-p3
+PASS Fragment.querySelector: General sibling combinator, surrounded by whitespace: #sibling-p2        
+~        
+#sibling-p3
+PASS Fragment.querySelectorAll: General sibling combinator, whitespace after: #sibling-p2~        
+#sibling-p3
+PASS Fragment.querySelector: General sibling combinator, whitespace after: #sibling-p2~        
+#sibling-p3
+PASS Fragment.querySelectorAll: General sibling combinator, whitespace before: #sibling-p2        
+~#sibling-p3
+PASS Fragment.querySelector: General sibling combinator, whitespace before: #sibling-p2        
+~#sibling-p3
+PASS Fragment.querySelectorAll: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3
+PASS Fragment.querySelector: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3
+PASS Fragment.querySelectorAll: Syntax, group of selectors separator, surrounded by whitespace: #group em        
+
+,        
+
+#group strong
+PASS Fragment.querySelector: Syntax, group of selectors separator, surrounded by whitespace: #group em        
+
+,        
+
+#group strong
+PASS Fragment.querySelectorAll: Syntax, group of selectors separator, whitespace after: #group em,        
+#group strong
+PASS Fragment.querySelector: Syntax, group of selectors separator, whitespace after: #group em,        
+#group strong
+PASS Fragment.querySelectorAll: Syntax, group of selectors separator, whitespace before: #group em        
+,#group strong
+PASS Fragment.querySelector: Syntax, group of selectors separator, whitespace before: #group em        
+,#group strong
+PASS Fragment.querySelectorAll: Syntax, group of selectors separator, no whitespace: #group em,#group strong
+PASS Fragment.querySelector: Syntax, group of selectors separator, no whitespace: #group em,#group strong
+PASS In-document Element.querySelectorAll: Type selector, matching html element: html
+PASS In-document Element.querySelector: Type selector, matching html element: html
+PASS In-document Element.querySelectorAll: Type selector, matching body element: body
+PASS In-document Element.querySelector: Type selector, matching body element: body
+PASS In-document Element.querySelectorAll: Universal selector, matching all children of element with specified ID: #universal>*
+PASS In-document Element.querySelector: Universal selector, matching all children of element with specified ID: #universal>*
+PASS In-document Element.querySelectorAll: Universal selector, matching all grandchildren of element with specified ID: #universal>*>*
+PASS In-document Element.querySelector: Universal selector, matching all grandchildren of element with specified ID: #universal>*>*
+PASS In-document Element.querySelectorAll: Universal selector, matching all children of empty element with specified ID: #empty>*
+PASS In-document Element.querySelector: Universal selector, matching all children of empty element with specified ID: #empty>*
+PASS In-document Element.querySelectorAll: Universal selector, matching all descendants of element with specified ID: #universal *
+PASS In-document Element.querySelector: Universal selector, matching all descendants of element with specified ID: #universal *
+PASS In-document Element.querySelectorAll: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align]
+PASS In-document Element.querySelector: Attribute presence selector, matching align attribute with value: .attr-presence-div1[align]
+PASS In-document Element.querySelectorAll: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align]
+PASS In-document Element.querySelector: Attribute presence selector, matching align attribute with empty value: .attr-presence-div2[align]
+PASS In-document Element.querySelectorAll: Attribute presence selector, not matching title attribute, case sensitivity: #attr-presence [TiTlE]
+PASS In-document Element.querySelector: Attribute presence selector, not matching title attribute, case sensitivity: #attr-presence [TiTlE]
+PASS In-document Element.querySelectorAll: Attribute presence selector, matching custom data-* attribute: [data-attr-presence]
+PASS In-document Element.querySelector: Attribute presence selector, matching custom data-* attribute: [data-attr-presence]
+PASS In-document Element.querySelectorAll: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align]
+PASS In-document Element.querySelector: Attribute presence selector, not matching attribute with similar name: .attr-presence-div3[align], .attr-presence-div4[align]
+PASS In-document Element.querySelectorAll: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文]
+PASS In-document Element.querySelector: Attribute presence selector, matching attribute with non-ASCII characters: ul[data-中文]
+PASS In-document Element.querySelectorAll: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected]
+PASS In-document Element.querySelector: Attribute presence selector, not matching default option without selected attribute: #attr-presence-select1 option[selected]
+PASS In-document Element.querySelectorAll: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected]
+PASS In-document Element.querySelector: Attribute presence selector, matching option with selected attribute: #attr-presence-select2 option[selected]
+PASS In-document Element.querySelectorAll: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected]
+PASS In-document Element.querySelector: Attribute presence selector, matching multiple options with selected attributes: #attr-presence-select3 option[selected]
+PASS In-document Element.querySelectorAll: Attribute value selector, matching align attribute with value: #attr-value [align="center"]
+PASS In-document Element.querySelector: Attribute value selector, matching align attribute with value: #attr-value [align="center"]
+PASS In-document Element.querySelectorAll: Attribute value selector, matching align attribute with empty value: #attr-value [align=""]
+PASS In-document Element.querySelector: Attribute value selector, matching align attribute with empty value: #attr-value [align=""]
+PASS In-document Element.querySelectorAll: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"]
+PASS In-document Element.querySelector: Attribute value selector, not matching align attribute with partial value: #attr-value [align="c"]
+PASS In-document Element.querySelectorAll: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"]
+PASS In-document Element.querySelector: Attribute value selector, not matching align attribute with incorrect value: #attr-value [align="centera"]
+PASS In-document Element.querySelectorAll: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"]
+PASS In-document Element.querySelector: Attribute value selector, matching custom data-* attribute with unicode escaped value: [data-attr-value="\e9"]
+PASS In-document Element.querySelectorAll: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"]
+PASS In-document Element.querySelector: Attribute value selector, matching custom data-* attribute with escaped character: [data-attr-value_foo="\e9"]
+PASS In-document Element.querySelectorAll: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS In-document Element.querySelector: Attribute value selector with single-quoted value, matching multiple inputs with type attributes: #attr-value input[type='hidden'],#attr-value input[type='radio']
+PASS In-document Element.querySelectorAll: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS In-document Element.querySelector: Attribute value selector with double-quoted value, matching multiple inputs with type attributes: #attr-value input[type="hidden"],#attr-value input[type='radio']
+PASS In-document Element.querySelectorAll: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS In-document Element.querySelector: Attribute value selector with unquoted value, matching multiple inputs with type attributes: #attr-value input[type=hidden],#attr-value input[type=radio]
+PASS In-document Element.querySelectorAll: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文]
+PASS In-document Element.querySelector: Attribute value selector, matching attribute with value using non-ASCII characters: [data-attr-value=中文]
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"]
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector, matching class attribute with value: #attr-whitespace [class~="div1"]
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""]
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector, not matching class attribute with empty value: #attr-whitespace [class~=""]
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"]
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector, not matching class attribute with partial value: [data-attr-whitespace~="div"]
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"]
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value: [data-attr-whitespace~="\0000e9"]
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"]
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character: [data-attr-whitespace_foo~="\e9"]
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~="bookmark"],#attr-whitespace a[rel~='nofollow']
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes: #attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"]
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector with double-quoted value, not matching value with space: #attr-whitespace a[rel~="book mark"]
+PASS In-document Element.querySelectorAll: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文]
+PASS In-document Element.querySelector: Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters: #attr-whitespace [title~=中文]
+PASS In-document Element.querySelectorAll: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"]
+PASS In-document Element.querySelector: Attribute hyphen-separated list selector, not matching unspecified lang attribute: #attr-hyphen-div1[lang|="en"]
+PASS In-document Element.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"]
+PASS In-document Element.querySelector: Attribute hyphen-separated list selector, matching lang attribute with exact value: #attr-hyphen-div2[lang|="fr"]
+PASS In-document Element.querySelectorAll: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"]
+PASS In-document Element.querySelector: Attribute hyphen-separated list selector, matching lang attribute with partial value: #attr-hyphen-div3[lang|="en"]
+PASS In-document Element.querySelectorAll: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"]
+PASS In-document Element.querySelector: Attribute hyphen-separated list selector, not matching incorrect value: #attr-hyphen-div4[lang|="es-AR"]
+PASS In-document Element.querySelectorAll: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"]
+PASS In-document Element.querySelector: Attribute begins with selector, matching href attributes beginning with specified substring: #attr-begins a[href^="http://www"]
+PASS In-document Element.querySelectorAll: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"]
+PASS In-document Element.querySelector: Attribute begins with selector, matching lang attributes beginning with specified substring, : #attr-begins [lang^="en-"]
+PASS In-document Element.querySelectorAll: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple]
+PASS In-document Element.querySelector: Attribute begins with selector, not matching class attribute not beginning with specified substring: #attr-begins [class^=apple]
+PASS In-document Element.querySelectorAll: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple']
+PASS In-document Element.querySelector: Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=' apple']
+PASS In-document Element.querySelectorAll: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"]
+PASS In-document Element.querySelector: Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring: #attr-begins [class^=" apple"]
+PASS In-document Element.querySelectorAll: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple]
+PASS In-document Element.querySelector: Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring: #attr-begins [class^= apple]
+PASS In-document Element.querySelectorAll: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"]
+PASS In-document Element.querySelector: Attribute ends with selector, matching href attributes ending with specified substring: #attr-ends a[href$=".org"]
+PASS In-document Element.querySelectorAll: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"]
+PASS In-document Element.querySelector: Attribute ends with selector, matching lang attributes ending with specified substring, : #attr-ends [lang$="-CH"]
+PASS In-document Element.querySelectorAll: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple]
+PASS In-document Element.querySelector: Attribute ends with selector, not matching class attribute not ending with specified substring: #attr-ends [class$=apple]
+PASS In-document Element.querySelectorAll: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple ']
+PASS In-document Element.querySelector: Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring: #attr-ends [class$='apple ']
+PASS In-document Element.querySelectorAll: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "]
+PASS In-document Element.querySelector: Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring: #attr-ends [class$="apple "]
+PASS In-document Element.querySelectorAll: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ]
+PASS In-document Element.querySelector: Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring: #attr-ends [class$=apple ]
+PASS In-document Element.querySelectorAll: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"]
+PASS In-document Element.querySelector: Attribute contains selector, matching href attributes beginning with specified substring: #attr-contains a[href*="http://www"]
+PASS In-document Element.querySelectorAll: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"]
+PASS In-document Element.querySelector: Attribute contains selector, matching href attributes ending with specified substring: #attr-contains a[href*=".org"]
+PASS In-document Element.querySelectorAll: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."]
+PASS In-document Element.querySelector: Attribute contains selector, matching href attributes containing specified substring: #attr-contains a[href*=".example."]
+PASS In-document Element.querySelectorAll: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"]
+PASS In-document Element.querySelector: Attribute contains selector, matching lang attributes beginning with specified substring, : #attr-contains [lang*="en-"]
+PASS In-document Element.querySelectorAll: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"]
+PASS In-document Element.querySelector: Attribute contains selector, matching lang attributes ending with specified substring, : #attr-contains [lang*="-CH"]
+PASS In-document Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple']
+PASS In-document Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=' apple']
+PASS In-document Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange ']
+PASS In-document Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute ending with specified substring: #attr-contains [class*='orange ']
+PASS In-document Element.querySelectorAll: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora']
+PASS In-document Element.querySelector: Attribute contains selector with single-quoted value, matching class attribute containing specified substring: #attr-contains [class*='ple banana ora']
+PASS In-document Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"]
+PASS In-document Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring: #attr-contains [class*=" apple"]
+PASS In-document Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "]
+PASS In-document Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute ending with specified substring: #attr-contains [class*="orange "]
+PASS In-document Element.querySelectorAll: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"]
+PASS In-document Element.querySelector: Attribute contains selector with double-quoted value, matching class attribute containing specified substring: #attr-contains [class*="ple banana ora"]
+PASS In-document Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple]
+PASS In-document Element.querySelector: Attribute contains selector with unquoted value, matching class attribute beginning with specified substring: #attr-contains [class*= apple]
+PASS In-document Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ]
+PASS In-document Element.querySelector: Attribute contains selector with unquoted value, matching class attribute ending with specified substring: #attr-contains [class*=orange ]
+PASS In-document Element.querySelectorAll: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ]
+PASS In-document Element.querySelector: Attribute contains selector with unquoted value, matching class attribute containing specified substring: #attr-contains [class*= banana ]
+PASS In-document Element.querySelectorAll: :root pseudo-class selector, not matching document root element: :root
+PASS In-document Element.querySelector: :root pseudo-class selector, not matching document root element: :root
+PASS In-document Element.querySelectorAll: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3)
+PASS In-document Element.querySelector: :nth-child selector, matching the third child element: #pseudo-nth-table1 :nth-child(3)
+PASS In-document Element.querySelectorAll: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n)
+PASS In-document Element.querySelector: :nth-child selector, matching every third child element: #pseudo-nth li:nth-child(3n)
+PASS In-document Element.querySelectorAll: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4)
+PASS In-document Element.querySelector: :nth-child selector, matching every second child element, starting from the fourth: #pseudo-nth li:nth-child(2n+4)
+PASS In-document Element.querySelectorAll: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1)
+PASS In-document Element.querySelector: :nth-child selector, matching every fourth child element, starting from the third: #pseudo-nth-p1 :nth-child(4n-1)
+PASS In-document Element.querySelectorAll: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3)
+PASS In-document Element.querySelector: :nth-last-child selector, matching the third last child element: #pseudo-nth-table1 :nth-last-child(3)
+PASS In-document Element.querySelectorAll: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n)
+PASS In-document Element.querySelector: :nth-last-child selector, matching every third child element from the end: #pseudo-nth li:nth-last-child(3n)
+PASS In-document Element.querySelectorAll: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4)
+PASS In-document Element.querySelector: :nth-last-child selector, matching every second child element from the end, starting from the fourth last: #pseudo-nth li:nth-last-child(2n+4)
+PASS In-document Element.querySelectorAll: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS In-document Element.querySelector: :nth-last-child selector, matching every fourth element from the end, starting from the third last: #pseudo-nth-p1 :nth-last-child(4n-1)
+PASS In-document Element.querySelectorAll: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3)
+PASS In-document Element.querySelector: :nth-of-type selector, matching the third em element: #pseudo-nth-p1 em:nth-of-type(3)
+PASS In-document Element.querySelectorAll: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n)
+PASS In-document Element.querySelector: :nth-of-type selector, matching every second element of their type: #pseudo-nth-p1 :nth-of-type(2n)
+PASS In-document Element.querySelectorAll: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS In-document Element.querySelector: :nth-of-type selector, matching every second elemetn of their type, starting from the first: #pseudo-nth-p1 span:nth-of-type(2n-1)
+PASS In-document Element.querySelectorAll: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS In-document Element.querySelector: :nth-last-of-type selector, matching the thrid last em element: #pseudo-nth-p1 em:nth-last-of-type(3)
+PASS In-document Element.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS In-document Element.querySelector: :nth-last-of-type selector, matching every second last element of their type: #pseudo-nth-p1 :nth-last-of-type(2n)
+PASS In-document Element.querySelectorAll: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS In-document Element.querySelector: :nth-last-of-type selector, matching every second last element of their type, starting from the last: #pseudo-nth-p1 span:nth-last-of-type(2n-1)
+PASS In-document Element.querySelectorAll: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type
+PASS In-document Element.querySelector: :first-of-type selector, matching the first em element: #pseudo-nth-p1 em:first-of-type
+PASS In-document Element.querySelectorAll: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type
+PASS In-document Element.querySelector: :first-of-type selector, matching the first of every type of element: #pseudo-nth-p1 :first-of-type
+PASS In-document Element.querySelectorAll: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type
+PASS In-document Element.querySelector: :first-of-type selector, matching the first td element in each table row: #pseudo-nth-table1 tr :first-of-type
+PASS In-document Element.querySelectorAll: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type
+PASS In-document Element.querySelector: :last-of-type selector, matching the last em elemnet: #pseudo-nth-p1 em:last-of-type
+PASS In-document Element.querySelectorAll: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type
+PASS In-document Element.querySelector: :last-of-type selector, matching the last of every type of element: #pseudo-nth-p1 :last-of-type
+PASS In-document Element.querySelectorAll: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type
+PASS In-document Element.querySelector: :last-of-type selector, matching the last td element in each table row: #pseudo-nth-table1 tr :last-of-type
+PASS In-document Element.querySelectorAll: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child
+PASS In-document Element.querySelector: :first-child pseudo-class selector, matching first child div element: #pseudo-first-child div:first-child
+PASS In-document Element.querySelectorAll: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child
+PASS In-document Element.querySelector: :first-child pseudo-class selector, doesn't match non-first-child elements: .pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child
+PASS In-document Element.querySelectorAll: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child
+PASS In-document Element.querySelector: :first-child pseudo-class selector, matching first-child of multiple elements: #pseudo-first-child span:first-child
+PASS In-document Element.querySelectorAll: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child
+PASS In-document Element.querySelector: :last-child pseudo-class selector, matching last child div element: #pseudo-last-child div:last-child
+PASS In-document Element.querySelectorAll: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child
+PASS In-document Element.querySelector: :last-child pseudo-class selector, doesn't match non-last-child elements: .pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child
+PASS In-document Element.querySelectorAll: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child
+PASS In-document Element.querySelector: :last-child pseudo-class selector, matching first-child of multiple elements: #pseudo-last-child span:last-child
+PASS In-document Element.querySelectorAll: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child
+PASS In-document Element.querySelector: :pseudo-only-child pseudo-class selector, matching all only-child elements: #pseudo-only :only-child
+PASS In-document Element.querySelectorAll: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child
+PASS In-document Element.querySelector: :pseudo-only-child pseudo-class selector, matching only-child em elements: #pseudo-only em:only-child
+PASS In-document Element.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type
+PASS In-document Element.querySelector: :pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type: #pseudo-only :only-of-type
+PASS In-document Element.querySelectorAll: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type
+PASS In-document Element.querySelector: :pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type: #pseudo-only em:only-of-type
+PASS In-document Element.querySelectorAll: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty
+PASS In-document Element.querySelector: :empty pseudo-class selector, matching empty p elements: #pseudo-empty p:empty
+PASS In-document Element.querySelectorAll: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty
+PASS In-document Element.querySelector: :empty pseudo-class selector, matching all empty elements: #pseudo-empty :empty
+PASS In-document Element.querySelectorAll: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited
+PASS In-document Element.querySelector: :link and :visited pseudo-class selectors, matching a and area elements with href attributes: #pseudo-link :link, #pseudo-link :visited
+PASS In-document Element.querySelectorAll: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited
+PASS In-document Element.querySelector: :link and :visited pseudo-class selectors, not matching link elements with href attributes: #head :link, #head :visited
+PASS In-document Element.querySelectorAll: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited
+PASS In-document Element.querySelector: :link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing: :link:visited
+FAIL In-document Element.querySelectorAll: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target assert_equals: The method should return the expected number of matches. expected 1 but got 0
+FAIL In-document Element.querySelector: :target pseudo-class selector, matching the element referenced by the URL fragment identifier: :target assert_not_equals: The method should return a match. got disallowed value null
+PASS In-document Element.querySelectorAll: :lang pseudo-class selector, matching inherited language: #pseudo-lang-div1:lang(en)
+PASS In-document Element.querySelector: :lang pseudo-class selector, matching inherited language: #pseudo-lang-div1:lang(en)
+PASS In-document Element.querySelectorAll: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)
+PASS In-document Element.querySelector: :lang pseudo-class selector, matching specified language with exact value: #pseudo-lang-div2:lang(fr)
+PASS In-document Element.querySelectorAll: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)
+PASS In-document Element.querySelector: :lang pseudo-class selector, matching specified language with partial value: #pseudo-lang-div3:lang(en)
+PASS In-document Element.querySelectorAll: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)
+PASS In-document Element.querySelector: :lang pseudo-class selector, not matching incorrect language: #pseudo-lang-div4:lang(es-AR)
+PASS In-document Element.querySelectorAll: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled
+PASS In-document Element.querySelector: :enabled pseudo-class selector, matching all enabled form controls: #pseudo-ui :enabled
+PASS In-document Element.querySelectorAll: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled
+PASS In-document Element.querySelector: :enabled pseudo-class selector, matching all disabled form controls: #pseudo-ui :disabled
+PASS In-document Element.querySelectorAll: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked
+PASS In-document Element.querySelector: :checked pseudo-class selector, matching checked radio buttons and checkboxes: #pseudo-ui :checked
+PASS In-document Element.querySelectorAll: :not pseudo-class selector, matching : #not>:not(div)
+PASS In-document Element.querySelector: :not pseudo-class selector, matching : #not>:not(div)
+PASS In-document Element.querySelectorAll: :not pseudo-class selector, matching : #not * :not(:first-child)
+PASS In-document Element.querySelector: :not pseudo-class selector, matching : #not * :not(:first-child)
+PASS In-document Element.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*)
+PASS In-document Element.querySelector: :not pseudo-class selector, matching nothing: :not(*)
+PASS In-document Element.querySelectorAll: :not pseudo-class selector, matching nothing: :not(*|*)
+PASS In-document Element.querySelector: :not pseudo-class selector, matching nothing: :not(*|*)
+PASS In-document Element.querySelectorAll: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line
+PASS In-document Element.querySelector: :first-line pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-line
+PASS In-document Element.querySelectorAll: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line
+PASS In-document Element.querySelector: ::first-line pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-line
+PASS In-document Element.querySelectorAll: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter
+PASS In-document Element.querySelector: :first-letter pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:first-letter
+PASS In-document Element.querySelectorAll: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter
+PASS In-document Element.querySelector: ::first-letter pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::first-letter
+PASS In-document Element.querySelectorAll: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before
+PASS In-document Element.querySelector: :before pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:before
+PASS In-document Element.querySelectorAll: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before
+PASS In-document Element.querySelector: ::before pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::before
+PASS In-document Element.querySelectorAll: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after
+PASS In-document Element.querySelector: :after pseudo-element (one-colon syntax) selector, not matching any elements: #pseudo-element:after
+PASS In-document Element.querySelectorAll: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after
+PASS In-document Element.querySelector: ::after pseudo-element (two-colon syntax) selector, not matching any elements: #pseudo-element::after
+PASS In-document Element.querySelectorAll: Class selector, matching element with specified class: .class-p
+PASS In-document Element.querySelector: Class selector, matching element with specified class: .class-p
+PASS In-document Element.querySelectorAll: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana
+PASS In-document Element.querySelector: Class selector, chained, matching only elements with all specified classes: #class .apple.orange.banana
+PASS In-document Element.querySelectorAll: Class Selector, chained, with type selector: div.apple.banana.orange
+PASS In-document Element.querySelector: Class Selector, chained, with type selector: div.apple.banana.orange
+PASS In-document Element.querySelectorAll: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi
+PASS In-document Element.querySelector: Class selector, matching element with class value using non-ASCII characters: .台北Táiběi
+PASS In-document Element.querySelectorAll: Class selector, matching multiple elements with class value using non-ASCII characters: .台北
+PASS In-document Element.querySelector: Class selector, matching multiple elements with class value using non-ASCII characters: .台北
+PASS In-document Element.querySelectorAll: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北
+PASS In-document Element.querySelector: Class selector, chained, matching element with multiple class values using non-ASCII characters: .台北Táiběi.台北
+PASS In-document Element.querySelectorAll: Class selector, matching element with class with escaped character: .foo\:bar
+PASS In-document Element.querySelector: Class selector, matching element with class with escaped character: .foo\:bar
+PASS In-document Element.querySelectorAll: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar
+PASS In-document Element.querySelector: Class selector, matching element with class with escaped character: .test\.foo\[5\]bar
+PASS In-document Element.querySelectorAll: ID selector, matching element with specified id: #id #id-div1
+PASS In-document Element.querySelector: ID selector, matching element with specified id: #id #id-div1
+PASS In-document Element.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div1
+PASS In-document Element.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div1
+PASS In-document Element.querySelectorAll: ID selector, chained, matching element with specified id: #id-div1, #id-div2
+PASS In-document Element.querySelector: ID selector, chained, matching element with specified id: #id-div1, #id-div2
+PASS In-document Element.querySelectorAll: ID Selector, chained, with type selector: div#id-div1, div#id-div2
+PASS In-document Element.querySelector: ID Selector, chained, with type selector: div#id-div1, div#id-div2
+PASS In-document Element.querySelectorAll: ID selector, not matching non-existent descendant: #id #none
+PASS In-document Element.querySelector: ID selector, not matching non-existent descendant: #id #none
+PASS In-document Element.querySelectorAll: ID selector, not matching non-existent ancestor: #none #id-div1
+PASS In-document Element.querySelector: ID selector, not matching non-existent ancestor: #none #id-div1
+PASS In-document Element.querySelectorAll: ID selector, matching multiple elements with duplicate id: #id-li-duplicate
+PASS In-document Element.querySelector: ID selector, matching multiple elements with duplicate id: #id-li-duplicate
+PASS In-document Element.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北Táiběi
+PASS In-document Element.querySelector: ID selector, matching id value using non-ASCII characters: #台北Táiběi
+PASS In-document Element.querySelectorAll: ID selector, matching id value using non-ASCII characters: #台北
+PASS In-document Element.querySelector: ID selector, matching id value using non-ASCII characters: #台北
+PASS In-document Element.querySelectorAll: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北
+PASS In-document Element.querySelector: ID selector, matching id values using non-ASCII characters: #台北Táiběi, #台北
+PASS In-document Element.querySelectorAll: ID selector, matching element with id with escaped character: #\#foo\:bar
+PASS In-document Element.querySelector: ID selector, matching element with id with escaped character: #\#foo\:bar
+PASS In-document Element.querySelectorAll: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar
+PASS In-document Element.querySelector: ID selector, matching element with id with escaped character: #test\.foo\[5\]bar
+PASS In-document Element.querySelectorAll: Namespace selector, matching element with any namespace: #any-namespace *|div
+PASS In-document Element.querySelector: Namespace selector, matching element with any namespace: #any-namespace *|div
+FAIL In-document Element.querySelectorAll: Namespace selector, matching div elements in no namespace only: #no-namespace |div assert_equals: The method should return the expected number of matches. expected 1 but got 4
+FAIL In-document Element.querySelector: Namespace selector, matching div elements in no namespace only: #no-namespace |div assert_equals: The method should return the first match. expected "no-namespace-div3" but got "no-namespace-div1"
+FAIL In-document Element.querySelectorAll: Namespace selector, matching any elements in no namespace only: #no-namespace |* assert_equals: The method should return the expected number of matches. expected 1 but got 4
+FAIL In-document Element.querySelector: Namespace selector, matching any elements in no namespace only: #no-namespace |* assert_equals: The method should return the first match. expected "no-namespace-div3" but got "no-namespace-div1"
+PASS In-document Element.querySelectorAll: Descendant combinator, matching element that is a descendant of an element with id: #descendant div
+PASS In-document Element.querySelector: Descendant combinator, matching element that is a descendant of an element with id: #descendant div
+PASS In-document Element.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: body #descendant-div1
+PASS In-document Element.querySelector: Descendant combinator, matching element with id that is a descendant of an element: body #descendant-div1
+PASS In-document Element.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1
+PASS In-document Element.querySelector: Descendant combinator, matching element with id that is a descendant of an element: div #descendant-div1
+PASS In-document Element.querySelectorAll: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2
+PASS In-document Element.querySelector: Descendant combinator, matching element with id that is a descendant of an element with id: #descendant #descendant-div2
+PASS In-document Element.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2
+PASS In-document Element.querySelector: Descendant combinator, matching element with class that is a descendant of an element with id: #descendant .descendant-div2
+PASS In-document Element.querySelectorAll: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3
+PASS In-document Element.querySelector: Descendant combinator, matching element with class that is a descendant of an element with class: .descendant-div1 .descendant-div3
+PASS In-document Element.querySelectorAll: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4
+PASS In-document Element.querySelector: Descendant combinator, not matching element with id that is not a descendant of an element with id: #descendant-div1 #descendant-div4
+PASS In-document Element.querySelectorAll: Descendant combinator, whitespace characters: #descendant        
+#descendant-div2
+PASS In-document Element.querySelector: Descendant combinator, whitespace characters: #descendant        
+#descendant-div2
+PASS In-document Element.querySelectorAll: Child combinator, matching element that is a child of an element with id: #child>div
+PASS In-document Element.querySelector: Child combinator, matching element that is a child of an element with id: #child>div
+PASS In-document Element.querySelectorAll: Child combinator, matching element with id that is a child of an element: div>#child-div1
+PASS In-document Element.querySelector: Child combinator, matching element with id that is a child of an element: div>#child-div1
+PASS In-document Element.querySelectorAll: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1
+PASS In-document Element.querySelector: Child combinator, matching element with id that is a child of an element with id: #child>#child-div1
+PASS In-document Element.querySelectorAll: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2
+PASS In-document Element.querySelector: Child combinator, matching element with id that is a child of an element with class: #child-div1>.child-div2
+PASS In-document Element.querySelectorAll: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2
+PASS In-document Element.querySelector: Child combinator, matching element with class that is a child of an element with class: .child-div1>.child-div2
+PASS In-document Element.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3
+PASS In-document Element.querySelector: Child combinator, not matching element with id that is not a child of an element with id: #child>#child-div3
+PASS In-document Element.querySelectorAll: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3
+PASS In-document Element.querySelector: Child combinator, not matching element with id that is not a child of an element with class: #child-div1>.child-div3
+PASS In-document Element.querySelectorAll: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3
+PASS In-document Element.querySelector: Child combinator, not matching element with class that is not a child of an element with class: .child-div1>.child-div3
+PASS In-document Element.querySelectorAll: Child combinator, surrounded by whitespace: #child-div1        
+>        
+#child-div2
+PASS In-document Element.querySelector: Child combinator, surrounded by whitespace: #child-div1        
+>        
+#child-div2
+PASS In-document Element.querySelectorAll: Child combinator, whitespace after: #child-div1>        
+#child-div2
+PASS In-document Element.querySelector: Child combinator, whitespace after: #child-div1>        
+#child-div2
+PASS In-document Element.querySelectorAll: Child combinator, whitespace before: #child-div1        
+>#child-div2
+PASS In-document Element.querySelector: Child combinator, whitespace before: #child-div1        
+>#child-div2
+PASS In-document Element.querySelectorAll: Child combinator, no whitespace: #child-div1>#child-div2
+PASS In-document Element.querySelector: Child combinator, no whitespace: #child-div1>#child-div2
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div
+PASS In-document Element.querySelector: Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id: #adjacent-div2+div
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4
+PASS In-document Element.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element: div+#adjacent-div4
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4
+PASS In-document Element.querySelector: Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id: #adjacent-div2+#adjacent-div4
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4
+PASS In-document Element.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id: #adjacent-div2+.adjacent-div4
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4
+PASS In-document Element.querySelector: Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class: .adjacent-div2+.adjacent-div4
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p
+PASS In-document Element.querySelector: Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element: #adjacent div+p
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1
+PASS In-document Element.querySelector: Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id: #adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2        
++        
+#adjacent-p3
+PASS In-document Element.querySelector: Adjacent sibling combinator, surrounded by whitespace: #adjacent-p2        
++        
+#adjacent-p3
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, whitespace after: #adjacent-p2+        
+#adjacent-p3
+PASS In-document Element.querySelector: Adjacent sibling combinator, whitespace after: #adjacent-p2+        
+#adjacent-p3
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, whitespace before: #adjacent-p2        
++#adjacent-p3
+PASS In-document Element.querySelector: Adjacent sibling combinator, whitespace before: #adjacent-p2        
++#adjacent-p3
+PASS In-document Element.querySelectorAll: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3
+PASS In-document Element.querySelector: Adjacent sibling combinator, no whitespace: #adjacent-p2+#adjacent-p3
+PASS In-document Element.querySelectorAll: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div
+PASS In-document Element.querySelector: General sibling combinator, matching element that is a sibling of an element with id: #sibling-div2~div
+PASS In-document Element.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4
+PASS In-document Element.querySelector: General sibling combinator, matching element with id that is a sibling of an element: div~#sibling-div4
+PASS In-document Element.querySelectorAll: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4
+PASS In-document Element.querySelector: General sibling combinator, matching element with id that is a sibling of an element with id: #sibling-div2~#sibling-div4
+PASS In-document Element.querySelectorAll: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div
+PASS In-document Element.querySelector: General sibling combinator, matching element with class that is a sibling of an element with id: #sibling-div2~.sibling-div
+PASS In-document Element.querySelectorAll: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p
+PASS In-document Element.querySelector: General sibling combinator, matching p element that is a sibling of a div element: #sibling div~p
+PASS In-document Element.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div
+PASS In-document Element.querySelector: General sibling combinator, not matching element with id that is not a sibling after a p element: #sibling>p~div
+PASS In-document Element.querySelectorAll: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1
+PASS In-document Element.querySelector: General sibling combinator, not matching element with id that is not a sibling after an element with id: #sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1
+PASS In-document Element.querySelectorAll: General sibling combinator, surrounded by whitespace: #sibling-p2        
+~        
+#sibling-p3
+PASS In-document Element.querySelector: General sibling combinator, surrounded by whitespace: #sibling-p2        
+~        
+#sibling-p3
+PASS In-document Element.querySelectorAll: General sibling combinator, whitespace after: #sibling-p2~        
+#sibling-p3
+PASS In-document Element.querySelector: General sibling combinator, whitespace after: #sibling-p2~        
+#sibling-p3
+PASS In-document Element.querySelectorAll: General sibling combinator, whitespace before: #sibling-p2        
+~#sibling-p3
+PASS In-document Element.querySelector: General sibling combinator, whitespace before: #sibling-p2        
+~#sibling-p3
+PASS In-document Element.querySelectorAll: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3
+PASS In-document Element.querySelector: General sibling combinator, no whitespace: #sibling-p2~#sibling-p3
+PASS In-document Element.querySelectorAll: Syntax, group of selectors separator, surrounded by whitespace: #group em        
+
+,        
+
+#group strong
+PASS In-document Element.querySelector: Syntax, group of selectors separator, surrounded by whitespace: #group em        
+
+,        
+
+#group strong
+PASS In-document Element.querySelectorAll: Syntax, group of selectors separator, whitespace after: #group em,        
+#group strong
+PASS In-document Element.querySelector: Syntax, group of selectors separator, whitespace after: #group em,        
+#group strong
+PASS In-document Element.querySelectorAll: Syntax, group of selectors separator, whitespace before: #group em        
+,#group strong
+PASS In-document Element.querySelector: Syntax, group of selectors separator, whitespace before: #group em        
+,#group strong
+PASS In-document Element.querySelectorAll: Syntax, group of selectors separator, no whitespace: #group em,#group strong
+PASS In-document Element.querySelector: Syntax, group of selectors separator, no whitespace: #group em,#group strong
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesParentNodequerySelectorAllxhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,114 @@
</span><ins>+<!DOCTYPE html>
+<html id="html" lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head id="head">
+<title>Selectors-API Test Suite: XHTML</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="selectors.js"></script>
+<script src="ParentNode-querySelector-All.js"></script>
+<style>iframe { visibility: hidden; position: absolute; }</style>
+</head>
+<body>
+<div id="log">This test requires JavaScript.</div>
+
+<script><![CDATA[
+async_test(function() {
+ var frame = document.createElement("iframe");
+ frame.onload = this.step_func_done(init);
+ frame.src = "resources/ParentNode-querySelector-All-content.xht#target";
+ document.body.appendChild(frame);
+})
+
+function init(e) {
+ /*
+ * This test suite tests Selectors API methods in 4 different contexts:
+ * 1. Document node
+ * 2. In-document Element node
+ * 3. Detached Element node (an element with no parent, not in the document)
+ * 4. Document Fragment node
+ *
+ * For each context, the following tests are run:
+ *
+ * The interface check tests ensure that each type of node exposes the Selectors API methods
+ *
+ * The special selector tests verify the result of passing special values for the selector parameter,
+ * to ensure that the correct WebIDL processing is performed, such as stringification of null and
+ * undefined and missing parameter. The universal selector is also tested here, rather than with the
+ * rest of ordinary selectors for practical reasons.
+ *
+ * The static list verification tests ensure that the node lists returned by the method remain unchanged
+ * due to subsequent document modication, and that a new list is generated each time the method is
+ * invoked based on the current state of the document.
+ *
+ * The invalid selector tests ensure that SyntaxError is thrown for invalid forms of selectors
+ *
+ * The valid selector tests check the result from querying many different types of selectors, with a
+ * list of expected elements. This checks that querySelector() always returns the first result from
+ * querySelectorAll(), and that all matching elements are correctly returned in tree-order. The tests
+ * can be limited by specifying the test types to run, using the testType variable. The constants for this
+ * can be found in selectors.js.
+ *
+ * All the selectors tested for both the valid and invalid selector tests are found in selectors.js.
+ * See comments in that file for documentation of the format used.
+ *
+ * The ParentNode-querySelector-All.js file contains all the common test functions for running each of the aforementioned tests
+ */
+
+ var testType = TEST_QSA;
+ var docType = "xhtml"; // Only run tests suitable for XHTML
+
+ // Prepare the nodes for testing
+ var doc = e.target.contentDocument; // Document Node tests
+
+ var element = doc.getElementById("root"); // In-document Element Node tests
+
+ //Setup the namespace tests
+ setupSpecialElements(doc, element);
+
+ var outOfScope = element.cloneNode(true); // Append this to the body before running the in-document
+ // Element tests, but after running the Document tests. This
+ // tests that no elements that are not descendants of element
+ // are selected.
+
+ traverse(outOfScope, function(elem) { // Annotate each element as being a clone; used for verifying
+ elem.setAttribute("data-clone", ""); // that none of these elements ever match.
+ });
+
+
+ var detached = element.cloneNode(true); // Detached Element Node tests
+
+ var fragment = doc.createDocumentFragment(); // Fragment Node tests
+ fragment.appendChild(element.cloneNode(true));
+
+ // Setup Tests
+ interfaceCheck("Document", doc);
+ interfaceCheck("Detached Element", detached);
+ interfaceCheck("Fragment", fragment);
+ interfaceCheck("In-document Element", element);
+
+ runSpecialSelectorTests("Document", doc);
+ runSpecialSelectorTests("Detached Element", detached);
+ runSpecialSelectorTests("Fragment", fragment);
+ runSpecialSelectorTests("In-document Element", element);
+
+ verifyStaticList("Document", doc, doc);
+ verifyStaticList("Detached Element", doc, detached);
+ verifyStaticList("Fragment", doc, fragment);
+ verifyStaticList("In-document Element", doc, element);
+
+ runInvalidSelectorTest("Document", doc, invalidSelectors);
+ runInvalidSelectorTest("Detached Element", detached, invalidSelectors);
+ runInvalidSelectorTest("Fragment", fragment, invalidSelectors);
+ runInvalidSelectorTest("In-document Element", element, invalidSelectors);
+
+ runValidSelectorTest("Document", doc, validSelectors, testType, docType);
+ runValidSelectorTest("Detached Element", detached, validSelectors, testType, docType);
+ runValidSelectorTest("Fragment", fragment, validSelectors, testType, docType);
+
+ doc.body.appendChild(outOfScope); // Append before in-document Element tests.
+ // None of these elements should match
+ runValidSelectorTest("In-document Element", element, validSelectors, testType, docType);
+}
+]]></script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesParentNodequerySelectorAllhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,110 @@
</span><ins>+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>Selectors-API Test Suite: HTML</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="selectors.js"></script>
+<script src="ParentNode-querySelector-All.js"></script>
+<style>iframe { visibility: hidden; position: absolute; }</style>
+
+<div id="log">This test requires JavaScript.</div>
+
+<script>
+async_test(function() {
+ var frame = document.createElement("iframe");
+ frame.onload = this.step_func_done(init);
+ frame.src = "resources/ParentNode-querySelector-All-content.html#target";
+ document.body.appendChild(frame);
+});
+
+function init(e) {
+ /*
+ * This test suite tests Selectors API methods in 4 different contexts:
+ * 1. Document node
+ * 2. In-document Element node
+ * 3. Detached Element node (an element with no parent, not in the document)
+ * 4. Document Fragment node
+ *
+ * For each context, the following tests are run:
+ *
+ * The interface check tests ensure that each type of node exposes the Selectors API methods
+ *
+ * The special selector tests verify the result of passing special values for the selector parameter,
+ * to ensure that the correct WebIDL processing is performed, such as stringification of null and
+ * undefined and missing parameter. The universal selector is also tested here, rather than with the
+ * rest of ordinary selectors for practical reasons.
+ *
+ * The static list verification tests ensure that the node lists returned by the method remain unchanged
+ * due to subsequent document modication, and that a new list is generated each time the method is
+ * invoked based on the current state of the document.
+ *
+ * The invalid selector tests ensure that SyntaxError is thrown for invalid forms of selectors
+ *
+ * The valid selector tests check the result from querying many different types of selectors, with a
+ * list of expected elements. This checks that querySelector() always returns the first result from
+ * querySelectorAll(), and that all matching elements are correctly returned in tree-order. The tests
+ * can be limited by specifying the test types to run, using the testType variable. The constants for this
+ * can be found in selectors.js.
+ *
+ * All the selectors tested for both the valid and invalid selector tests are found in selectors.js.
+ * See comments in that file for documentation of the format used.
+ *
+ * The ParentNode-querySelector-All.js file contains all the common test functions for running each of the aforementioned tests
+ */
+
+ var testType = TEST_QSA;
+ var docType = "html"; // Only run tests suitable for HTML
+
+ // Prepare the nodes for testing
+ var doc = e.target.contentDocument; // Document Node tests
+
+ var element = doc.getElementById("root"); // In-document Element Node tests
+
+ //Setup the namespace tests
+ setupSpecialElements(doc, element);
+
+ var outOfScope = element.cloneNode(true); // Append this to the body before running the in-document
+ // Element tests, but after running the Document tests. This
+ // tests that no elements that are not descendants of element
+ // are selected.
+
+ traverse(outOfScope, function(elem) { // Annotate each element as being a clone; used for verifying
+ elem.setAttribute("data-clone", ""); // that none of these elements ever match.
+ });
+
+
+ var detached = element.cloneNode(true); // Detached Element Node tests
+
+ var fragment = doc.createDocumentFragment(); // Fragment Node tests
+ fragment.appendChild(element.cloneNode(true));
+
+ // Setup Tests
+ interfaceCheck("Document", doc);
+ interfaceCheck("Detached Element", detached);
+ interfaceCheck("Fragment", fragment);
+ interfaceCheck("In-document Element", element);
+
+ runSpecialSelectorTests("Document", doc);
+ runSpecialSelectorTests("Detached Element", detached);
+ runSpecialSelectorTests("Fragment", fragment);
+ runSpecialSelectorTests("In-document Element", element);
+
+ verifyStaticList("Document", doc, doc);
+ verifyStaticList("Detached Element", doc, detached);
+ verifyStaticList("Fragment", doc, fragment);
+ verifyStaticList("In-document Element", doc, element);
+
+ runInvalidSelectorTest("Document", doc, invalidSelectors);
+ runInvalidSelectorTest("Detached Element", detached, invalidSelectors);
+ runInvalidSelectorTest("Fragment", fragment, invalidSelectors);
+ runInvalidSelectorTest("In-document Element", element, invalidSelectors);
+
+ runValidSelectorTest("Document", doc, validSelectors, testType, docType);
+ runValidSelectorTest("Detached Element", detached, validSelectors, testType, docType);
+ runValidSelectorTest("Fragment", fragment, validSelectors, testType, docType);
+
+ doc.body.appendChild(outOfScope); // Append before in-document Element tests.
+ // None of these elements should match
+ runValidSelectorTest("In-document Element", element, validSelectors, testType, docType);
+}
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesParentNodequerySelectorAlljs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,252 @@
</span><ins>+// Require selectors.js to be included before this.
+
+/*
+ * Create and append special elements that cannot be created correctly with HTML markup alone.
+ */
+function setupSpecialElements(doc, parent) {
+ // Setup null and undefined tests
+ parent.appendChild(doc.createElement("null"));
+ parent.appendChild(doc.createElement("undefined"));
+
+ // Setup namespace tests
+ var anyNS = doc.createElement("div");
+ var noNS = doc.createElement("div");
+ anyNS.id = "any-namespace";
+ noNS.id = "no-namespace";
+
+ var divs;
+ div = [doc.createElement("div"),
+ doc.createElementNS("http://www.w3.org/1999/xhtml", "div"),
+ doc.createElementNS("", "div"),
+ doc.createElementNS("http://www.example.org/ns", "div")];
+
+ div[0].id = "any-namespace-div1";
+ div[1].id = "any-namespace-div2";
+ div[2].setAttribute("id", "any-namespace-div3"); // Non-HTML elements can't use .id property
+ div[3].setAttribute("id", "any-namespace-div4");
+
+ for (var i = 0; i < div.length; i++) {
+ anyNS.appendChild(div[i])
+ }
+
+ div = [doc.createElement("div"),
+ doc.createElementNS("http://www.w3.org/1999/xhtml", "div"),
+ doc.createElementNS("", "div"),
+ doc.createElementNS("http://www.example.org/ns", "div")];
+
+ div[0].id = "no-namespace-div1";
+ div[1].id = "no-namespace-div2";
+ div[2].setAttribute("id", "no-namespace-div3"); // Non-HTML elements can't use .id property
+ div[3].setAttribute("id", "no-namespace-div4");
+
+ for (i = 0; i < div.length; i++) {
+ noNS.appendChild(div[i])
+ }
+
+ parent.appendChild(anyNS);
+ parent.appendChild(noNS);
+}
+
+/*
+ * Check that the querySelector and querySelectorAll methods exist on the given Node
+ */
+function interfaceCheck(type, obj) {
+ test(function() {
+ var q = typeof obj.querySelector === "function";
+ assert_true(q, type + " supports querySelector.");
+ }, type + " supports querySelector")
+
+ test(function() {
+ var qa = typeof obj.querySelectorAll === "function";
+ assert_true( qa, type + " supports querySelectorAll.");
+ }, type + " supports querySelectorAll")
+
+ test(function() {
+ var list = obj.querySelectorAll("div");
+ if (obj.ownerDocument) { // The object is not a Document
+ assert_true(list instanceof obj.ownerDocument.defaultView.NodeList, "The result should be an instance of a NodeList")
+ } else { // The object is a Document
+ assert_true(list instanceof obj.defaultView.NodeList, "The result should be an instance of a NodeList")
+ }
+ }, type + ".querySelectorAll returns NodeList instance")
+}
+
+/*
+ * Verify that the NodeList returned by querySelectorAll is static and and that a new list is created after
+ * each call. A static list should not be affected by subsequent changes to the DOM.
+ */
+function verifyStaticList(type, doc, root) {
+ var pre, post, preLength;
+
+ test(function() {
+ pre = root.querySelectorAll("div");
+ preLength = pre.length;
+
+ var div = doc.createElement("div");
+ (root.body || root).appendChild(div);
+
+ assert_equals(pre.length, preLength, "The length of the NodeList should not change.")
+ }, type + ": static NodeList")
+
+ test(function() {
+ post = root.querySelectorAll("div"),
+ assert_equals(post.length, preLength + 1, "The length of the new NodeList should be 1 more than the previous list.")
+ }, type + ": new NodeList")
+}
+
+/*
+ * Verify handling of special values for the selector parameter, including stringification of
+ * null and undefined, and the handling of the empty string.
+ */
+function runSpecialSelectorTests(type, root) {
+ test(function() { // 1
+ assert_equals(root.querySelectorAll(null).length, 1, "This should find one element with the tag name 'NULL'.");
+ }, type + ".querySelectorAll null")
+
+ test(function() { // 2
+ assert_equals(root.querySelectorAll(undefined).length, 1, "This should find one element with the tag name 'UNDEFINED'.");
+ }, type + ".querySelectorAll undefined")
+
+ test(function() { // 3
+ assert_throws(TypeError(), function() {
+ root.querySelectorAll();
+ }, "This should throw a TypeError.")
+ }, type + ".querySelectorAll no parameter")
+
+ test(function() { // 4
+ var elm = root.querySelector(null)
+ assert_not_equals(elm, null, "This should find an element.");
+ assert_equals(elm.tagName.toUpperCase(), "NULL", "The tag name should be 'NULL'.")
+ }, type + ".querySelector null")
+
+ test(function() { // 5
+ var elm = root.querySelector(undefined)
+ assert_not_equals(elm, undefined, "This should find an element.");
+ assert_equals(elm.tagName.toUpperCase(), "UNDEFINED", "The tag name should be 'UNDEFINED'.")
+ }, type + ".querySelector undefined")
+
+ test(function() { // 6
+ assert_throws(TypeError(), function() {
+ root.querySelector();
+ }, "This should throw a TypeError.")
+ }, type + ".querySelector no parameter")
+
+ test(function() { // 7
+ result = root.querySelectorAll("*");
+ var i = 0;
+ traverse(root, function(elem) {
+ if (elem !== root) {
+ assert_equals(elem, result[i], "The result in index " + i + " should be in tree order.");
+ i++;
+ }
+ })
+ }, type + ".querySelectorAll tree order");
+}
+
+/*
+ * Execute queries with the specified valid selectors for both querySelector() and querySelectorAll()
+ * Only run these tests when results are expected. Don't run for syntax error tests.
+ */
+function runValidSelectorTest(type, root, selectors, testType, docType) {
+ var nodeType = "";
+ switch (root.nodeType) {
+ case Node.DOCUMENT_NODE:
+ nodeType = "document";
+ break;
+ case Node.ELEMENT_NODE:
+ nodeType = root.parentNode ? "element" : "detached";
+ break;
+ case Node.DOCUMENT_FRAGMENT_NODE:
+ nodeType = "fragment";
+ break;
+ default:
+ assert_unreached();
+ nodeType = "unknown"; // This should never happen.
+ }
+
+ for (var i = 0; i < selectors.length; i++) {
+ var s = selectors[i];
+ var n = s["name"];
+ var q = s["selector"];
+ var e = s["expect"];
+
+ if ((!s["exclude"] || (s["exclude"].indexOf(nodeType) === -1 && s["exclude"].indexOf(docType) === -1))
+ && (s["testType"] & testType) ) {
+ var foundall, found;
+
+ test(function() {
+ foundall = root.querySelectorAll(q);
+ assert_not_equals(foundall, null, "The method should not return null.")
+ assert_equals(foundall.length, e.length, "The method should return the expected number of matches.")
+
+ for (var i = 0; i < e.length; i++) {
+ assert_not_equals(foundall[i], null, "The item in index " + i + " should not be null.")
+ assert_equals(foundall[i].getAttribute("id"), e[i], "The item in index " + i + " should have the expected ID.");
+ assert_false(foundall[i].hasAttribute("data-clone"), "This should not be a cloned element.");
+ }
+ }, type + ".querySelectorAll: " + n + ": " + q);
+
+ test(function() {
+ found = root.querySelector(q);
+
+ if (e.length > 0) {
+ assert_not_equals(found, null, "The method should return a match.")
+ assert_equals(found.getAttribute("id"), e[0], "The method should return the first match.");
+ assert_equals(found, foundall[0], "The result should match the first item from querySelectorAll.");
+ assert_false(found.hasAttribute("data-clone"), "This should not be annotated as a cloned element.");
+ } else {
+ assert_equals(found, null, "The method should not match anything.");
+ }
+ }, type + ".querySelector: " + n + ": " + q);
+ }
+ }
+}
+
+/*
+ * Execute queries with the specified invalid selectors for both querySelector() and querySelectorAll()
+ * Only run these tests when errors are expected. Don't run for valid selector tests.
+ */
+function runInvalidSelectorTest(type, root, selectors) {
+ for (var i = 0; i < selectors.length; i++) {
+ var s = selectors[i];
+ var n = s["name"];
+ var q = s["selector"];
+
+ test(function() {
+ assert_throws("SyntaxError", function() {
+ root.querySelector(q)
+ })
+ }, type + ".querySelector: " + n + ": " + q);
+
+ test(function() {
+ assert_throws("SyntaxError", function() {
+ root.querySelectorAll(q)
+ })
+ }, type + ".querySelectorAll: " + n + ": " + q);
+ }
+}
+
+function traverse(elem, fn) {
+ if (elem.nodeType === elem.ELEMENT_NODE) {
+ fn(elem);
+ }
+ elem = elem.firstChild;
+ while (elem) {
+ traverse(elem, fn);
+ elem = elem.nextSibling;
+ }
+}
+
+function getNodeType(node) {
+ switch (node.nodeType) {
+ case Node.DOCUMENT_NODE:
+ return "document";
+ case Node.ELEMENT_NODE:
+ return node.parentNode ? "element" : "detached";
+ case Node.DOCUMENT_FRAGMENT_NODE:
+ return "fragment";
+ default:
+ assert_unreached();
+ return "unknown"; // This should never happen.
+ }
+}
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesProcessingInstructionliteral1expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-1-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-1-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-1-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS <?xml?> is not a ProcessingInstruction
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesProcessingInstructionliteral1xhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-1-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-1-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-1-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS <?xml?> is not a ProcessingInstruction
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesProcessingInstructionliteral1xhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-1-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-1-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-1-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>&lt;?xml?> is not a ProcessingInstruction</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id="log"/>
+<script>
+test(function() {
+ assert_equals(document.firstChild, document.documentElement)
+})
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesProcessingInstructionliteral2expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-2-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-2-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-2-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS ProcessingInstruction literals
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesProcessingInstructionliteral2xhtmlexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-2-xhtml-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-2-xhtml-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-2-xhtml-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS ProcessingInstruction literals
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesProcessingInstructionliteral2xhtmlxhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-2-xhtml.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-2-xhtml.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-2-xhtml.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,21 @@
</span><ins>+<?xml-stylesheet href="support/style.css" type="text/css"?>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>ProcessingInstruction literals</title>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-processinginstruction-target"/>
+<link rel="help" href="https://dom.spec.whatwg.org/#dom-characterdata-data"/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id="log"/>
+<script>
+test(function() {
+ var pienc = document.firstChild;
+ assert_true(pienc instanceof ProcessingInstruction)
+ assert_equals(pienc.target, "xml-stylesheet")
+ assert_equals(pienc.data, 'href="support/style.css" type="text/css"')
+})
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesTextconstructorexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Text-constructor-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Text-constructor-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Text-constructor-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+
+
+PASS new Text(): prototype chain
+PASS new Text(): instanceof
+PASS new Text(): no arguments
+FAIL new Text(): undefined assert_equals: expected "" but got "undefined"
+PASS new Text(): null
+PASS new Text(): 42
+PASS new Text(): ""
+PASS new Text(): "-"
+PASS new Text(): "--"
+PASS new Text(): "-->"
+PASS new Text(): "<!--"
+PASS new Text(): "\0"
+PASS new Text(): "\0test"
+PASS new Text(): "&amp;"
+PASS new Text(): two arguments
+PASS new Text() should get the correct ownerDocument across globals
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesTextconstructorhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Text-constructor.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Text-constructor.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Text-constructor.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+<!doctype html>
+<meta charset=utf-8>
+<title>Text constructor</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-text">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="Comment-Text-constructor.js"></script>
+<div id="log"></div>
+<script>
+test_constructor("Text");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesTextsplitTextexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Text-splitText-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Text-splitText-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Text-splitText-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+
+PASS Split text after end of data
+PASS Split empty text
+PASS Split text at beginning
+PASS Split text at end
+PASS Split root
+PASS Split child
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesTextsplitTexthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/Text-splitText.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/Text-splitText.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/Text-splitText.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,53 @@
</span><ins>+<!doctype html>
+<meta charset=utf-8>
+<title>Text.splitText()</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-text-splittextoffset">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ var text = document.createTextNode("camembert");
+ assert_throws("INDEX_SIZE_ERR", function () { text.splitText(10) });
+}, "Split text after end of data");
+
+test(function() {
+ var text = document.createTextNode("");
+ var new_text = text.splitText(0);
+ assert_equals(text.data, "");
+ assert_equals(new_text.data, "");
+}, "Split empty text");
+
+test(function() {
+ var text = document.createTextNode("comté");
+ var new_text = text.splitText(0);
+ assert_equals(text.data, "");
+ assert_equals(new_text.data, "comté");
+}, "Split text at beginning");
+
+test(function() {
+ var text = document.createTextNode("comté");
+ var new_text = text.splitText(5);
+ assert_equals(text.data, "comté");
+ assert_equals(new_text.data, "");
+}, "Split text at end");
+
+test(function() {
+ var text = document.createTextNode("comté");
+ var new_text = text.splitText(3);
+ assert_equals(text.data, "com");
+ assert_equals(new_text.data, "té");
+ assert_equals(new_text.parentNode, null);
+}, "Split root");
+
+test(function() {
+ var parent = document.createElement('div');
+ var text = document.createTextNode("bleu");
+ parent.appendChild(text);
+ var new_text = text.splitText(2);
+ assert_equals(text.data, "bl");
+ assert_equals(new_text.data, "eu");
+ assert_equals(text.nextSibling, new_text);
+ assert_equals(new_text.parentNode, parent);
+}, "Split child");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesappendonDocumentexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/append-on-Document-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/append-on-Document-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/append-on-Document-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+
+PASS Document.append() without any argument, on a Document having no child.
+PASS Document.append() with only one element as an argument, on a Document having no child.
+PASS Document.append() with only one element as an argument, on a Document having one child.
+PASS Document.append() with text as an argument, on a Document having no child.
+FAIL Document.append() with two elements as the argument, on a Document having no child. assert_throws: function "function () { parent.append(x, y); }" did not throw
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesappendonDocumenthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/append-on-Document.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/append-on-Document.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/append-on-Document.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,53 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>DocumentType.append</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-parentnode-append">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+function test_append_on_Document() {
+
+ var node = document.implementation.createDocument(null, null);
+ test(function() {
+ var parent = node.cloneNode();
+ parent.append();
+ assert_array_equals(parent.childNodes, []);
+ }, 'Document.append() without any argument, on a Document having no child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ var x = document.createElement('x');
+ parent.append(x);
+ assert_array_equals(parent.childNodes, [x]);
+ }, 'Document.append() with only one element as an argument, on a Document having no child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ parent.appendChild(x);
+ assert_throws('HierarchyRequestError', function() { parent.append(y); });
+ assert_array_equals(parent.childNodes, [x]);
+ }, 'Document.append() with only one element as an argument, on a Document having one child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ assert_throws('HierarchyRequestError', function() { parent.append('text'); });
+ assert_array_equals(parent.childNodes, []);
+ }, 'Document.append() with text as an argument, on a Document having no child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ assert_throws('HierarchyRequestError', function() { parent.append(x, y); });
+ assert_array_equals(parent.childNodes, []);
+ }, 'Document.append() with two elements as the argument, on a Document having no child.');
+
+}
+
+test_append_on_Document();
+
+</script>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesattributesexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/attributes-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/attributes-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/attributes-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,39 @@
</span><ins>+
+FAIL AttrExodus assert_false: expected false got true
+PASS When qualifiedName does not match the Name production, an INVALID_CHARACTER_ERR exception is to be thrown. (setAttribute)
+FAIL setAttribute should lowercase its name argument (upper case attribute) assert_equals: expected (object) null but got (string) ""
+FAIL setAttribute should lowercase its name argument (mixed case attribute) assert_equals: expected (object) null but got (string) ""
+PASS setAttribute should not throw even when qualifiedName starts with 'xmlns'
+PASS Basic functionality should be intact.
+PASS setAttribute should not change the order of previously set attributes.
+PASS setAttribute should set the first attribute with the given name
+PASS setAttribute should set the attribute with the given qualified name
+PASS When qualifiedName does not match the Name production, an INVALID_CHARACTER_ERR exception is to be thrown. (setAttributeNS)
+PASS When qualifiedName does not match the QName production, an NAMESPACE_ERR exception is to be thrown.
+PASS null and the empty string should result in a null namespace.
+PASS A namespace is required to use a prefix.
+PASS The xml prefix should not be allowed for arbitrary namespaces
+PASS XML-namespaced attributes don't need an xml prefix
+PASS The xmlns prefix should not be allowed for arbitrary namespaces
+PASS The xmlns qualified name should not be allowed for arbitrary namespaces
+PASS xmlns should be allowed as local name
+PASS The XMLNS namespace should require xmlns as prefix or qualified name
+PASS xmlns should be allowed as prefix in the XMLNS namespace
+PASS xmlns should be allowed as qualified name in the XMLNS namespace
+PASS Setting the same attribute with another prefix should not change the prefix
+PASS setAttribute should not throw even if a load is not allowed
+PASS Attributes should work in document fragments.
+PASS Attribute values should not be parsed.
+PASS Specified attributes should be accessible.
+PASS Entities in attributes should have been expanded while parsing.
+FAIL Unset attributes return null assert_equals: expected (object) null but got (string) ""
+FAIL First set attribute is returned by getAttribute assert_equals: expected (object) null but got (string) ""
+PASS Style attributes are not normalized
+FAIL Only lowercase attributes are returned on HTML elements (upper case attribute) assert_equals: expected (object) null but got (string) ""
+FAIL Only lowercase attributes are returned on HTML elements (mixed case attribute) assert_equals: expected (object) null but got (string) ""
+PASS First set attribute is returned with mapped attribute set first
+PASS First set attribute is returned with mapped attribute set later
+FAIL Non-HTML element with upper-case attribute assert_equals: el.hasAttributeNS(undefined) expected true but got false
+PASS Attribute with prefix in local name
+PASS Attribute loses its owner when removed
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesattributeshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/attributes.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/attributes.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/attributes.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,397 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Attributes tests</title>
+<link rel=help href="https://dom.spec.whatwg.org/#attr">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-setattribute">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-setattributens">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="attributes.js"></script>
+<script src="productions.js"></script>
+<div id="log"></div>
+<span id="test1"></span>
+<span class="&amp;&lt;&gt;foo"></span>
+<script>
+var XML = "http://www.w3.org/XML/1998/namespace"
+var XMLNS = "http://www.w3.org/2000/xmlns/"
+
+// AttrExodus
+test(function() {
+ document.body.setAttribute("abc", "pass")
+ var attr = document.body.attributes[0]
+ assert_true(attr instanceof Attr)
+ assert_false(attr instanceof Node)
+ assert_throws(new TypeError(), function() { attr.appendChild(document.createTextNode("fail")) })
+ assert_throws(new TypeError(), function() { attr.appendChild(null) })
+ assert_equals(attr.value, "pass")
+ assert_false("childNodes" in attr, "Should not have childNodes")
+}, "AttrExodus")
+
+// setAttribute exhaustive tests
+// Step 1
+test(function() {
+ var el = document.createElement("foo")
+ for (var i = 0; i < invalid_names.length; i++) {
+ assert_throws("INVALID_CHARACTER_ERR", function() { el.setAttribute(invalid_names[i], "test") })
+ }
+}, "When qualifiedName does not match the Name production, an " +
+ "INVALID_CHARACTER_ERR exception is to be thrown. (setAttribute)")
+
+// Step 2
+test(function() {
+ var el = document.createElement("div")
+ el.setAttribute("ALIGN", "left")
+ assert_equals(el.getAttributeNS("", "ALIGN"), null)
+ assert_equals(el.getAttributeNS("", "align"), "left")
+ assert_equals(el.getAttribute("align"), "left")
+}, "setAttribute should lowercase its name argument (upper case attribute)")
+test(function() {
+ var el = document.createElement("div")
+ el.setAttribute("CHEEseCaKe", "tasty")
+ assert_equals(el.getAttributeNS("", "CHEEseCaKe"), null)
+ assert_equals(el.getAttributeNS("", "cheesecake"), "tasty")
+ assert_equals(el.getAttribute("cheesecake"), "tasty")
+}, "setAttribute should lowercase its name argument (mixed case attribute)")
+
+// Step 3
+test(function() {
+ var el = document.createElement("foo")
+ var tests = ["xmlns", "xmlns:a", "xmlnsx", "xmlns0"]
+ for (var i = 0; i < tests.length; i++) {
+ el.setAttribute(tests[i], "success");
+ }
+}, "setAttribute should not throw even when qualifiedName starts with 'xmlns'")
+
+// Step 4
+test(function() {
+ var el = document.createElement("foo")
+ for (var i = 0; i < valid_names.length; i++) {
+ el.setAttribute(valid_names[i], "test")
+ assert_equals(el.getAttribute(valid_names[i]), "test")
+ }
+}, "Basic functionality should be intact.")
+
+// Step 5
+test(function() {
+ var el = document.createElement("foo")
+ el.setAttribute("a", "1")
+ el.setAttribute("b", "2")
+ el.setAttribute("a", "3")
+ el.setAttribute("c", "4")
+ attributes_are(el, [["a", "3"],
+ ["b", "2"],
+ ["c", "4"]])
+}, "setAttribute should not change the order of previously set attributes.")
+test(function() {
+ var el = document.createElement("baz")
+ el.setAttributeNS("ab", "attr", "fail")
+ el.setAttributeNS("kl", "attr", "pass")
+ el.setAttribute("attr", "pass")
+ attributes_are(el, [["attr", "pass", "ab"],
+ ["attr", "pass", "kl"]])
+}, "setAttribute should set the first attribute with the given name")
+test(function() {
+ // Based on a test by David Flanagan.
+ var el = document.createElement("baz")
+ el.setAttributeNS("foo", "foo:bar", "1");
+ assert_equals(el.getAttribute("foo:bar"), "1")
+ attr_is(el.attributes[0], "1", "bar", "foo", "foo", "foo:bar")
+ el.setAttribute("foo:bar", "2");
+ assert_equals(el.getAttribute("foo:bar"), "2")
+ attr_is(el.attributes[0], "2", "bar", "foo", "foo", "foo:bar")
+}, "setAttribute should set the attribute with the given qualified name")
+
+// setAttributeNS exhaustive tests
+// Step 1
+test(function() {
+ var el = document.createElement("foo")
+ for (var i = 0, il = invalid_names.length; i < il; ++i) {
+ assert_throws("INVALID_CHARACTER_ERR",
+ function() { el.setAttributeNS("a", invalid_names[i], "fail") })
+ }
+}, "When qualifiedName does not match the Name production, an " +
+ "INVALID_CHARACTER_ERR exception is to be thrown. (setAttributeNS)")
+
+// Step 2
+test(function() {
+ var el = document.createElement("foo")
+ for (var i = 0, il = invalid_qnames.length; i < il; ++i) {
+ assert_throws("NAMESPACE_ERR",
+ function() { el.setAttributeNS("a", invalid_qnames[i], "fail") },
+ "Expected exception for " + invalid_qnames[i] + ".")
+ }
+}, "When qualifiedName does not match the QName production, an " +
+ "NAMESPACE_ERR exception is to be thrown.")
+
+// Step 3
+test(function() {
+ var el = document.createElement("foo")
+ el.setAttributeNS(null, "aa", "bb")
+ el.setAttributeNS("", "xx", "bb")
+ attributes_are(el, [["aa", "bb"],
+ ["xx", "bb"]])
+}, "null and the empty string should result in a null namespace.")
+
+// Step 4
+test(function() {
+ var el = document.createElement("foo")
+ assert_throws("NAMESPACE_ERR",
+ function() { el.setAttributeNS("", "aa:bb", "fail") })
+ assert_throws("NAMESPACE_ERR",
+ function() { el.setAttributeNS(null, "aa:bb", "fail") })
+}, "A namespace is required to use a prefix.")
+
+// Step 5
+test(function() {
+ var el = document.createElement("foo")
+ assert_throws("NAMESPACE_ERR",
+ function() { el.setAttributeNS("a", "xml:bb", "fail") })
+}, "The xml prefix should not be allowed for arbitrary namespaces")
+test(function() {
+ var el = document.createElement("foo")
+ el.setAttributeNS(XML, "a:bb", "pass")
+ assert_equals(el.attributes.length, 1)
+ attr_is(el.attributes[0], "pass", "bb", XML, "a", "a:bb")
+}, "XML-namespaced attributes don't need an xml prefix")
+
+// Step 6
+test(function() {
+ var el = document.createElement("foo")
+ assert_throws("NAMESPACE_ERR",
+ function() { el.setAttributeNS("a", "xmlns:bb", "fail") })
+}, "The xmlns prefix should not be allowed for arbitrary namespaces")
+test(function() {
+ var el = document.createElement("foo")
+ assert_throws("NAMESPACE_ERR",
+ function() { el.setAttributeNS("a", "xmlns", "fail") })
+}, "The xmlns qualified name should not be allowed for arbitrary namespaces")
+test(function() {
+ var el = document.createElement("foo")
+ el.setAttributeNS("ns", "a:xmlns", "pass")
+ assert_equals(el.attributes.length, 1)
+ attr_is(el.attributes[0], "pass", "xmlns", "ns", "a", "a:xmlns")
+}, "xmlns should be allowed as local name")
+
+// Step 7
+test(function() {
+ var el = document.createElement("foo")
+ assert_throws("NAMESPACE_ERR",
+ function() { el.setAttributeNS(XMLNS, "a:xmlns", "fail") })
+ assert_throws("NAMESPACE_ERR",
+ function() { el.setAttributeNS(XMLNS, "b:foo", "fail") })
+}, "The XMLNS namespace should require xmlns as prefix or qualified name")
+test(function() {
+ var el = document.createElement("foo")
+ el.setAttributeNS(XMLNS, "xmlns:a", "pass")
+ assert_equals(el.attributes.length, 1)
+ attr_is(el.attributes[0], "pass", "a", XMLNS, "xmlns", "xmlns:a")
+}, "xmlns should be allowed as prefix in the XMLNS namespace")
+test(function() {
+ var el = document.createElement("foo")
+ el.setAttributeNS(XMLNS, "xmlns", "pass")
+ assert_equals(el.attributes.length, 1)
+ attr_is(el.attributes[0], "pass", "xmlns", XMLNS, null, "xmlns")
+}, "xmlns should be allowed as qualified name in the XMLNS namespace")
+
+// Step 8-9
+test(function() {
+ var el = document.createElement("foo")
+ el.setAttributeNS("a", "foo:bar", "X")
+ assert_equals(el.attributes.length, 1)
+ attr_is(el.attributes[0], "X", "bar", "a", "foo", "foo:bar")
+
+ el.setAttributeNS("a", "quux:bar", "Y")
+ assert_equals(el.attributes.length, 1)
+ attr_is(el.attributes[0], "Y", "bar", "a", "foo", "foo:bar")
+ el.removeAttributeNS("a", "bar")
+}, "Setting the same attribute with another prefix should not change the prefix")
+
+// Miscellaneous tests
+test(function() {
+ var el = document.createElement("iframe")
+ el.setAttribute("src", "file:///home")
+ assert_equals(el.getAttribute("src"), "file:///home")
+}, "setAttribute should not throw even if a load is not allowed")
+test(function() {
+ var docFragment = document.createDocumentFragment()
+ var newOne = document.createElement("newElement")
+ newOne.setAttribute("newdomestic", "Yes")
+ docFragment.appendChild(newOne)
+ var domesticNode = docFragment.firstChild
+ var attr = domesticNode.attributes.item(0)
+ attr_is(attr, "Yes", "newdomestic", null, null, "newdomestic")
+}, "Attributes should work in document fragments.")
+test(function() {
+ var el = document.createElement("foo")
+ el.setAttribute("x", "y")
+ var attr = el.attributes[0]
+ attr.value = "Y&lt;"
+ attr_is(attr, "Y&lt;", "x", null, null, "x")
+ assert_equals(el.getAttribute("x"), "Y&lt;")
+}, "Attribute values should not be parsed.")
+test(function() {
+ var el = document.getElementsByTagName("span")[0]
+ attr_is(el.attributes[0], "test1", "id", null, null, "id")
+}, "Specified attributes should be accessible.")
+test(function() {
+ var el = document.getElementsByTagName("span")[1]
+ attr_is(el.attributes[0], "&<>foo", "class", null, null, "class")
+}, "Entities in attributes should have been expanded while parsing.")
+
+test(function() {
+ var el = document.createElement("div")
+ assert_equals(el.hasAttribute("bar"), false)
+ assert_equals(el.hasAttributeNS(null, "bar"), false)
+ assert_equals(el.hasAttributeNS("", "bar"), false)
+ assert_equals(el.getAttribute("bar"), null)
+ assert_equals(el.getAttributeNS(null, "bar"), null)
+ assert_equals(el.getAttributeNS("", "bar"), null)
+}, "Unset attributes return null")
+test(function() {
+ var el = document.createElement("div")
+ el.setAttributeNS("ab", "attr", "t1")
+ el.setAttributeNS("kl", "attr", "t2")
+ assert_equals(el.hasAttribute("attr"), true)
+ assert_equals(el.hasAttributeNS("ab", "attr"), true)
+ assert_equals(el.hasAttributeNS("kl", "attr"), true)
+ assert_equals(el.getAttribute("attr"), "t1")
+ assert_equals(el.getAttributeNS("ab", "attr"), "t1")
+ assert_equals(el.getAttributeNS("kl", "attr"), "t2")
+ assert_equals(el.getAttributeNS(null, "attr"), null)
+ assert_equals(el.getAttributeNS("", "attr"), null)
+}, "First set attribute is returned by getAttribute")
+test(function() {
+ var el = document.createElement("div")
+ el.setAttribute("style", "color:#fff;")
+ assert_equals(el.hasAttribute("style"), true)
+ assert_equals(el.hasAttributeNS(null, "style"), true)
+ assert_equals(el.hasAttributeNS("", "style"), true)
+ assert_equals(el.getAttribute("style"), "color:#fff;")
+ assert_equals(el.getAttributeNS(null, "style"), "color:#fff;")
+ assert_equals(el.getAttributeNS("", "style"), "color:#fff;")
+}, "Style attributes are not normalized")
+test(function() {
+ var el = document.createElement("div")
+ el.setAttributeNS("", "ALIGN", "left")
+ assert_equals(el.hasAttribute("ALIGN"), false)
+ assert_equals(el.hasAttribute("align"), false)
+ assert_equals(el.hasAttributeNS(null, "ALIGN"), true)
+ assert_equals(el.hasAttributeNS(null, "align"), false)
+ assert_equals(el.hasAttributeNS("", "ALIGN"), true)
+ assert_equals(el.hasAttributeNS("", "align"), false)
+ assert_equals(el.getAttribute("ALIGN"), null)
+ assert_equals(el.getAttribute("align"), null)
+ assert_equals(el.getAttributeNS(null, "ALIGN"), "left")
+ assert_equals(el.getAttributeNS("", "ALIGN"), "left")
+ assert_equals(el.getAttributeNS(null, "align"), null)
+ assert_equals(el.getAttributeNS("", "align"), null)
+ el.removeAttributeNS("", "ALIGN")
+}, "Only lowercase attributes are returned on HTML elements (upper case attribute)")
+test(function() {
+ var el = document.createElement("div")
+ el.setAttributeNS("", "CHEEseCaKe", "tasty")
+ assert_equals(el.hasAttribute("CHEESECAKE"), false)
+ assert_equals(el.hasAttribute("CHEEseCaKe"), false)
+ assert_equals(el.hasAttribute("cheesecake"), false)
+ assert_equals(el.hasAttributeNS("", "CHEESECAKE"), false)
+ assert_equals(el.hasAttributeNS("", "CHEEseCaKe"), true)
+ assert_equals(el.hasAttributeNS("", "cheesecake"), false)
+ assert_equals(el.hasAttributeNS(null, "CHEESECAKE"), false)
+ assert_equals(el.hasAttributeNS(null, "CHEEseCaKe"), true)
+ assert_equals(el.hasAttributeNS(null, "cheesecake"), false)
+ assert_equals(el.getAttribute("CHEESECAKE"), null)
+ assert_equals(el.getAttribute("CHEEseCaKe"), null)
+ assert_equals(el.getAttribute("cheesecake"), null)
+ assert_equals(el.getAttributeNS(null, "CHEESECAKE"), null)
+ assert_equals(el.getAttributeNS("", "CHEESECAKE"), null)
+ assert_equals(el.getAttributeNS(null, "CHEEseCaKe"), "tasty")
+ assert_equals(el.getAttributeNS("", "CHEEseCaKe"), "tasty")
+ assert_equals(el.getAttributeNS(null, "cheesecake"), null)
+ assert_equals(el.getAttributeNS("", "cheesecake"), null)
+ el.removeAttributeNS("", "CHEEseCaKe")
+}, "Only lowercase attributes are returned on HTML elements (mixed case attribute)")
+test(function() {
+ var el = document.createElement("div")
+ document.body.appendChild(el)
+ el.setAttributeNS("", "align", "left")
+ el.setAttributeNS("xx", "align", "right")
+ el.setAttributeNS("", "foo", "left")
+ el.setAttributeNS("xx", "foo", "right")
+ assert_equals(el.hasAttribute("align"), true)
+ assert_equals(el.hasAttribute("foo"), true)
+ assert_equals(el.hasAttributeNS("xx", "align"), true)
+ assert_equals(el.hasAttributeNS(null, "foo"), true)
+ assert_equals(el.getAttribute("align"), "left")
+ assert_equals(el.getAttribute("foo"), "left")
+ assert_equals(el.getAttributeNS("xx", "align"), "right")
+ assert_equals(el.getAttributeNS(null, "foo"), "left")
+ assert_equals(el.getAttributeNS("", "foo"), "left")
+ el.removeAttributeNS("", "align")
+ el.removeAttributeNS("xx", "align")
+ el.removeAttributeNS("", "foo")
+ el.removeAttributeNS("xx", "foo")
+ document.body.removeChild(el)
+}, "First set attribute is returned with mapped attribute set first")
+test(function() {
+ var el = document.createElement("div")
+ el.setAttributeNS("xx", "align", "right")
+ el.setAttributeNS("", "align", "left")
+ el.setAttributeNS("xx", "foo", "right")
+ el.setAttributeNS("", "foo", "left")
+ assert_equals(el.hasAttribute("align"), true)
+ assert_equals(el.hasAttribute("foo"), true)
+ assert_equals(el.hasAttributeNS("xx", "align"), true)
+ assert_equals(el.hasAttributeNS(null, "foo"), true)
+ assert_equals(el.getAttribute("align"), "right")
+ assert_equals(el.getAttribute("foo"), "right")
+ assert_equals(el.getAttributeNS("xx", "align"), "right")
+ assert_equals(el.getAttributeNS(null, "foo"), "left")
+ assert_equals(el.getAttributeNS("", "foo"), "left")
+ el.removeAttributeNS("", "align")
+ el.removeAttributeNS("xx", "align")
+ el.removeAttributeNS("", "foo")
+ el.removeAttributeNS("xx", "foo")
+}, "First set attribute is returned with mapped attribute set later")
+
+test(function() {
+ var el = document.createElementNS("http://www.example.com", "foo")
+ el.setAttribute("A", "test")
+ assert_equals(el.hasAttribute("A"), true, "hasAttribute()")
+ assert_equals(el.hasAttributeNS("", "A"), true, "el.hasAttributeNS(\"\")")
+ assert_equals(el.hasAttributeNS(null, "A"), true, "el.hasAttributeNS(null)")
+ assert_equals(el.hasAttributeNS(undefined, "A"), true, "el.hasAttributeNS(undefined)")
+ assert_equals(el.hasAttributeNS("foo", "A"), false, "el.hasAttributeNS(\"foo\")")
+
+ assert_equals(el.getAttribute("A"), "test", "getAttribute()")
+ assert_equals(el.getAttributeNS("", "A"), "test", "el.getAttributeNS(\"\")")
+ assert_equals(el.getAttributeNS(null, "A"), "test", "el.getAttributeNS(null)")
+ assert_equals(el.getAttributeNS(undefined, "A"), "test", "el.getAttributeNS(undefined)")
+ assert_equals(el.getAttributeNS("foo", "A"), null, "el.getAttributeNS(\"foo\")")
+}, "Non-HTML element with upper-case attribute")
+
+test(function() {
+ var el = document.createElement("div")
+ el.setAttribute("pre:fix", "value 1")
+ el.setAttribute("fix", "value 2")
+
+ var prefixed = el.attributes[0]
+ assert_equals(prefixed.localName, "pre:fix", "prefixed local name")
+ assert_equals(prefixed.namespaceURI, null, "prefixed namespace")
+
+ var unprefixed = el.attributes[1]
+ assert_equals(unprefixed.localName, "fix", "unprefixed local name")
+ assert_equals(unprefixed.namespaceURI, null, "unprefixed namespace")
+
+ el.removeAttributeNS(null, "pre:fix")
+ assert_equals(el.attributes[0], unprefixed)
+}, "Attribute with prefix in local name")
+
+test(function() {
+ var el = document.createElement("div")
+ el.setAttribute("foo", "bar")
+ var attr = el.attributes[0]
+ assert_equals(attr.ownerElement, el)
+ el.removeAttribute("foo")
+ assert_equals(attr.ownerElement, null)
+}, "Attribute loses its owner when removed")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesattributesjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/attributes.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/attributes.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/attributes.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+function attr_is(attr, v, ln, ns, p, n) {
+ assert_equals(attr.value, v)
+ assert_equals(attr.nodeValue, v)
+ assert_equals(attr.textContent, v)
+ assert_equals(attr.localName, ln)
+ assert_equals(attr.namespaceURI, ns)
+ assert_equals(attr.prefix, p)
+ assert_equals(attr.name, n)
+ assert_equals(attr.specified, true)
+}
+
+function attributes_are(el, l) {
+ for (var i = 0, il = l.length; i < il; i++) {
+ attr_is(el.attributes[i], l[i][1], l[i][0], (l[i].length < 3) ? null : l[i][2], null, l[i][0])
+ assert_equals(el.attributes[i].ownerElement, el)
+ }
+}
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodescaseexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/case-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/case-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/case-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,287 @@
</span><ins>+
+PASS createElement abc
+PASS setAttribute abc
+PASS getAttribute abc
+PASS getElementsByTagName a:abc
+PASS getElementsByTagName abc
+PASS createElement Abc
+PASS setAttribute Abc
+PASS getAttribute Abc
+PASS getElementsByTagName a:Abc
+PASS getElementsByTagName Abc
+PASS createElement ABC
+PASS setAttribute ABC
+PASS getAttribute ABC
+PASS getElementsByTagName a:ABC
+PASS getElementsByTagName ABC
+PASS createElement ä
+PASS setAttribute ä
+PASS getAttribute ä
+PASS getElementsByTagName a:ä
+PASS getElementsByTagName ä
+FAIL createElement Ä assert_equals: expected "Ä" but got "ä"
+PASS setAttribute Ä
+PASS getAttribute Ä
+PASS getElementsByTagName a:Ä
+PASS getElementsByTagName Ä
+PASS createElementNS http://www.w3.org/1999/xhtml,abc,abc
+PASS setAttributeNS http://www.w3.org/1999/xhtml,abc,abc
+PASS getAttributeNS http://www.w3.org/1999/xhtml,abc,abc
+PASS createElementNS http://www.w3.org/1999/xhtml,abc,Abc
+PASS setAttributeNS http://www.w3.org/1999/xhtml,abc,Abc
+FAIL getAttributeNS http://www.w3.org/1999/xhtml,abc,Abc assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/1999/xhtml,abc,ABC
+PASS setAttributeNS http://www.w3.org/1999/xhtml,abc,ABC
+FAIL getAttributeNS http://www.w3.org/1999/xhtml,abc,ABC assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/1999/xhtml,abc,ä
+PASS setAttributeNS http://www.w3.org/1999/xhtml,abc,ä
+PASS getAttributeNS http://www.w3.org/1999/xhtml,abc,ä
+PASS createElementNS http://www.w3.org/1999/xhtml,abc,Ä
+PASS setAttributeNS http://www.w3.org/1999/xhtml,abc,Ä
+PASS getAttributeNS http://www.w3.org/1999/xhtml,abc,Ä
+PASS createElementNS http://www.w3.org/1999/xhtml,Abc,abc
+PASS setAttributeNS http://www.w3.org/1999/xhtml,Abc,abc
+PASS getAttributeNS http://www.w3.org/1999/xhtml,Abc,abc
+PASS createElementNS http://www.w3.org/1999/xhtml,Abc,Abc
+PASS setAttributeNS http://www.w3.org/1999/xhtml,Abc,Abc
+FAIL getAttributeNS http://www.w3.org/1999/xhtml,Abc,Abc assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/1999/xhtml,Abc,ABC
+PASS setAttributeNS http://www.w3.org/1999/xhtml,Abc,ABC
+FAIL getAttributeNS http://www.w3.org/1999/xhtml,Abc,ABC assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/1999/xhtml,Abc,ä
+PASS setAttributeNS http://www.w3.org/1999/xhtml,Abc,ä
+PASS getAttributeNS http://www.w3.org/1999/xhtml,Abc,ä
+PASS createElementNS http://www.w3.org/1999/xhtml,Abc,Ä
+PASS setAttributeNS http://www.w3.org/1999/xhtml,Abc,Ä
+PASS getAttributeNS http://www.w3.org/1999/xhtml,Abc,Ä
+PASS createElementNS http://www.w3.org/1999/xhtml,ABC,abc
+PASS setAttributeNS http://www.w3.org/1999/xhtml,ABC,abc
+PASS getAttributeNS http://www.w3.org/1999/xhtml,ABC,abc
+PASS createElementNS http://www.w3.org/1999/xhtml,ABC,Abc
+PASS setAttributeNS http://www.w3.org/1999/xhtml,ABC,Abc
+FAIL getAttributeNS http://www.w3.org/1999/xhtml,ABC,Abc assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/1999/xhtml,ABC,ABC
+PASS setAttributeNS http://www.w3.org/1999/xhtml,ABC,ABC
+FAIL getAttributeNS http://www.w3.org/1999/xhtml,ABC,ABC assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/1999/xhtml,ABC,ä
+PASS setAttributeNS http://www.w3.org/1999/xhtml,ABC,ä
+PASS getAttributeNS http://www.w3.org/1999/xhtml,ABC,ä
+PASS createElementNS http://www.w3.org/1999/xhtml,ABC,Ä
+PASS setAttributeNS http://www.w3.org/1999/xhtml,ABC,Ä
+PASS getAttributeNS http://www.w3.org/1999/xhtml,ABC,Ä
+PASS createElementNS http://www.w3.org/1999/xhtml,ä,abc
+PASS setAttributeNS http://www.w3.org/1999/xhtml,ä,abc
+PASS getAttributeNS http://www.w3.org/1999/xhtml,ä,abc
+PASS createElementNS http://www.w3.org/1999/xhtml,ä,Abc
+PASS setAttributeNS http://www.w3.org/1999/xhtml,ä,Abc
+FAIL getAttributeNS http://www.w3.org/1999/xhtml,ä,Abc assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/1999/xhtml,ä,ABC
+PASS setAttributeNS http://www.w3.org/1999/xhtml,ä,ABC
+FAIL getAttributeNS http://www.w3.org/1999/xhtml,ä,ABC assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/1999/xhtml,ä,ä
+PASS setAttributeNS http://www.w3.org/1999/xhtml,ä,ä
+PASS getAttributeNS http://www.w3.org/1999/xhtml,ä,ä
+PASS createElementNS http://www.w3.org/1999/xhtml,ä,Ä
+PASS setAttributeNS http://www.w3.org/1999/xhtml,ä,Ä
+PASS getAttributeNS http://www.w3.org/1999/xhtml,ä,Ä
+PASS createElementNS http://www.w3.org/1999/xhtml,Ä,abc
+PASS setAttributeNS http://www.w3.org/1999/xhtml,Ä,abc
+PASS getAttributeNS http://www.w3.org/1999/xhtml,Ä,abc
+PASS createElementNS http://www.w3.org/1999/xhtml,Ä,Abc
+PASS setAttributeNS http://www.w3.org/1999/xhtml,Ä,Abc
+FAIL getAttributeNS http://www.w3.org/1999/xhtml,Ä,Abc assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/1999/xhtml,Ä,ABC
+PASS setAttributeNS http://www.w3.org/1999/xhtml,Ä,ABC
+FAIL getAttributeNS http://www.w3.org/1999/xhtml,Ä,ABC assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/1999/xhtml,Ä,ä
+PASS setAttributeNS http://www.w3.org/1999/xhtml,Ä,ä
+PASS getAttributeNS http://www.w3.org/1999/xhtml,Ä,ä
+PASS createElementNS http://www.w3.org/1999/xhtml,Ä,Ä
+PASS setAttributeNS http://www.w3.org/1999/xhtml,Ä,Ä
+PASS getAttributeNS http://www.w3.org/1999/xhtml,Ä,Ä
+PASS createElementNS http://www.w3.org/2000/svg,abc,abc
+PASS setAttributeNS http://www.w3.org/2000/svg,abc,abc
+PASS getAttributeNS http://www.w3.org/2000/svg,abc,abc
+PASS createElementNS http://www.w3.org/2000/svg,abc,Abc
+PASS setAttributeNS http://www.w3.org/2000/svg,abc,Abc
+FAIL getAttributeNS http://www.w3.org/2000/svg,abc,Abc assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/2000/svg,abc,ABC
+PASS setAttributeNS http://www.w3.org/2000/svg,abc,ABC
+FAIL getAttributeNS http://www.w3.org/2000/svg,abc,ABC assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/2000/svg,abc,ä
+PASS setAttributeNS http://www.w3.org/2000/svg,abc,ä
+PASS getAttributeNS http://www.w3.org/2000/svg,abc,ä
+PASS createElementNS http://www.w3.org/2000/svg,abc,Ä
+PASS setAttributeNS http://www.w3.org/2000/svg,abc,Ä
+PASS getAttributeNS http://www.w3.org/2000/svg,abc,Ä
+PASS createElementNS http://www.w3.org/2000/svg,Abc,abc
+PASS setAttributeNS http://www.w3.org/2000/svg,Abc,abc
+PASS getAttributeNS http://www.w3.org/2000/svg,Abc,abc
+PASS createElementNS http://www.w3.org/2000/svg,Abc,Abc
+PASS setAttributeNS http://www.w3.org/2000/svg,Abc,Abc
+FAIL getAttributeNS http://www.w3.org/2000/svg,Abc,Abc assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/2000/svg,Abc,ABC
+PASS setAttributeNS http://www.w3.org/2000/svg,Abc,ABC
+FAIL getAttributeNS http://www.w3.org/2000/svg,Abc,ABC assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/2000/svg,Abc,ä
+PASS setAttributeNS http://www.w3.org/2000/svg,Abc,ä
+PASS getAttributeNS http://www.w3.org/2000/svg,Abc,ä
+PASS createElementNS http://www.w3.org/2000/svg,Abc,Ä
+PASS setAttributeNS http://www.w3.org/2000/svg,Abc,Ä
+PASS getAttributeNS http://www.w3.org/2000/svg,Abc,Ä
+PASS createElementNS http://www.w3.org/2000/svg,ABC,abc
+PASS setAttributeNS http://www.w3.org/2000/svg,ABC,abc
+PASS getAttributeNS http://www.w3.org/2000/svg,ABC,abc
+PASS createElementNS http://www.w3.org/2000/svg,ABC,Abc
+PASS setAttributeNS http://www.w3.org/2000/svg,ABC,Abc
+FAIL getAttributeNS http://www.w3.org/2000/svg,ABC,Abc assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/2000/svg,ABC,ABC
+PASS setAttributeNS http://www.w3.org/2000/svg,ABC,ABC
+FAIL getAttributeNS http://www.w3.org/2000/svg,ABC,ABC assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/2000/svg,ABC,ä
+PASS setAttributeNS http://www.w3.org/2000/svg,ABC,ä
+PASS getAttributeNS http://www.w3.org/2000/svg,ABC,ä
+PASS createElementNS http://www.w3.org/2000/svg,ABC,Ä
+PASS setAttributeNS http://www.w3.org/2000/svg,ABC,Ä
+PASS getAttributeNS http://www.w3.org/2000/svg,ABC,Ä
+PASS createElementNS http://www.w3.org/2000/svg,ä,abc
+PASS setAttributeNS http://www.w3.org/2000/svg,ä,abc
+PASS getAttributeNS http://www.w3.org/2000/svg,ä,abc
+PASS createElementNS http://www.w3.org/2000/svg,ä,Abc
+PASS setAttributeNS http://www.w3.org/2000/svg,ä,Abc
+FAIL getAttributeNS http://www.w3.org/2000/svg,ä,Abc assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/2000/svg,ä,ABC
+PASS setAttributeNS http://www.w3.org/2000/svg,ä,ABC
+FAIL getAttributeNS http://www.w3.org/2000/svg,ä,ABC assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/2000/svg,ä,ä
+PASS setAttributeNS http://www.w3.org/2000/svg,ä,ä
+PASS getAttributeNS http://www.w3.org/2000/svg,ä,ä
+PASS createElementNS http://www.w3.org/2000/svg,ä,Ä
+PASS setAttributeNS http://www.w3.org/2000/svg,ä,Ä
+PASS getAttributeNS http://www.w3.org/2000/svg,ä,Ä
+PASS createElementNS http://www.w3.org/2000/svg,Ä,abc
+PASS setAttributeNS http://www.w3.org/2000/svg,Ä,abc
+PASS getAttributeNS http://www.w3.org/2000/svg,Ä,abc
+PASS createElementNS http://www.w3.org/2000/svg,Ä,Abc
+PASS setAttributeNS http://www.w3.org/2000/svg,Ä,Abc
+FAIL getAttributeNS http://www.w3.org/2000/svg,Ä,Abc assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/2000/svg,Ä,ABC
+PASS setAttributeNS http://www.w3.org/2000/svg,Ä,ABC
+FAIL getAttributeNS http://www.w3.org/2000/svg,Ä,ABC assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://www.w3.org/2000/svg,Ä,ä
+PASS setAttributeNS http://www.w3.org/2000/svg,Ä,ä
+PASS getAttributeNS http://www.w3.org/2000/svg,Ä,ä
+PASS createElementNS http://www.w3.org/2000/svg,Ä,Ä
+PASS setAttributeNS http://www.w3.org/2000/svg,Ä,Ä
+PASS getAttributeNS http://www.w3.org/2000/svg,Ä,Ä
+PASS createElementNS http://FOO,abc,abc
+PASS setAttributeNS http://FOO,abc,abc
+PASS getAttributeNS http://FOO,abc,abc
+PASS createElementNS http://FOO,abc,Abc
+PASS setAttributeNS http://FOO,abc,Abc
+FAIL getAttributeNS http://FOO,abc,Abc assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://FOO,abc,ABC
+PASS setAttributeNS http://FOO,abc,ABC
+FAIL getAttributeNS http://FOO,abc,ABC assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://FOO,abc,ä
+PASS setAttributeNS http://FOO,abc,ä
+PASS getAttributeNS http://FOO,abc,ä
+PASS createElementNS http://FOO,abc,Ä
+PASS setAttributeNS http://FOO,abc,Ä
+PASS getAttributeNS http://FOO,abc,Ä
+PASS createElementNS http://FOO,Abc,abc
+PASS setAttributeNS http://FOO,Abc,abc
+PASS getAttributeNS http://FOO,Abc,abc
+PASS createElementNS http://FOO,Abc,Abc
+PASS setAttributeNS http://FOO,Abc,Abc
+FAIL getAttributeNS http://FOO,Abc,Abc assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://FOO,Abc,ABC
+PASS setAttributeNS http://FOO,Abc,ABC
+FAIL getAttributeNS http://FOO,Abc,ABC assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://FOO,Abc,ä
+PASS setAttributeNS http://FOO,Abc,ä
+PASS getAttributeNS http://FOO,Abc,ä
+PASS createElementNS http://FOO,Abc,Ä
+PASS setAttributeNS http://FOO,Abc,Ä
+PASS getAttributeNS http://FOO,Abc,Ä
+PASS createElementNS http://FOO,ABC,abc
+PASS setAttributeNS http://FOO,ABC,abc
+PASS getAttributeNS http://FOO,ABC,abc
+PASS createElementNS http://FOO,ABC,Abc
+PASS setAttributeNS http://FOO,ABC,Abc
+FAIL getAttributeNS http://FOO,ABC,Abc assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://FOO,ABC,ABC
+PASS setAttributeNS http://FOO,ABC,ABC
+FAIL getAttributeNS http://FOO,ABC,ABC assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://FOO,ABC,ä
+PASS setAttributeNS http://FOO,ABC,ä
+PASS getAttributeNS http://FOO,ABC,ä
+PASS createElementNS http://FOO,ABC,Ä
+PASS setAttributeNS http://FOO,ABC,Ä
+PASS getAttributeNS http://FOO,ABC,Ä
+PASS createElementNS http://FOO,ä,abc
+PASS setAttributeNS http://FOO,ä,abc
+PASS getAttributeNS http://FOO,ä,abc
+PASS createElementNS http://FOO,ä,Abc
+PASS setAttributeNS http://FOO,ä,Abc
+FAIL getAttributeNS http://FOO,ä,Abc assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://FOO,ä,ABC
+PASS setAttributeNS http://FOO,ä,ABC
+FAIL getAttributeNS http://FOO,ä,ABC assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://FOO,ä,ä
+PASS setAttributeNS http://FOO,ä,ä
+PASS getAttributeNS http://FOO,ä,ä
+PASS createElementNS http://FOO,ä,Ä
+PASS setAttributeNS http://FOO,ä,Ä
+PASS getAttributeNS http://FOO,ä,Ä
+PASS createElementNS http://FOO,Ä,abc
+PASS setAttributeNS http://FOO,Ä,abc
+PASS getAttributeNS http://FOO,Ä,abc
+PASS createElementNS http://FOO,Ä,Abc
+PASS setAttributeNS http://FOO,Ä,Abc
+FAIL getAttributeNS http://FOO,Ä,Abc assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://FOO,Ä,ABC
+PASS setAttributeNS http://FOO,Ä,ABC
+FAIL getAttributeNS http://FOO,Ä,ABC assert_equals: expected (object) null but got (string) ""
+PASS createElementNS http://FOO,Ä,ä
+PASS setAttributeNS http://FOO,Ä,ä
+PASS getAttributeNS http://FOO,Ä,ä
+PASS createElementNS http://FOO,Ä,Ä
+PASS setAttributeNS http://FOO,Ä,Ä
+PASS getAttributeNS http://FOO,Ä,Ä
+PASS getElementsByTagNameNS ,abc
+PASS getElementsByTagNameNS ,Abc
+PASS getElementsByTagNameNS ,ABC
+PASS getElementsByTagNameNS ,ä
+PASS getElementsByTagNameNS ,Ä
+PASS getElementsByTagNameNS http://www.w3.org/1999/xhtml,abc
+PASS getElementsByTagNameNS http://www.w3.org/1999/xhtml,Abc
+PASS getElementsByTagNameNS http://www.w3.org/1999/xhtml,ABC
+PASS getElementsByTagNameNS http://www.w3.org/1999/xhtml,ä
+PASS getElementsByTagNameNS http://www.w3.org/1999/xhtml,Ä
+PASS getElementsByTagNameNS http://www.w3.org/2000/svg,abc
+PASS getElementsByTagNameNS http://www.w3.org/2000/svg,Abc
+PASS getElementsByTagNameNS http://www.w3.org/2000/svg,ABC
+PASS getElementsByTagNameNS http://www.w3.org/2000/svg,ä
+PASS getElementsByTagNameNS http://www.w3.org/2000/svg,Ä
+PASS getElementsByTagNameNS http://FOO,abc
+PASS getElementsByTagNameNS http://FOO,Abc
+PASS getElementsByTagNameNS http://FOO,ABC
+PASS getElementsByTagNameNS http://FOO,ä
+PASS getElementsByTagNameNS http://FOO,Ä
+PASS createElementNS abc
+PASS setAttributeNS abc
+PASS getAttributeNS abc
+PASS createElementNS Abc
+PASS setAttributeNS Abc
+FAIL getAttributeNS Abc assert_equals: expected (object) null but got (string) ""
+PASS createElementNS ABC
+PASS setAttributeNS ABC
+FAIL getAttributeNS ABC assert_equals: expected (object) null but got (string) ""
+PASS createElementNS ä
+PASS setAttributeNS ä
+PASS getAttributeNS ä
+PASS createElementNS Ä
+PASS setAttributeNS Ä
+PASS getAttributeNS Ä
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodescasehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/case.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/case.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/case.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>Tests for case-sensitivity in APIs</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-createelement">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-createelementns">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-getelementsbytagname">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-getelementsbytagnamens">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-setattribute">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-setattributens">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-hasattribute">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-hasattributens">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-getelementsbytagname">
+<link rel=help href="https://dom.spec.whatwg.org/#dom-element-getelementsbytagnamens">
+<script>var is_html = true;</script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="case.js"></script>
+<div id="log"></div>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodescasejs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/case.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/case.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/case.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,179 @@
</span><ins>+/*
+ * document.createElement(NS)
+ *
+ * document.getElementsByTagName(NS)
+ *
+ * Element.setAttribute(NS)
+ *
+ * Element.getAttribute(NS)
+ * Element.hasAttribute(NS)
+ * Element.getElementsByTagName(NS)
+ */
+
+var tests = [];
+setup(function() {
+ var name_inputs = ["abc", "Abc", "ABC", "ä", "Ä"];
+ var namespaces = ["http://www.w3.org/1999/xhtml", "http://www.w3.org/2000/svg", "http://FOO"];
+ name_inputs.forEach(function(x) {
+ tests.push(["createElement " + x, test_create_element, [x]]);
+ tests.push(["setAttribute " +x, test_set_attribute, [x]]);
+ tests.push(["getAttribute " +x, test_get_attribute, [x]]);
+ tests.push(["getElementsByTagName a:" +x, test_get_elements_tag_name,
+ [outer_product(namespaces, ["a"], name_inputs),
+ x]]);
+ tests.push(["getElementsByTagName " +x, test_get_elements_tag_name,
+ [outer_product(namespaces, [null], name_inputs),
+ x]]);
+ });
+ outer_product(namespaces, name_inputs, name_inputs).forEach(function(x) {
+ tests.push(["createElementNS " + x, test_create_element_ns, x]);
+ tests.push(["setAttributeNS " + x, test_set_attribute_ns, x]);
+ tests.push(["getAttributeNS " + x, test_get_attribute_ns, x]);
+ });
+ outer_product([null].concat(namespaces), name_inputs).forEach(function(x) {
+ tests.push(["getElementsByTagNameNS " + x, test_get_elements_tag_name_ns,
+ outer_product(namespaces, name_inputs), x]);
+ });
+ name_inputs.forEach(function(x) {
+ tests.push(["createElementNS " + x, test_create_element_ns, [null, null, x]]);
+ tests.push(["setAttributeNS " + x, test_set_attribute_ns, [null, null, x]]);
+ tests.push(["getAttributeNS " + x, test_get_attribute_ns, [null, null, x]]);
+ });
+
+ });
+function outer_product() {
+ var rv = [];
+ function compute_outer_product() {
+ var args = Array.prototype.slice.call(arguments);
+ var index = args[0];
+ if (index < args.length) {
+ args[index].forEach(function(x) {
+ compute_outer_product.apply(this, [index+1].concat(args.slice(1, index), x, args.slice(index+1)));
+ });
+ } else {
+ rv.push(args.slice(1));
+ }
+ }
+ compute_outer_product.apply(this, [1].concat(Array.prototype.slice.call(arguments)));
+ return rv;
+}
+
+function expected_case(input) {
+ //is_html gets set by a global on the page loading the tests
+ if (is_html) {
+ return ascii_lowercase(input);
+ } else {
+ return input;
+ }
+}
+
+function ascii_lowercase(input) {
+ return input.replace(/[A-Z]/g, function(x) {
+ return x.toLowerCase();
+ });
+}
+
+function test_create_element(name) {
+ var node = document.createElement(name);
+ assert_equals(node.localName, expected_case(name));
+}
+
+function test_create_element_ns(namespace, prefix, local_name) {
+ var qualified_name = prefix ? prefix + ":" + local_name : local_name;
+ var node = document.createElementNS(namespace, qualified_name);
+ assert_equals(node.prefix, prefix, "prefix");
+ assert_equals(node.localName, local_name, "localName");
+}
+
+function test_set_attribute(name) {
+ var node = document.createElement("div");
+ node.setAttribute(name, "test");
+ assert_equals(node.attributes[0].localName, expected_case(name));
+}
+
+function test_set_attribute_ns(namespace, prefix, local_name) {
+ var qualified_name = prefix ? prefix + ":" + local_name : local_name;
+ var node = document.createElement("div");
+ node.setAttributeNS(namespace, qualified_name, "test");
+ var attr = node.attributes[0];
+ assert_equals(attr.prefix, prefix, "prefix");
+ assert_equals(attr.localName, local_name, "localName");
+}
+
+function test_get_attribute(name) {
+ var node = document.createElement("div");
+ node.setAttribute(name, "test");
+ var expected_name = expected_case(name);
+ assert_equals(node.getAttribute(expected_name), "test");
+ if (expected_name != name) {
+ assert_equals(node.getAttribute(expected_name), "test");
+ } else if (name !== ascii_lowercase(name)) {
+ assert_equals(node.getAttribute(ascii_lowercase(name)), null);
+ }
+}
+
+function test_get_attribute_ns(namespace, prefix, local_name) {
+ var qualified_name = prefix ? prefix + ":" + local_name : local_name;
+ var node = document.createElement("div");
+ node.setAttributeNS(namespace, qualified_name, "test");
+ var expected_name = local_name;
+ assert_equals(node.getAttributeNS(namespace, expected_name), "test");
+ if (local_name !== ascii_lowercase(local_name)) {
+ assert_equals(node.getAttributeNS(namespace, ascii_lowercase(local_name)), null);
+ }
+}
+
+function test_get_elements_tag_name(elements_to_create, search_string) {
+ var container = document.createElement("div");
+ elements_to_create.forEach(function(x) {
+ var qualified_name = x[1] ? x[1] + ":" + x[2] : x[2];
+ var element = document.createElementNS(x[0], qualified_name);
+ container.appendChild(element);
+ });
+ var expected = Array.prototype.filter.call(container.childNodes,
+ function(node) {
+ if (is_html && node.namespaceURI === "http://www.w3.org/1999/xhtml") {
+ return node.localName === expected_case(search_string);
+ } else {
+ return node.localName === search_string;
+ }
+ });
+ document.documentElement.appendChild(container);
+ try {
+ assert_array_equals(document.getElementsByTagName(search_string), expected);
+ } finally {
+ document.documentElement.removeChild(container);
+ }
+}
+
+function test_get_elements_tag_name_ns(elements_to_create, search_input) {
+ var search_uri = search_input[0];
+ var search_name = search_input[1];
+ var container = document.createElement("div");
+ elements_to_create.forEach(function(x) {
+ var qualified_name = x[1] ? x[1] + ":" + x[2] : x[2];
+ var element = document.createElementNS(x[0], qualified_name);
+ container.appendChild(element);
+ });
+ var expected = Array.prototype.filter.call(container.childNodes,
+ function(node) {
+ return node.namespaceURI === search_uri;
+ return node.localName === search_name;
+ });
+ document.documentElement.appendChild(container);
+ try {
+ assert_array_equals(document.getElementsByTagNameNS(search_uri, search_name), expected);
+ } catch(e) {
+ throw e;
+ } finally {
+ document.documentElement.removeChild(container);
+ }
+}
+
+function test_func() {
+ var func = arguments[0];
+ var rest = arguments[1];
+ func.apply(this, rest);
+}
+
+generate_tests(test_func, tests);
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodescreatorsjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/creators.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/creators.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/creators.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+var creators = {
+ "element": "createElement",
+ "text": "createTextNode",
+ "comment": "createComment"
+};
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesencodingpy"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/encoding.py (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/encoding.py         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/encoding.py        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+from cgi import escape
+
+def main(request, response):
+ label = request.GET.first('label')
+ return """<!doctype html><meta charset="%s">""" % escape(label)
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName01expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-01-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-01-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-01-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS document.getElementsByClassName(): simple
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName01htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-01.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-01.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-01.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+<!doctype html>
+<html class="a">
+ <head>
+ <title>document.getElementsByClassName(): simple</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body class="a">
+ <div id="log"></div>
+ <script> test(function() {assert_array_equals(document.getElementsByClassName("\ta\n"),
+ [document.documentElement, document.body])}) </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName02expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-02-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-02-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-02-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS document.getElementsByClassName(): also simple
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName02htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-02.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-02.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-02.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+<!doctype html>
+<html class="a
+b">
+ <head>
+ <title>document.getElementsByClassName(): also simple</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body class="a
+">
+ <div id="log"></div>
+ <script> test(function() {assert_array_equals(document.getElementsByClassName("a\n"), [document.documentElement, document.body])}) </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName03expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-03-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-03-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-03-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS document.getElementsByClassName(): changing classes
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName03htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-03.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-03.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-03.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+<!doctype html>
+<html class="a">
+ <head>
+ <title>document.getElementsByClassName(): changing classes</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body class="a">
+ <div id="log"></div>
+ <script>
+ test(function() {
+ var collection = document.getElementsByClassName("a")
+ document.body.className = "b"
+ assert_array_equals(collection, [document.documentElement])
+ })
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName04expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-04-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-04-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-04-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS document.getElementsByClassName(): changing classes
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName04htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-04.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-04.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-04.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+<!doctype html>
+<html class="a">
+ <head>
+ <title>document.getElementsByClassName(): changing classes</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body class="a">
+ <div id="log"></div>
+ <script>
+ test(function() {
+ var collection = document.getElementsByClassName("a");
+ document.body.className += "\tb";
+ assert_array_equals(collection, [document.documentElement, document.body]);
+ })
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName05expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-05-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-05-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-05-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS document.getElementsByClassName(): changing classes
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName05htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-05.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-05.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-05.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+<!doctype html>
+<html class="a">
+ <head>
+ <title>document.getElementsByClassName(): changing classes</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body class="a">
+ <div id="log"></div>
+ <script>
+ test(function() {
+ var collection = document.getElementsByClassName("a");
+ document.body.removeAttribute("class");
+ assert_array_equals(collection, [document.documentElement]);
+ })
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName06expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-06-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-06-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-06-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS document.getElementsByClassName(): adding element with class
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName06htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-06.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-06.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-06.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+<!doctype html>
+<html>
+ <head>
+ <title>document.getElementsByClassName(): adding element with class</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body class="a">
+ <div id="log"></div>
+ <script>
+ test(function() {
+ var collection = document.getElementsByClassName("a");
+ var ele = document.createElement("foo");
+ ele.setAttribute("class", "a");
+ document.body.appendChild(ele);
+ assert_array_equals(collection, [document.body, ele]);
+ })
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName07expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-07-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-07-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-07-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS document.getElementsByClassName(): multiple classes
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName07htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-07.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-07.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-07.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+<!doctype html>
+<html>
+ <head>
+ <title>document.getElementsByClassName(): multiple classes</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body class="a b">
+ <div id="log"></div>
+ <script> test(function() {
+ assert_array_equals(document.getElementsByClassName("b\t\f\n\na\rb"), [document.body]);
+ })
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName08expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-08-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-08-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-08-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS document.getElementsByClassName(): multiple classes
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName08htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-08.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-08.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-08.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+<!doctype html>
+<html>
+ <head>
+ <title>document.getElementsByClassName(): multiple classes</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body class="a">
+ <div id="log"></div>
+ <script> test(function() {
+ document.getElementsByClassName("a\fa"), [document.body]
+ })
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName09expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-09-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-09-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-09-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS document.getElementsByClassName(): case sensitive
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName09htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-09.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-09.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-09.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+<!doctype html>
+<html class="a A">
+ <head>
+ <title>document.getElementsByClassName(): case sensitive</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body class="a a">
+ <div id="log"></div>
+ <script>test(function() {
+ assert_array_equals(document.getElementsByClassName("A a"), [document.documentElement])
+ })
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName10expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-10-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-10-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-10-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS document.getElementsByClassName(): compound
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName10xhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-10.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-10.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-10.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:g="http://www.w3.org/2000/svg">
+ <head>
+ <title>document.getElementsByClassName(): compound</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body>
+ <div id="log"/>
+ <x class="a"/>
+ <g:x class="a"/>
+ <script>test(function() {
+ assert_array_equals(document.getElementsByClassName("a"),
+ document.getElementsByTagName("x"));
+ })
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName11expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-11-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-11-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-11-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS document.getElementsByClassName(): "tricky" compound
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName11xhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-11.xhtml (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-11.xhtml         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-11.xhtml        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:g="http://www.w3.org/2000/svg" xmlns:h="http://www.w3.org/1999/xhtml" xmlns:t="http://tc.labs.opera.com/#test">
+ <head>
+ <title>document.getElementsByClassName(): "tricky" compound</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body>
+ <div id="log" />
+ <x class="a"/>
+ <g:x class="a"/>
+ <x t:class="a" h:class="a" g:class="a"/>
+ <g:x t:class="a" h:class="a" g:class="a"/>
+ <t:x class="a" t:class="a" h:class="a" g:class="a"/>
+ <script>
+ test(function() {
+ var collection = document.getElementsByClassName("a");
+ var test = document.getElementsByTagName("x");
+ assert_array_equals(collection, [test[0], test[1]]);
+ })
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName12expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-12-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-12-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-12-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS element.getElementsByClassName(): simple
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName12htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-12.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-12.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-12.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+<!doctype html>
+<html class="a">
+ <head>
+ <title>element.getElementsByClassName(): simple</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body class="a">
+ <div id="log"></div>
+ <script>test(function() {
+ assert_array_equals(document.body.getElementsByClassName("a"), [])
+ })
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName13expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-13-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-13-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-13-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS element.getElementsByClassName(): adding an element
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName13htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-13.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-13.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-13.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+<!doctype html>
+<html class="a">
+ <head>
+ <title>element.getElementsByClassName(): adding an element</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body class="a">
+ <div id="log"></div>
+ <script>test(function() {
+ var collection = document.body.getElementsByClassName("a");
+ var ele = document.createElement("x-y-z");
+ ele.className = "a";
+ document.body.appendChild(ele);
+ assert_array_equals(collection, [ele]);
+ })
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName14expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-14-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-14-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-14-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS document.getElementsByClassName(): case-insensitive (quirks mode)
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName14htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-14.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-14.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-14.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+<!-- quirks mode -->
+<html class="a A">
+ <head>
+ <title>document.getElementsByClassName(): case-insensitive (quirks mode)</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body class="a a">
+ <div id="log"></div>
+ <script>test(function() {
+ assert_array_equals(document.getElementsByClassName("A a"),
+ [document.documentElement, document.body]);
+ })
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName15expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-15-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-15-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-15-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS document.getElementsByClassName(array): "a\n"
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName15htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-15.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-15.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-15.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+<!doctype html>
+<html class="a
+b">
+ <head>
+ <title>document.getElementsByClassName(array): "a\n"</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body class="a
+">
+ <div id="log"></div>
+ <script>test(function () {
+ assert_array_equals(document.getElementsByClassName(["a\n"]),
+ [document.documentElement, document.body]);
+ })
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName16expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-16-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-16-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-16-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS document.getElementsByClassName(array): "b","a"
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName16htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-16.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-16.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-16.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+<!doctype html>
+<html class="a
+b">
+ <head>
+ <title>document.getElementsByClassName(array): "b","a"</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body class="b,a">
+ <div id="log"></div>
+ <script>test(function() {
+ assert_array_equals(document.getElementsByClassName(["b", "a"]), [document.body]);
+ })
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName17expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-17-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-17-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-17-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS document.getElementsByClassName(array): "b a"
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName17htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-17.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-17.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-17.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+<!doctype html>
+<html>
+ <head>
+ <title>document.getElementsByClassName(array): "b a"</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body class="a b">
+ <div id="log"></div>
+ <script>test(function() {
+ assert_array_equals(document.getElementsByClassName(["b a"]), [document.body]);
+ })
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName18expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-18-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-18-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-18-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS element.getElementsByClassName(array): "a", "b"
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName18htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-18.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-18.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-18.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+<!doctype html>
+<html class="a,b">
+ <head>
+ <title>element.getElementsByClassName(array): "a", "b"</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <body class="a,b x">
+ <div id="log"></div>
+ <p id="r" class="a,bx"></p>
+ <script class="xa,b">test(function() {
+ assert_array_equals(document.documentElement.getElementsByClassName(["\fa","b\n"]),
+ [document.body])
+ })
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName19expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-19-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-19-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-19-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+test link #foo
+text
+text caption
+TEXT head
+td text1
+td text
+td te xt
+TEXT foot
+xt te
+
+PASS get elements in document
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName19htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-19.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-19.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-19.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,54 @@
</span><ins>+<!DOCTYPE html>
+<html><head>
+ <title>getElementsByClassName</title>
+ <meta content="get elements in document" name="description">
+ <link href="https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname" rel="help">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+ <body>
+ <div id="log"></div>
+ <div>
+ <div>
+ <a class="text link" href="#foo">test link #foo</a>
+ </div>
+ <b class="text">text</b>
+ </div>
+ <table>
+ <caption class="text caption">text caption</caption>
+ <thead>
+ <tr>
+ <td class="TEXT head">TEXT head</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="td text1">td text1</td>
+ </tr>
+ <tr>
+ <td class="td text">td text</td>
+ </tr>
+ <tr>
+ <td class="td te xt">td te xt</td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td class="TEXT foot">TEXT foot</td>
+ </tr>
+ </tfoot>
+ </table>
+ <div class="xt te">xt te</div>
+
+ <script type="text/javascript">
+ test(function ()
+ {
+ var collection = document.getElementsByClassName("text");
+ assert_equals(collection.length, 4);
+ assert_equals(collection[0].parentNode.nodeName, "DIV");
+ assert_equals(collection[1].parentNode.nodeName, "DIV");
+ assert_equals(collection[2].parentNode.nodeName, "TABLE");
+ assert_equals(collection[3].parentNode.nodeName, "TR");
+ }, "get elements in document");
+ </script>
+</body></html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName20expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-20-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-20-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-20-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+test link #foo
+text
+text caption
+TEXT head
+td text1
+text newDiv
+td text
+td te xt
+TEXT foot
+xt te
+
+PASS get elements in document then add element to collection
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName20htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-20.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-20.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-20.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,61 @@
</span><ins>+<!DOCTYPE html>
+<html><head>
+ <title>getElementsByClassName</title>
+ <meta content="get elements in document then add element to collection" name="description">
+ <link href="https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname" rel="help">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+ <body>
+ <div id="log"></div>
+ <div>
+ <div>
+ <a class="text link" href="#foo">test link #foo</a>
+ </div>
+ <b class="text">text</b>
+ </div>
+ <table>
+ <caption class="text caption">text caption</caption>
+ <thead>
+ <tr>
+ <td class="TEXT head">TEXT head</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="td text1">td text1</td>
+ </tr>
+ <tr>
+ <td class="td text">td text</td>
+ </tr>
+ <tr>
+ <td class="td te xt">td te xt</td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td class="TEXT foot">TEXT foot</td>
+ </tr>
+ </tfoot>
+ </table>
+ <div class="xt te">xt te</div>
+
+ <script type="text/javascript">
+ test(function()
+ {
+ var collection = document.getElementsByClassName("text");
+ assert_equals(collection.length, 4);
+ var newDiv = document.createElement("div");
+ newDiv.setAttribute("class", "text");
+ newDiv.innerHTML = "text newDiv";
+ document.getElementsByTagName("table")[0].tBodies[0].rows[0].cells[0].appendChild(newDiv);
+
+ assert_equals(collection.length, 5);
+ assert_equals(collection[0].parentNode.nodeName, "DIV");
+ assert_equals(collection[1].parentNode.nodeName, "DIV");
+ assert_equals(collection[2].parentNode.nodeName, "TABLE");
+ assert_equals(collection[3].parentNode.nodeName, "TD");
+ assert_equals(collection[4].parentNode.nodeName, "TR");
+ }, "get elements in document then add element to collection");
+ </script>
+</body></html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName21expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-21-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-21-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-21-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+test link #foo
+text
+text caption
+TEXT head
+td text
+td te xt
+TEXT foot
+xt te
+
+PASS delete element from collection
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName21htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-21.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-21.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-21.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,52 @@
</span><ins>+<!DOCTYPE html>
+<html><head>
+ <title>getElementsByClassName</title>
+ <meta content="delete element from collection" name="description">
+ <link href="https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname" rel="help">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+ <body>
+ <div id="log"></div>
+ <div>
+ <div>
+ <a class="text link" href="#foo">test link #foo</a>
+ </div>
+ <b class="text">text</b>
+ </div>
+ <table>
+ <caption class="text caption">text caption</caption>
+ <thead>
+ <tr>
+ <td class="TEXT head">TEXT head</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="td text1">td text1</td>
+ </tr>
+ <tr>
+ <td class="td text">td text</td>
+ </tr>
+ <tr>
+ <td class="td te xt">td te xt</td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td class="TEXT foot">TEXT foot</td>
+ </tr>
+ </tfoot>
+ </table>
+ <div class="xt te">xt te</div>
+
+ <script type="text/javascript">
+ test(function()
+ {
+ var collection = document.getElementsByClassName("text1");
+ assert_equals(collection.length, 1)
+ document.getElementsByTagName("table")[0].deleteRow(1);
+ assert_equals(collection.length, 0);
+ }, "delete element from collection");
+ </script>
+</body></html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName22expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-22-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-22-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-22-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+test link #foo
+text caption
+TEXT head
+td text1text
+td text
+td te xt
+TEXT foot
+xt te
+
+PASS move item in collection order
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName22htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-22.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-22.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-22.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,58 @@
</span><ins>+<!DOCTYPE html>
+<html><head>
+ <title>getElementsByClassName</title>
+ <meta content="move item in collection order" name="description">
+ <link href="https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname" rel="help">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+ <body>
+ <div id="log"></div>
+ <div>
+ <div>
+ <a class="text link" href="#foo">test link #foo</a>
+ </div>
+ <b class="text">text</b>
+ </div>
+ <table>
+ <caption class="text caption">text caption</caption>
+ <thead>
+ <tr>
+ <td class="TEXT head">TEXT head</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="td text1">td text1</td>
+ </tr>
+ <tr>
+ <td class="td text">td text</td>
+ </tr>
+ <tr>
+ <td class="td te xt">td te xt</td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td class="TEXT foot">TEXT foot</td>
+ </tr>
+ </tfoot>
+ </table>
+ <div class="xt te">xt te</div>
+
+ <script type="text/javascript">
+ test(function()
+ {
+ var collection = document.getElementsByClassName("text");
+ assert_equals(collection.length, 4);
+ var boldText = document.getElementsByTagName("b")[0];
+ document.getElementsByTagName("table")[0].tBodies[0].rows[0].cells[0].appendChild(boldText);
+
+ assert_equals(collection.length, 4);
+ assert_equals(collection[0].parentNode.nodeName, "DIV");
+ assert_equals(collection[1].parentNode.nodeName, "TABLE");
+ assert_equals(collection[2].parentNode.nodeName, "TD");
+ assert_equals(collection[3].parentNode.nodeName, "TR");
+ }, "move item in collection order");
+ </script>
+</body></html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName23expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-23-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-23-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-23-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+test link #foo
+text
+text caption
+TEXT head
+td text1
+td text
+td te xt
+TEXT foot
+xt te
+
+PASS multiple defined classes
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName23htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-23.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-23.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-23.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,52 @@
</span><ins>+<!DOCTYPE html>
+<html><head>
+ <title>getElementsByClassName</title>
+ <meta content="multiple defined classes" name="description">
+ <link href="https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname" rel="help">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+ <body>
+ <div id="log"></div>
+ <div>
+ <div>
+ <a class="text link" href="#foo">test link #foo</a>
+ </div>
+ <b class="text">text</b>
+ </div>
+ <table>
+ <caption class="text caption">text caption</caption>
+ <thead>
+ <tr>
+ <td class="TEXT head">TEXT head</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="td text1">td text1</td>
+ </tr>
+ <tr>
+ <td class="td text">td text</td>
+ </tr>
+ <tr>
+ <td class="td te xt">td te xt</td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td class="TEXT foot">TEXT foot</td>
+ </tr>
+ </tfoot>
+ </table>
+ <div class="xt te">xt te</div>
+
+ <script type="text/javascript">
+ test(function()
+ {
+ var collection = document.getElementsByClassName("te xt");
+ assert_equals(collection.length, 2);
+ assert_equals(collection[0].parentNode.nodeName, "TR");
+ assert_equals(collection[1].parentNode.nodeName, "BODY");
+ }, "multiple defined classes");
+ </script>
+</body></html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName24expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-24-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-24-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-24-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+ΔЙあ叶葉 말 link
+text
+ΔЙあ叶葉 קم
+
+PASS handle unicode chars
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName24htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-24.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-24.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-24.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,30 @@
</span><ins>+<!DOCTYPE html>
+<html><head>
+ <meta charset='utf-8'>
+ <title>getElementsByClassName</title>
+ <meta content="handle unicode chars" name="description">
+ <link href="https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname" rel="help">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+ <body>
+ <div id="log"></div>
+ <div>
+ <div>
+ <a class="ΔЙあ叶葉 말 link" href="#foo">ΔЙあ叶葉 말 link</a>
+ </div>
+ <b class="text">text</b>
+ </div>
+ <div class="ΔЙあ叶葉 קم">ΔЙあ叶葉 קم</div>
+
+ <script type="text/javascript">
+ test(function()
+ {
+ var collection = document.getElementsByClassName("ΔЙあ叶葉");
+ assert_equals(collection.length, 2);
+ assert_equals(collection[0].parentNode.nodeName, "DIV");
+ assert_equals(collection[1].parentNode.nodeName, "BODY");
+ }, "handle unicode chars");
+ </script>
+
+</body></html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName25expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-25-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-25-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-25-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+test link #foo
+text caption
+TEXT head
+td text1text
+td text
+td te xt
+TEXT foot
+xt te
+
+PASS verify spacing is handled correctly
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName25htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-25.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-25.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-25.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,57 @@
</span><ins>+<!DOCTYPE html>
+<html><head>
+ <title>getElementsByClassName</title>
+ <meta content="verify spacing is handled correctly" name="description">
+ <link href="https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname" rel="help">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+ <body>
+ <div id="log"></div>
+ <div>
+ <div>
+ <a class="text link" href="#foo">test link #foo</a>
+ </div>
+ <b class="text">text</b>
+ </div>
+ <table>
+ <caption class="text caption">text caption</caption>
+ <thead>
+ <tr>
+ <td class="TEXT head">TEXT head</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="td text1">td text1</td>
+ </tr>
+ <tr>
+ <td class="td text">td text</td>
+ </tr>
+ <tr>
+ <td class="td te xt">td te xt</td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td class="TEXT foot">TEXT foot</td>
+ </tr>
+ </tfoot>
+ </table>
+ <div class="xt te">xt te</div>
+
+ <script type="text/javascript">
+ test(function()
+ {
+ var collection = document.getElementsByClassName("text ");
+ assert_equals(collection.length, 4);
+ var boldText = document.getElementsByTagName("b")[0];
+ document.getElementsByTagName("table")[0].tBodies[0].rows[0].cells[0].appendChild(boldText);
+ assert_equals(collection.length, 4);
+ assert_equals(collection[0].parentNode.nodeName, "DIV");
+ assert_equals(collection[1].parentNode.nodeName, "TABLE");
+ assert_equals(collection[2].parentNode.nodeName, "TD");
+ assert_equals(collection[3].parentNode.nodeName, "TR");
+ }, "verify spacing is handled correctly");
+ </script>
+</body></html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName26expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-26-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-26-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-26-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+te xt
+te; xt test link #foo
+text
+xt te
+
+PASS multiple class attributes
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName26htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-26.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-26.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-26.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,30 @@
</span><ins>+<!DOCTYPE html>
+<html><head>
+ <title>getElementsByClassName</title>
+ <meta content="multiple class attributes" name="description">
+ <link href="https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname" rel="help">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+ <body>
+ <div id="log"></div>
+ <div class="te xt">
+ te xt
+ <div class="te">
+ te; xt
+ <a class="text link" href="#foo">test link #foo</a>
+ </div>
+ <b class="text">text</b>
+ </div>
+ <div class="xt te">xt te</div>
+ <script type="text/javascript">
+ test(function()
+ {
+ var collection = document.getElementsByClassName("te xt");
+
+ assert_equals(collection.length, 2);
+ assert_equals(collection[0].parentNode.nodeName, "BODY");
+ assert_equals(collection[1].parentNode.nodeName, "BODY");
+ }, "multiple class attributes");
+ </script>
+</body></html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName27expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-27-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-27-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-27-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+te xt
+te; xt test link #foo dummy tag
+text
+xt te
+
+PASS generic element listed
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName27htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-27.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-27.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-27.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+<!DOCTYPE html>
+<html><head>
+ <title>getElementsByClassName</title>
+ <meta content="generic element listed" name="description">
+ <link href="https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname" rel="help">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+ <body>
+ <div id="log"></div>
+ <div class="te xt">
+ te xt
+ <div class="te">
+ te; xt
+ <a class="text link" href="#foo">test link #foo</a>
+ <foo class="te xt">dummy tag</foo>
+ </div>
+ <b class="text">text</b>
+ </div>
+ <div class="xt te">xt te</div>
+ <script type="text/javascript">
+ test(function()
+ {
+ var collection = document.getElementsByClassName("te xt");
+
+ assert_equals(collection.length, 3);
+ assert_equals(collection[0].parentNode.nodeName, "BODY");
+ assert_equals(collection[1].parentNode.nodeName, "DIV");
+ assert_equals(collection[2].parentNode.nodeName, "BODY");
+ }, "generic element listed");
+ </script>
+</body></html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName28expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-28-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-28-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-28-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+te xt
+te; xt test link #foo te xt namespace
+text
+xt te
+
+PASS generic element listed
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName28htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-28.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-28.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-28.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+<!DOCTYPE html>
+<html><head>
+ <title>getElementsByClassName</title>
+ <meta content="generic element listed" name="description">
+ <link href="https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname" rel="help">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+ <body>
+ <div id="log"></div>
+ <div class="te xt">
+ te xt
+ <div class="te">
+ te; xt
+ <a class="text link" href="#foo">test link #foo</a>
+ <fooU00003Abar class="te xt namespace">te xt namespace
+ </foou00003abar></div>
+ <b class="text">text</b>
+ </div>
+ <div class="xt te">xt te</div>
+ <script type="text/javascript">
+ test(function()
+ {
+ var collection = document.getElementsByClassName("te xt");
+ assert_equals(collection.length, 3);
+ assert_equals(collection[0].parentNode.nodeName, "BODY");
+ assert_equals(collection[1].parentNode.nodeName, "DIV");
+ assert_equals(collection[2].parentNode.nodeName, "BODY");
+ }, "generic element listed");
+ </script>
+</body></html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName29expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-29-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-29-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-29-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+test link #foo
+text
+text caption
+TEXT head
+td text1
+td text
+td te xt
+TEXT foot
+xt te
+
+PASS get class from children of element
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName29htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-29.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-29.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-29.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,51 @@
</span><ins>+<!DOCTYPE html>
+<html><head>
+ <title>getElementsByClassName</title>
+ <meta content="get class from children of element" name="description">
+ <link href="https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname" rel="help">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+ <body>
+ <div id='log'></div>
+ <div>
+ <div>
+ <a class="text link" href="#foo">test link #foo</a>
+ </div>
+ <b class="text">text</b>
+ </div>
+ <table>
+ <caption class="text caption">text caption</caption>
+ <thead>
+ <tr>
+ <td class="TEXT head">TEXT head</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td class="td text1">td text1</td>
+ </tr>
+ <tr>
+ <td class="td text">td text</td>
+ </tr>
+ <tr>
+ <td class="td te xt">td te xt</td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td class="TEXT foot">TEXT foot</td>
+ </tr>
+ </tfoot>
+ </table>
+ <div class="xt te">xt te</div>
+
+ <script type="text/javascript">
+ test(function()
+ {
+ var collection = document.getElementsByTagName("table")[0].getElementsByClassName("te xt");
+ assert_equals(collection.length, 1);
+ assert_equals(collection[0].parentNode.nodeName, "TR");
+ }, "get class from children of element");
+ </script>
+</body></html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName30expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-30-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-30-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-30-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+a abbr acronym
+address
+b bdo big
+blockquote
+
+button
+center
+cite code del dfn
+dir
+li
+div
+dd
+em font
+label legend
+h1
+
+i ins kbd
+menu
+
+ol
+p
+
+pre
+q s samp small span strike strong sub sup colgroup
+caption
+th
+td tt u
+ul
+var
+
+PASS big element listing
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName30htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-30.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-30.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-30.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,190 @@
</span><ins>+<!DOCTYPE html>
+<html><head class="foo">
+ <title class="foo">getElementsByClassName</title>
+ <meta class="foo" content="big element listing" name="description">
+ <link class="foo">
+ <base class="foo">
+ <script class="foo"></script>
+ <style class="foo"></style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <link href="https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname" rel="help">
+</head>
+ <body class="foo">
+ <div id='log'></div>
+ <a class="foo">a</a>
+ <abbr class="foo">abbr</abbr>
+ <acronym class="foo">acronym</acronym>
+ <address class="foo">address</address>
+ <applet class="foo">applet</applet>
+ <b class="foo">b</b>
+ <bdo class="foo">bdo</bdo>
+ <big class="foo">big</big>
+ <blockquote class="foo">blockquote</blockquote>
+ <br class="foo">
+ <button class="foo">button</button>
+ <center class="foo">center</center>
+ <cite class="foo">cite</cite>
+ <code class="foo">code</code>
+ <del class="foo">del</del>
+ <dfn class="foo">dfn</dfn>
+ <dir class="foo">dir
+ <li class="foo">li</li>
+ </dir>
+ <div class="foo">div</div>
+ <dl class="foo">
+ <dt class="foo">
+ </dt><dd class="foo">dd</dd>
+ </dl>
+ <em class="foo">em</em>
+ <font class="foo">font</font>
+ <form class="foo">
+ <label class="foo">label</label>
+ <fieldset class="foo">
+ <legend class="foo">legend</legend>
+ </fieldset>
+ </form>
+ <h1 class="foo">h1</h1>
+ <hr class="foo">
+ <i class="foo">i</i>
+ <iframe class="foo">iframe</iframe>
+ <img class="foo">
+ <input class="foo">
+ <ins class="foo">ins</ins>
+ <kbd class="foo">kbd</kbd>
+ <map class="foo">
+ <area class="foo"></area>
+ </map>
+ <menu class="foo">menu</menu>
+ <noscript class="foo">noscript</noscript>
+ <object class="foo">
+ <param class="foo">
+ </object>
+ <ol class="foo">ol</ol>
+ <p class="foo">p</p>
+ <pre class="foo">pre</pre>
+ <q class="foo">q</q>
+ <s class="foo">s</s>
+ <samp class="foo">samp</samp>
+ <select class="foo">
+ <optgroup class="foo">optgroup</optgroup>
+ <option class="foo">option</option>
+ </select>
+ <small class="foo">small</small>
+ <span class="foo">span</span>
+ <strike class="foo">strike</strike>
+ <strong class="foo">strong</strong>
+ <sub class="foo">sub</sub>
+ <sup class="foo">sup</sup>
+ colgroup<table class="foo">
+ <caption class="foo">caption</caption>
+ <colgroup><col class="foo">
+ </colgroup><colgroup class="foo"></colgroup>
+ <thead class="foo">
+ <tr><th class="foo">th</th>
+ </tr></thead>
+ <tbody class="foo">
+ <tr class="foo">
+ <td class="foo">td</td>
+ </tr>
+ </tbody>
+ <tfoot class="foo"></tfoot>
+ </table>
+ <textarea class="foo">textarea</textarea>
+ <tt class="foo">tt</tt>
+ <u class="foo">u</u>
+ <ul class="foo">ul</ul>
+ <var class="foo">var</var>
+ <script type="text/javascript">
+ test(function ()
+ {
+ var arrElements = [
+ "HEAD",
+ "TITLE",
+ "META",
+ "LINK",
+ "BASE",
+ "SCRIPT",
+ "STYLE",
+ "BODY",
+ "A",
+ "ABBR",
+ "ACRONYM",
+ "ADDRESS",
+ "APPLET",
+ "B",
+ "BDO",
+ "BIG",
+ "BLOCKQUOTE",
+ "BR",
+ "BUTTON",
+ "CENTER",
+ "CITE",
+ "CODE",
+ "DEL",
+ "DFN",
+ "DIR",
+ "LI",
+ "DIV",
+ "DL",
+ "DT",
+ "DD",
+ "EM",
+ "FONT",
+ "FORM",
+ "LABEL",
+ "FIELDSET",
+ "LEGEND",
+ "H1",
+ "HR",
+ "I",
+ "IFRAME",
+ "IMG",
+ "INPUT",
+ "INS",
+ "KBD",
+ "MAP",
+ "AREA",
+ "MENU",
+ "NOSCRIPT",
+ "OBJECT",
+ "PARAM",
+ "OL",
+ "P",
+ "PRE",
+ "Q",
+ "S",
+ "SAMP",
+ "SELECT",
+ "OPTGROUP",
+ "OPTION",
+ "SMALL",
+ "SPAN",
+ "STRIKE",
+ "STRONG",
+ "SUB",
+ "SUP",
+ "TABLE",
+ "CAPTION",
+ "COL",
+ "COLGROUP",
+ "THEAD",
+ "TH",
+ "TBODY",
+ "TR",
+ "TD",
+ "TFOOT",
+ "TEXTAREA",
+ "TT",
+ "U",
+ "UL",
+ "VAR"];
+
+ var collection = document.getElementsByClassName("foo");
+ for (var x = 0; x < collection.length; x++)
+ {
+ assert_equals(collection[x].nodeName, arrElements[x]);
+ }
+}, "big element listing");
+ </script>
+</body></html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName31expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-31-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-31-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-31-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+
+
+FAIL getElementsByClassName across documents assert_equals: expected 3 but got 0
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesgetElementsByClassName31htm"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-31.htm (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-31.htm         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-31.htm        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+<!DOCTYPE html>
+<html class=foo>
+<meta charset=utf-8>
+<title>getElementsByClassName across documents</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-document-getelementsbyclassname">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script class=foo>
+async_test(function() {
+ var iframe = document.createElement("iframe");
+ iframe.onload = this.step_func_done(function() {
+ var collection = iframe.contentDocument.getElementsByClassName("foo");
+ assert_equals(collection.length, 3);
+ assert_equals(collection[0].localName, "html");
+ assert_equals(collection[1].localName, "head");
+ assert_equals(collection[2].localName, "body");
+ });
+ iframe.src = "getElementsByClassNameFrame.htm";
+ document.body.appendChild(iframe);
+});
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesmutationobserversjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/mutationobservers.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/mutationobservers.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/mutationobservers.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,76 @@
</span><ins>+// Compares a mutation record to a predefined one
+// mutationToCheck is a mutation record from the user agent
+// expectedRecord is a mutation record minted by the test
+// for expectedRecord, if properties are ommitted, they get default ones
+function checkRecords(target, mutationToCheck, expectedRecord) {
+ var mr1;
+ var mr2;
+
+
+ function checkField(property, isArray) {
+ var field = mr2[property];
+ if (isArray === undefined) {
+ isArray = false;
+ }
+ if (field instanceof Function) {
+ field = field();
+ } else if (field === undefined) {
+ if (isArray) {
+ field = new Array();
+ } else {
+ field = null;
+ }
+ }
+ if (isArray) {
+ assert_array_equals(mr1[property], field, property + " didn't match");
+ } else {
+ assert_equals(mr1[property], field, property + " didn't match");
+ }
+ }
+
+ assert_equals(mutationToCheck.length, expectedRecord.length, "mutation records must match");
+ for (var item = 0; item < mutationToCheck.length; item++) {
+ mr1 = mutationToCheck[item];
+ mr2 = expectedRecord[item];
+
+ if (mr2.target instanceof Function) {
+ assert_equals(mr1.target, mr2.target(), "target node must match");
+ } else if (mr2.target !== undefined) {
+ assert_equals(mr1.target, mr2.target, "target node must match");
+ } else {
+ assert_equals(mr1.target, target, "target node must match");
+ }
+
+ checkField("type");
+ checkField("addedNodes", true);
+ checkField("removedNodes", true);
+ checkField("previousSibling");
+ checkField("nextSibling");
+ checkField("attributeName");
+ checkField("attributeNamespace");
+ checkField("oldValue");
+ };
+}
+
+function runMutationTest(node, mutationObserverOptions, mutationRecordSequence, mutationFunction, description, target) {
+ var test = async_test(description);
+
+
+ function moc(mrl, obs) {
+ test.step(
+ function () {
+ if (target === undefined) target = node;
+ checkRecords(target, mrl, mutationRecordSequence);
+ test.done();
+ }
+ );
+ }
+
+ test.step(
+ function () {
+ (new MutationObserver(moc)).observe(node, mutationObserverOptions);
+ mutationFunction();
+ }
+ );
+ return mutationRecordSequence.length
+}
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesprependonDocumentexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/prepend-on-Document-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/prepend-on-Document-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/prepend-on-Document-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+
+PASS Document.prepend() without any argument, on a Document having no child.
+PASS Document.prepend() with only one element as an argument, on a Document having no child.
+PASS Document.append() with only one element as an argument, on a Document having one child.
+PASS Document.prepend() with text as an argument, on a Document having no child.
+FAIL Document.prepend() with two elements as the argument, on a Document having no child. assert_throws: function "function () { parent.prepend(x, y); }" did not throw
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesprependonDocumenthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/prepend-on-Document.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/prepend-on-Document.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/prepend-on-Document.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,53 @@
</span><ins>+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>DocumentType.prepend</title>
+<link rel=help href="https://dom.spec.whatwg.org/#dom-parentnode-prepend">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+function test_prepend_on_Document() {
+
+ var node = document.implementation.createDocument(null, null);
+ test(function() {
+ var parent = node.cloneNode();
+ parent.prepend();
+ assert_array_equals(parent.childNodes, []);
+ }, 'Document.prepend() without any argument, on a Document having no child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ var x = document.createElement('x');
+ parent.prepend(x);
+ assert_array_equals(parent.childNodes, [x]);
+ }, 'Document.prepend() with only one element as an argument, on a Document having no child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ parent.appendChild(x);
+ assert_throws('HierarchyRequestError', function() { parent.prepend(y); });
+ assert_array_equals(parent.childNodes, [x]);
+ }, 'Document.append() with only one element as an argument, on a Document having one child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ assert_throws('HierarchyRequestError', function() { parent.prepend('text'); });
+ assert_array_equals(parent.childNodes, []);
+ }, 'Document.prepend() with text as an argument, on a Document having no child.');
+
+ test(function() {
+ var parent = node.cloneNode();
+ var x = document.createElement('x');
+ var y = document.createElement('y');
+ assert_throws('HierarchyRequestError', function() { parent.prepend(x, y); });
+ assert_array_equals(parent.childNodes, []);
+ }, 'Document.prepend() with two elements as the argument, on a Document having no child.');
+
+}
+
+test_prepend_on_Document();
+
+</script>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesproductionsjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/productions.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/productions.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/productions.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+var invalid_names = ["", "invalid^Name", "\\", "'", '"', "0", "0:a"] // XXX
+var valid_names = ["x", ":", "a:0"]
+var invalid_qnames = [":a", "b:", "x:y:z"] // XXX
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesresourcesParentNodequerySelectorAllcontenthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/resources/ParentNode-querySelector-All-content.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/resources/ParentNode-querySelector-All-content.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/resources/ParentNode-querySelector-All-content.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,377 @@
</span><ins>+<!DOCTYPE html>
+<html id="html" lang="en">
+<head id="head">
+ <meta id="meta" charset="UTF-8">
+ <title id="title">Selectors-API Test Suite: HTML with Selectors Level 2 using TestHarness: Test Document</title>
+
+ <!-- Links for :link and :visited pseudo-class test -->
+ <link id="pseudo-link-link1" href="">
+ <link id="pseudo-link-link2" href="http://example.org/">
+ <link id="pseudo-link-link3">
+ <style>
+ @namespace ns "http://www.w3.org/1999/xhtml";
+ /* Declare the namespace prefix used in tests. This declaration should not be used by the API. */
+ </style>
+</head>
+<body id="body">
+<div id="root">
+ <div id="target"></div>
+
+ <div id="universal">
+ <p id="universal-p1">Universal selector tests inside element with <code id="universal-code1">id="universal"</code>.</p>
+ <hr id="universal-hr1">
+ <pre id="universal-pre1">Some preformatted text with some <span id="universal-span1">embedded code</span></pre>
+ <p id="universal-p2">This is a normal link: <a id="universal-a1" href="http://www.w3.org/">W3C</a></p>
+ <address id="universal-address1">Some more nested elements <code id="universal-code2"><a href="#" id="universal-a2">code hyperlink</a></code></address>
+ </div>
+
+ <div id="attr-presence">
+ <div class="attr-presence-div1" id="attr-presence-div1" align="center"></div>
+ <div class="attr-presence-div2" id="attr-presence-div2" align=""></div>
+ <div class="attr-presence-div3" id="attr-presence-div3" valign="center"></div>
+ <div class="attr-presence-div4" id="attr-presence-div4" alignv="center"></div>
+ <p id="attr-presence-p1"><a id="attr-presence-a1" tItLe=""></a><span id="attr-presence-span1" TITLE="attr-presence-span1"></span></p>
+ <pre id="attr-presence-pre1" data-attr-presence="pre1"></pre>
+ <blockquote id="attr-presence-blockquote1" data-attr-presence="blockquote1"></blockquote>
+ <ul id="attr-presence-ul1" data-中文=""></ul>
+
+ <select id="attr-presence-select1">
+ <option id="attr-presence-select1-option1">A</option>
+ <option id="attr-presence-select1-option2">B</option>
+ <option id="attr-presence-select1-option3">C</option>
+ <option id="attr-presence-select1-option4">D</option>
+ </select>
+ <select id="attr-presence-select2">
+ <option id="attr-presence-select2-option1">A</option>
+ <option id="attr-presence-select2-option2">B</option>
+ <option id="attr-presence-select2-option3">C</option>
+ <option id="attr-presence-select2-option4" selected="selected">D</option>
+ </select>
+ <select id="attr-presence-select3" multiple="multiple">
+ <option id="attr-presence-select3-option1">A</option>
+ <option id="attr-presence-select3-option2" selected="">B</option>
+ <option id="attr-presence-select3-option3" selected="selected">C</option>
+ <option id="attr-presence-select3-option4">D</option>
+ </select>
+ </div>
+
+ <div id="attr-value">
+ <div id="attr-value-div1" align="center"></div>
+ <div id="attr-value-div2" align=""></div>
+ <div id="attr-value-div3" data-attr-value="&#xE9;"></div>
+ <div id="attr-value-div4" data-attr-value_foo="&#xE9;"></div>
+
+ <form id="attr-value-form1">
+ <input id="attr-value-input1" type="text">
+ <input id="attr-value-input2" type="password">
+ <input id="attr-value-input3" type="hidden">
+ <input id="attr-value-input4" type="radio">
+ <input id="attr-value-input5" type="checkbox">
+ <input id="attr-value-input6" type="radio">
+ <input id="attr-value-input7" type="text">
+ <input id="attr-value-input8" type="hidden">
+ <input id="attr-value-input9" type="radio">
+ </form>
+
+ <div id="attr-value-div5" data-attr-value="中文"></div>
+ </div>
+
+ <div id="attr-whitespace">
+ <div id="attr-whitespace-div1" class="foo div1 bar"></div>
+ <div id="attr-whitespace-div2" class=""></div>
+ <div id="attr-whitespace-div3" class="foo div3 bar"></div>
+
+ <div id="attr-whitespace-div4" data-attr-whitespace="foo &#xE9; bar"></div>
+ <div id="attr-whitespace-div5" data-attr-whitespace_foo="&#xE9; foo"></div>
+
+ <a id="attr-whitespace-a1" rel="next bookmark"></a>
+ <a id="attr-whitespace-a2" rel="tag nofollow"></a>
+ <a id="attr-whitespace-a3" rel="tag bookmark"></a>
+ <a id="attr-whitespace-a4" rel="book mark"></a> <!-- Intentional space in "book mark" -->
+ <a id="attr-whitespace-a5" rel="nofollow"></a>
+ <a id="attr-whitespace-a6" rev="bookmark nofollow"></a>
+ <a id="attr-whitespace-a7" rel="prev next tag alternate nofollow author help icon noreferrer prefetch search stylesheet tag"></a>
+
+ <p id="attr-whitespace-p1" title="Chinese 中文 characters"></p>
+ </div>
+
+ <div id="attr-hyphen">
+ <div id="attr-hyphen-div1"></div>
+ <div id="attr-hyphen-div2" lang="fr"></div>
+ <div id="attr-hyphen-div3" lang="en-AU"></div>
+ <div id="attr-hyphen-div4" lang="es"></div>
+ </div>
+
+ <div id="attr-begins">
+ <a id="attr-begins-a1" href="http://www.example.org"></a>
+ <a id="attr-begins-a2" href="http://example.org/"></a>
+ <a id="attr-begins-a3" href="http://www.example.com/"></a>
+
+ <div id="attr-begins-div1" lang="fr"></div>
+ <div id="attr-begins-div2" lang="en-AU"></div>
+ <div id="attr-begins-div3" lang="es"></div>
+ <div id="attr-begins-div4" lang="en-US"></div>
+ <div id="attr-begins-div5" lang="en"></div>
+
+ <p id="attr-begins-p1" class=" apple"></p> <!-- Intentional space in class value " apple". -->
+ </div>
+
+ <div id="attr-ends">
+ <a id="attr-ends-a1" href="http://www.example.org"></a>
+ <a id="attr-ends-a2" href="http://example.org/"></a>
+ <a id="attr-ends-a3" href="http://www.example.org"></a>
+
+ <div id="attr-ends-div1" lang="fr"></div>
+ <div id="attr-ends-div2" lang="de-CH"></div>
+ <div id="attr-ends-div3" lang="es"></div>
+ <div id="attr-ends-div4" lang="fr-CH"></div>
+
+ <p id="attr-ends-p1" class="apple "></p> <!-- Intentional space in class value "apple ". -->
+ </div>
+
+ <div id="attr-contains">
+ <a id="attr-contains-a1" href="http://www.example.org"></a>
+ <a id="attr-contains-a2" href="http://example.org/"></a>
+ <a id="attr-contains-a3" href="http://www.example.com/"></a>
+
+ <div id="attr-contains-div1" lang="fr"></div>
+ <div id="attr-contains-div2" lang="en-AU"></div>
+ <div id="attr-contains-div3" lang="de-CH"></div>
+ <div id="attr-contains-div4" lang="es"></div>
+ <div id="attr-contains-div5" lang="fr-CH"></div>
+ <div id="attr-contains-div6" lang="en-US"></div>
+
+ <p id="attr-contains-p1" class=" apple banana orange "></p>
+ </div>
+
+ <div id="pseudo-nth">
+ <table id="pseudo-nth-table1">
+ <tr id="pseudo-nth-tr1"><td id="pseudo-nth-td1"></td><td id="pseudo-nth-td2"></td><td id="pseudo-nth-td3"></td><td id="pseudo-nth-td4"></td><td id="pseudo-nth--td5"></td><td id="pseudo-nth-td6"></td></tr>
+ <tr id="pseudo-nth-tr2"><td id="pseudo-nth-td7"></td><td id="pseudo-nth-td8"></td><td id="pseudo-nth-td9"></td><td id="pseudo-nth-td10"></td><td id="pseudo-nth-td11"></td><td id="pseudo-nth-td12"></td></tr>
+ <tr id="pseudo-nth-tr3"><td id="pseudo-nth-td13"></td><td id="pseudo-nth-td14"></td><td id="pseudo-nth-td15"></td><td id="pseudo-nth-td16"></td><td id="pseudo-nth-td17"></td><td id="pseudo-nth-td18"></td></tr>
+ </table>
+
+ <ol id="pseudo-nth-ol1">
+ <li id="pseudo-nth-li1"></li>
+ <li id="pseudo-nth-li2"></li>
+ <li id="pseudo-nth-li3"></li>
+ <li id="pseudo-nth-li4"></li>
+ <li id="pseudo-nth-li5"></li>
+ <li id="pseudo-nth-li6"></li>
+ <li id="pseudo-nth-li7"></li>
+ <li id="pseudo-nth-li8"></li>
+ <li id="pseudo-nth-li9"></li>
+ <li id="pseudo-nth-li10"></li>
+ <li id="pseudo-nth-li11"></li>
+ <li id="pseudo-nth-li12"></li>
+ </ol>
+
+ <p id="pseudo-nth-p1">
+ <span id="pseudo-nth-span1">span1</span>
+ <em id="pseudo-nth-em1">em1</em>
+ <!-- comment node-->
+ <em id="pseudo-nth-em2">em2</em>
+ <span id="pseudo-nth-span2">span2</span>
+ <strong id="pseudo-nth-strong1">strong1</strong>
+ <em id="pseudo-nth-em3">em3</em>
+ <span id="pseudo-nth-span3">span3</span>
+ <span id="pseudo-nth-span4">span4</span>
+ <strong id="pseudo-nth-strong2">strong2</strong>
+ <em id="pseudo-nth-em4">em4</em>
+ </p>
+ </div>
+
+ <div id="pseudo-first-child">
+ <div id="pseudo-first-child-div1"></div>
+ <div id="pseudo-first-child-div2"></div>
+ <div id="pseudo-first-child-div3"></div>
+
+ <p id="pseudo-first-child-p1"><span id="pseudo-first-child-span1"></span><span id="pseudo-first-child-span2"></span></p>
+ <p id="pseudo-first-child-p2"><span id="pseudo-first-child-span3"></span><span id="pseudo-first-child-span4"></span></p>
+ <p id="pseudo-first-child-p3"><span id="pseudo-first-child-span5"></span><span id="pseudo-first-child-span6"></span></p>
+ </div>
+
+ <div id="pseudo-last-child">
+ <p id="pseudo-last-child-p1"><span id="pseudo-last-child-span1"></span><span id="pseudo-last-child-span2"></span></p>
+ <p id="pseudo-last-child-p2"><span id="pseudo-last-child-span3"></span><span id="pseudo-last-child-span4"></span></p>
+ <p id="pseudo-last-child-p3"><span id="pseudo-last-child-span5"></span><span id="pseudo-last-child-span6"></span></p>
+
+ <div id="pseudo-last-child-div1"></div>
+ <div id="pseudo-last-child-div2"></div>
+ <div id="pseudo-last-child-div3"></div>
+ </div>
+
+ <div id="pseudo-only">
+ <p id="pseudo-only-p1">
+ <span id="pseudo-only-span1"></span>
+ </p>
+ <p id="pseudo-only-p2">
+ <span id="pseudo-only-span2"></span>
+ <span id="pseudo-only-span3"></span>
+ </p>
+ <p id="pseudo-only-p3">
+ <span id="pseudo-only-span4"></span>
+ <em id="pseudo-only-em1"></em>
+ <span id="pseudo-only-span5"></span>
+ </p>
+ </div>>
+
+ <div id="pseudo-empty">
+ <p id="pseudo-empty-p1"></p>
+ <p id="pseudo-empty-p2"><!-- comment node --></p>
+ <p id="pseudo-empty-p3"> </p>
+ <p id="pseudo-empty-p4">Text node</p>
+ <p id="pseudo-empty-p5"><span id="pseudo-empty-span1"></span></p>
+ </div>
+
+ <div id="pseudo-link">
+ <a id="pseudo-link-a1" href="">with href</a>
+ <a id="pseudo-link-a2" href="http://example.org/">with href</a>
+ <a id="pseudo-link-a3">without href</a>
+ <map name="pseudo-link-map1" id="pseudo-link-map1">
+ <area id="pseudo-link-area1" href="">
+ <area id="pseudo-link-area2">
+ </map>
+ </div>
+
+ <div id="pseudo-lang">
+ <div id="pseudo-lang-div1"></div>
+ <div id="pseudo-lang-div2" lang="fr"></div>
+ <div id="pseudo-lang-div3" lang="en-AU"></div>
+ <div id="pseudo-lang-div4" lang="es"></div>
+ </div>
+
+ <div id="pseudo-ui">
+ <input id="pseudo-ui-input1" type="text">
+ <input id="pseudo-ui-input2" type="password">
+ <input id="pseudo-ui-input3" type="radio">
+ <input id="pseudo-ui-input4" type="radio" checked="checked">
+ <input id="pseudo-ui-input5" type="checkbox">
+ <input id="pseudo-ui-input6" type="checkbox" checked="checked">
+ <input id="pseudo-ui-input7" type="submit">
+ <input id="pseudo-ui-input8" type="button">
+ <input id="pseudo-ui-input9" type="hidden">
+ <textarea id="pseudo-ui-textarea1"></textarea>
+ <button id="pseudo-ui-button1">Enabled</button>
+
+ <input id="pseudo-ui-input10" disabled="disabled" type="text">
+ <input id="pseudo-ui-input11" disabled="disabled" type="password">
+ <input id="pseudo-ui-input12" disabled="disabled" type="radio">
+ <input id="pseudo-ui-input13" disabled="disabled" type="radio" checked="checked">
+ <input id="pseudo-ui-input14" disabled="disabled" type="checkbox">
+ <input id="pseudo-ui-input15" disabled="disabled" type="checkbox" checked="checked">
+ <input id="pseudo-ui-input16" disabled="disabled" type="submit">
+ <input id="pseudo-ui-input17" disabled="disabled" type="button">
+ <input id="pseudo-ui-input18" disabled="disabled" type="hidden">
+ <textarea id="pseudo-ui-textarea2" disabled="disabled"></textarea>
+ <button id="pseudo-ui-button2" disabled="disabled">Disabled</button>
+ </div>
+
+ <div id="not">
+ <div id="not-div1"></div>
+ <div id="not-div2"></div>
+ <div id="not-div3"></div>
+
+ <p id="not-p1"><span id="not-span1"></span><em id="not-em1"></em></p>
+ <p id="not-p2"><span id="not-span2"></span><em id="not-em2"></em></p>
+ <p id="not-p3"><span id="not-span3"></span><em id="not-em3"></em></p>
+ </div>
+
+ <div id="pseudo-element">All pseudo-element tests</div>
+
+ <div id="class">
+ <p id="class-p1" class="foo class-p bar"></p>
+ <p id="class-p2" class="class-p foo bar"></p>
+ <p id="class-p3" class="foo bar class-p"></p>
+
+ <!-- All permutations of the classes should match -->
+ <div id="class-div1" class="apple orange banana"></div>
+ <div id="class-div2" class="apple banana orange"></div>
+ <p id="class-p4" class="orange apple banana"></p>
+ <div id="class-div3" class="orange banana apple"></div>
+ <p id="class-p6" class="banana apple orange"></p>
+ <div id="class-div4" class="banana orange apple"></div>
+ <div id="class-div5" class="apple orange"></div>
+ <div id="class-div6" class="apple banana"></div>
+ <div id="class-div7" class="orange banana"></div>
+
+ <span id="class-span1" class="台北Táiběi 台北"></span>
+ <span id="class-span2" class="台北"></span>
+
+ <span id="class-span3" class="foo:bar"></span>
+ <span id="class-span4" class="test.foo[5]bar"></span>
+ </div>
+
+ <div id="id">
+ <div id="id-div1"></div>
+ <div id="id-div2"></div>
+
+ <ul id="id-ul1">
+ <li id="id-li-duplicate"></li>
+ <li id="id-li-duplicate"></li>
+ <li id="id-li-duplicate"></li>
+ <li id="id-li-duplicate"></li>
+ </ul>
+
+ <span id="台北Táiběi"></span>
+ <span id="台北"></span>
+
+ <span id="#foo:bar"></span>
+ <span id="test.foo[5]bar"></span>
+ </div>
+
+ <div id="descendant">
+ <div id="descendant-div1" class="descendant-div1">
+ <div id="descendant-div2" class="descendant-div2">
+ <div id="descendant-div3" class="descendant-div3">
+ </div>
+ </div>
+ </div>
+ <div id="descendant-div4" class="descendant-div4"></div>
+ </div>
+
+ <div id="child">
+ <div id="child-div1" class="child-div1">
+ <div id="child-div2" class="child-div2">
+ <div id="child-div3" class="child-div3">
+ </div>
+ </div>
+ </div>
+ <div id="child-div4" class="child-div4"></div>
+ </div>
+
+ <div id="adjacent">
+ <div id="adjacent-div1" class="adjacent-div1"></div>
+ <div id="adjacent-div2" class="adjacent-div2">
+ <div id="adjacent-div3" class="adjacent-div3"></div>
+ </div>
+ <div id="adjacent-div4" class="adjacent-div4">
+ <p id="adjacent-p1" class="adjacent-p1"></p>
+ <div id="adjacent-div5" class="adjacent-div5"></div>
+ </div>
+ <div id="adjacent-div6" class="adjacent-div6"></div>
+ <p id="adjacent-p2" class="adjacent-p2"></p>
+ <p id="adjacent-p3" class="adjacent-p3"></p>
+ </div>
+
+ <div id="sibling">
+ <div id="sibling-div1" class="sibling-div"></div>
+ <div id="sibling-div2" class="sibling-div">
+ <div id="sibling-div3" class="sibling-div"></div>
+ </div>
+ <div id="sibling-div4" class="sibling-div">
+ <p id="sibling-p1" class="sibling-p"></p>
+ <div id="sibling-div5" class="sibling-div"></div>
+ </div>
+ <div id="sibling-div6" class="sibling-div"></div>
+ <p id="sibling-p2" class="sibling-p"></p>
+ <p id="sibling-p3" class="sibling-p"></p>
+ </div>
+
+ <div id="group">
+ <em id="group-em1"></em>
+ <strong id="group-strong1"></strong>
+ </div>
+</div>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesresourcesParentNodequerySelectorAllcontentxht"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/resources/ParentNode-querySelector-All-content.xht (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/resources/ParentNode-querySelector-All-content.xht         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/resources/ParentNode-querySelector-All-content.xht        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,372 @@
</span><ins>+<!DOCTYPE html>
+<html id="html" lang="en" xmlns="http://www.w3.org/1999/xhtml">
+<head id="head">
+ <title id="title">Selectors-API Test Suite: HTML with Selectors Level 2 using TestHarness: Test Document</title>
+
+ <!-- Links for :link and :visited pseudo-class test -->
+ <link id="pseudo-link-link1" href=""/>
+ <link id="pseudo-link-link2" href="http://example.org/"/>
+ <link id="pseudo-link-link3"/>
+</head>
+<body id="body">
+<div id="root">
+ <div id="target"></div>
+
+ <div id="universal">
+ <p id="universal-p1">Universal selector tests inside element with <code id="universal-code1">id="universal"</code>.</p>
+ <hr id="universal-hr1"/>
+ <pre id="universal-pre1">Some preformatted text with some <span id="universal-span1">embedded code</span></pre>
+ <p id="universal-p2">This is a normal link: <a id="universal-a1" href="http://www.w3.org/">W3C</a></p>
+ <address id="universal-address1">Some more nested elements <code id="universal-code2"><a href="#" id="universal-a2">code hyperlink</a></code></address>
+ </div>
+
+ <div id="attr-presence">
+ <div class="attr-presence-div1" id="attr-presence-div1" align="center"></div>
+ <div class="attr-presence-div2" id="attr-presence-div2" align=""></div>
+ <div class="attr-presence-div3" id="attr-presence-div3" valign="center"></div>
+ <div class="attr-presence-div4" id="attr-presence-div4" alignv="center"></div>
+ <p id="attr-presence-p1"><a id="attr-presence-a1" tItLe=""></a><span id="attr-presence-span1" TITLE="attr-presence-span1"></span></p>
+ <pre id="attr-presence-pre1" data-attr-presence="pre1"></pre>
+ <blockquote id="attr-presence-blockquote1" data-attr-presence="blockquote1"></blockquote>
+ <ul id="attr-presence-ul1" data-中文=""></ul>
+
+ <select id="attr-presence-select1">
+ <option id="attr-presence-select1-option1">A</option>
+ <option id="attr-presence-select1-option2">B</option>
+ <option id="attr-presence-select1-option3">C</option>
+ <option id="attr-presence-select1-option4">D</option>
+ </select>
+ <select id="attr-presence-select2">
+ <option id="attr-presence-select2-option1">A</option>
+ <option id="attr-presence-select2-option2">B</option>
+ <option id="attr-presence-select2-option3">C</option>
+ <option id="attr-presence-select2-option4" selected="selected">D</option>
+ </select>
+ <select id="attr-presence-select3" multiple="multiple">
+ <option id="attr-presence-select3-option1">A</option>
+ <option id="attr-presence-select3-option2" selected="">B</option>
+ <option id="attr-presence-select3-option3" selected="selected">C</option>
+ <option id="attr-presence-select3-option4">D</option>
+ </select>
+ </div>
+
+ <div id="attr-value">
+ <div id="attr-value-div1" align="center"></div>
+ <div id="attr-value-div2" align=""></div>
+ <div id="attr-value-div3" data-attr-value="&#xE9;"></div>
+ <div id="attr-value-div4" data-attr-value_foo="&#xE9;"></div>
+
+ <form id="attr-value-form1">
+ <input id="attr-value-input1" type="text"/>
+ <input id="attr-value-input2" type="password"/>
+ <input id="attr-value-input3" type="hidden"/>
+ <input id="attr-value-input4" type="radio"/>
+ <input id="attr-value-input5" type="checkbox"/>
+ <input id="attr-value-input6" type="radio"/>
+ <input id="attr-value-input7" type="text"/>
+ <input id="attr-value-input8" type="hidden"/>
+ <input id="attr-value-input9" type="radio"/>
+ </form>
+
+ <div id="attr-value-div5" data-attr-value="中文"></div>
+ </div>
+
+ <div id="attr-whitespace">
+ <div id="attr-whitespace-div1" class="foo div1 bar"></div>
+ <div id="attr-whitespace-div2" class=""></div>
+ <div id="attr-whitespace-div3" class="foo div3 bar"></div>
+
+ <div id="attr-whitespace-div4" data-attr-whitespace="foo &#xE9; bar"></div>
+ <div id="attr-whitespace-div5" data-attr-whitespace_foo="&#xE9; foo"></div>
+
+ <a id="attr-whitespace-a1" rel="next bookmark"></a>
+ <a id="attr-whitespace-a2" rel="tag nofollow"></a>
+ <a id="attr-whitespace-a3" rel="tag bookmark"></a>
+ <a id="attr-whitespace-a4" rel="book mark"></a> <!-- Intentional space in "book mark" -->
+ <a id="attr-whitespace-a5" rel="nofollow"></a>
+ <a id="attr-whitespace-a6" rev="bookmark nofollow"></a>
+ <a id="attr-whitespace-a7" rel="prev next tag alternate nofollow author help icon noreferrer prefetch search stylesheet tag"></a>
+
+ <p id="attr-whitespace-p1" title="Chinese 中文 characters"></p>
+ </div>
+
+ <div id="attr-hyphen">
+ <div id="attr-hyphen-div1"></div>
+ <div id="attr-hyphen-div2" lang="fr"></div>
+ <div id="attr-hyphen-div3" lang="en-AU"></div>
+ <div id="attr-hyphen-div4" lang="es"></div>
+ </div>
+
+ <div id="attr-begins">
+ <a id="attr-begins-a1" href="http://www.example.org"></a>
+ <a id="attr-begins-a2" href="http://example.org/"></a>
+ <a id="attr-begins-a3" href="http://www.example.com/"></a>
+
+ <div id="attr-begins-div1" lang="fr"></div>
+ <div id="attr-begins-div2" lang="en-AU"></div>
+ <div id="attr-begins-div3" lang="es"></div>
+ <div id="attr-begins-div4" lang="en-US"></div>
+ <div id="attr-begins-div5" lang="en"></div>
+
+ <p id="attr-begins-p1" class=" apple"></p> <!-- Intentional space in class value " apple". -->
+ </div>
+
+ <div id="attr-ends">
+ <a id="attr-ends-a1" href="http://www.example.org"></a>
+ <a id="attr-ends-a2" href="http://example.org/"></a>
+ <a id="attr-ends-a3" href="http://www.example.org"></a>
+
+ <div id="attr-ends-div1" lang="fr"></div>
+ <div id="attr-ends-div2" lang="de-CH"></div>
+ <div id="attr-ends-div3" lang="es"></div>
+ <div id="attr-ends-div4" lang="fr-CH"></div>
+
+ <p id="attr-ends-p1" class="apple "></p> <!-- Intentional space in class value "apple ". -->
+ </div>
+
+ <div id="attr-contains">
+ <a id="attr-contains-a1" href="http://www.example.org"></a>
+ <a id="attr-contains-a2" href="http://example.org/"></a>
+ <a id="attr-contains-a3" href="http://www.example.com/"></a>
+
+ <div id="attr-contains-div1" lang="fr"></div>
+ <div id="attr-contains-div2" lang="en-AU"></div>
+ <div id="attr-contains-div3" lang="de-CH"></div>
+ <div id="attr-contains-div4" lang="es"></div>
+ <div id="attr-contains-div5" lang="fr-CH"></div>
+ <div id="attr-contains-div6" lang="en-US"></div>
+
+ <p id="attr-contains-p1" class=" apple banana orange "></p>
+ </div>
+
+ <div id="pseudo-nth">
+ <table id="pseudo-nth-table1">
+ <tr id="pseudo-nth-tr1"><td id="pseudo-nth-td1"></td><td id="pseudo-nth-td2"></td><td id="pseudo-nth-td3"></td><td id="pseudo-nth-td4"></td><td id="pseudo-nth--td5"></td><td id="pseudo-nth-td6"></td></tr>
+ <tr id="pseudo-nth-tr2"><td id="pseudo-nth-td7"></td><td id="pseudo-nth-td8"></td><td id="pseudo-nth-td9"></td><td id="pseudo-nth-td10"></td><td id="pseudo-nth-td11"></td><td id="pseudo-nth-td12"></td></tr>
+ <tr id="pseudo-nth-tr3"><td id="pseudo-nth-td13"></td><td id="pseudo-nth-td14"></td><td id="pseudo-nth-td15"></td><td id="pseudo-nth-td16"></td><td id="pseudo-nth-td17"></td><td id="pseudo-nth-td18"></td></tr>
+ </table>
+
+ <ol id="pseudo-nth-ol1">
+ <li id="pseudo-nth-li1"></li>
+ <li id="pseudo-nth-li2"></li>
+ <li id="pseudo-nth-li3"></li>
+ <li id="pseudo-nth-li4"></li>
+ <li id="pseudo-nth-li5"></li>
+ <li id="pseudo-nth-li6"></li>
+ <li id="pseudo-nth-li7"></li>
+ <li id="pseudo-nth-li8"></li>
+ <li id="pseudo-nth-li9"></li>
+ <li id="pseudo-nth-li10"></li>
+ <li id="pseudo-nth-li11"></li>
+ <li id="pseudo-nth-li12"></li>
+ </ol>
+
+ <p id="pseudo-nth-p1">
+ <span id="pseudo-nth-span1">span1</span>
+ <em id="pseudo-nth-em1">em1</em>
+ <!-- comment node-->
+ <em id="pseudo-nth-em2">em2</em>
+ <span id="pseudo-nth-span2">span2</span>
+ <strong id="pseudo-nth-strong1">strong1</strong>
+ <em id="pseudo-nth-em3">em3</em>
+ <span id="pseudo-nth-span3">span3</span>
+ <span id="pseudo-nth-span4">span4</span>
+ <strong id="pseudo-nth-strong2">strong2</strong>
+ <em id="pseudo-nth-em4">em4</em>
+ </p>
+ </div>
+
+ <div id="pseudo-first-child">
+ <div id="pseudo-first-child-div1"></div>
+ <div id="pseudo-first-child-div2"></div>
+ <div id="pseudo-first-child-div3"></div>
+
+ <p id="pseudo-first-child-p1"><span id="pseudo-first-child-span1"></span><span id="pseudo-first-child-span2"></span></p>
+ <p id="pseudo-first-child-p2"><span id="pseudo-first-child-span3"></span><span id="pseudo-first-child-span4"></span></p>
+ <p id="pseudo-first-child-p3"><span id="pseudo-first-child-span5"></span><span id="pseudo-first-child-span6"></span></p>
+ </div>
+
+ <div id="pseudo-last-child">
+ <p id="pseudo-last-child-p1"><span id="pseudo-last-child-span1"></span><span id="pseudo-last-child-span2"></span></p>
+ <p id="pseudo-last-child-p2"><span id="pseudo-last-child-span3"></span><span id="pseudo-last-child-span4"></span></p>
+ <p id="pseudo-last-child-p3"><span id="pseudo-last-child-span5"></span><span id="pseudo-last-child-span6"></span></p>
+
+ <div id="pseudo-last-child-div1"></div>
+ <div id="pseudo-last-child-div2"></div>
+ <div id="pseudo-last-child-div3"></div>
+ </div>
+
+ <div id="pseudo-only">
+ <p id="pseudo-only-p1">
+ <span id="pseudo-only-span1"></span>
+ </p>
+ <p id="pseudo-only-p2">
+ <span id="pseudo-only-span2"></span>
+ <span id="pseudo-only-span3"></span>
+ </p>
+ <p id="pseudo-only-p3">
+ <span id="pseudo-only-span4"></span>
+ <em id="pseudo-only-em1"></em>
+ <span id="pseudo-only-span5"></span>
+ </p>
+ </div>>
+
+ <div id="pseudo-empty">
+ <p id="pseudo-empty-p1"></p>
+ <p id="pseudo-empty-p2"><!-- comment node --></p>
+ <p id="pseudo-empty-p3"> </p>
+ <p id="pseudo-empty-p4">Text node</p>
+ <p id="pseudo-empty-p5"><span id="pseudo-empty-span1"></span></p>
+ </div>
+
+ <div id="pseudo-link">
+ <a id="pseudo-link-a1" href="">with href</a>
+ <a id="pseudo-link-a2" href="http://example.org/">with href</a>
+ <a id="pseudo-link-a3">without href</a>
+ <map name="pseudo-link-map1" id="pseudo-link-map1">
+ <area id="pseudo-link-area1" href=""/>
+ <area id="pseudo-link-area2"/>
+ </map>
+ </div>
+
+ <div id="pseudo-lang">
+ <div id="pseudo-lang-div1"></div>
+ <div id="pseudo-lang-div2" lang="fr"></div>
+ <div id="pseudo-lang-div3" lang="en-AU"></div>
+ <div id="pseudo-lang-div4" lang="es"></div>
+ </div>
+
+ <div id="pseudo-ui">
+ <input id="pseudo-ui-input1" type="text"/>
+ <input id="pseudo-ui-input2" type="password"/>
+ <input id="pseudo-ui-input3" type="radio"/>
+ <input id="pseudo-ui-input4" type="radio" checked="checked"/>
+ <input id="pseudo-ui-input5" type="checkbox"/>
+ <input id="pseudo-ui-input6" type="checkbox" checked="checked"/>
+ <input id="pseudo-ui-input7" type="submit"/>
+ <input id="pseudo-ui-input8" type="button"/>
+ <input id="pseudo-ui-input9" type="hidden"/>
+ <textarea id="pseudo-ui-textarea1"></textarea>
+ <button id="pseudo-ui-button1">Enabled</button>
+
+ <input id="pseudo-ui-input10" disabled="disabled" type="text"/>
+ <input id="pseudo-ui-input11" disabled="disabled" type="password"/>
+ <input id="pseudo-ui-input12" disabled="disabled" type="radio"/>
+ <input id="pseudo-ui-input13" disabled="disabled" type="radio" checked="checked"/>
+ <input id="pseudo-ui-input14" disabled="disabled" type="checkbox"/>
+ <input id="pseudo-ui-input15" disabled="disabled" type="checkbox" checked="checked"/>
+ <input id="pseudo-ui-input16" disabled="disabled" type="submit"/>
+ <input id="pseudo-ui-input17" disabled="disabled" type="button"/>
+ <input id="pseudo-ui-input18" disabled="disabled" type="hidden"/>
+ <textarea id="pseudo-ui-textarea2" disabled="disabled"></textarea>
+ <button id="pseudo-ui-button2" disabled="disabled">Disabled</button>
+ </div>
+
+ <div id="not">
+ <div id="not-div1"></div>
+ <div id="not-div2"></div>
+ <div id="not-div3"></div>
+
+ <p id="not-p1"><span id="not-span1"></span><em id="not-em1"></em></p>
+ <p id="not-p2"><span id="not-span2"></span><em id="not-em2"></em></p>
+ <p id="not-p3"><span id="not-span3"></span><em id="not-em3"></em></p>
+ </div>
+
+ <div id="pseudo-element">All pseudo-element tests</div>
+
+ <div id="class">
+ <p id="class-p1" class="foo class-p bar"></p>
+ <p id="class-p2" class="class-p foo bar"></p>
+ <p id="class-p3" class="foo bar class-p"></p>
+
+ <!-- All permutations of the classes should match -->
+ <div id="class-div1" class="apple orange banana"></div>
+ <div id="class-div2" class="apple banana orange"></div>
+ <p id="class-p4" class="orange apple banana"></p>
+ <div id="class-div3" class="orange banana apple"></div>
+ <p id="class-p6" class="banana apple orange"></p>
+ <div id="class-div4" class="banana orange apple"></div>
+ <div id="class-div5" class="apple orange"></div>
+ <div id="class-div6" class="apple banana"></div>
+ <div id="class-div7" class="orange banana"></div>
+
+ <span id="class-span1" class="台北Táiběi 台北"></span>
+ <span id="class-span2" class="台北"></span>
+
+ <span id="class-span3" class="foo:bar"></span>
+ <span id="class-span4" class="test.foo[5]bar"></span>
+ </div>
+
+ <div id="id">
+ <div id="id-div1"></div>
+ <div id="id-div2"></div>
+
+ <ul id="id-ul1">
+ <li id="id-li-duplicate"></li>
+ <li id="id-li-duplicate"></li>
+ <li id="id-li-duplicate"></li>
+ <li id="id-li-duplicate"></li>
+ </ul>
+
+ <span id="台北Táiběi"></span>
+ <span id="台北"></span>
+
+ <span id="#foo:bar"></span>
+ <span id="test.foo[5]bar"></span>
+ </div>
+
+ <div id="descendant">
+ <div id="descendant-div1" class="descendant-div1">
+ <div id="descendant-div2" class="descendant-div2">
+ <div id="descendant-div3" class="descendant-div3">
+ </div>
+ </div>
+ </div>
+ <div id="descendant-div4" class="descendant-div4"></div>
+ </div>
+
+ <div id="child">
+ <div id="child-div1" class="child-div1">
+ <div id="child-div2" class="child-div2">
+ <div id="child-div3" class="child-div3">
+ </div>
+ </div>
+ </div>
+ <div id="child-div4" class="child-div4"></div>
+ </div>
+
+ <div id="adjacent">
+ <div id="adjacent-div1" class="adjacent-div1"></div>
+ <div id="adjacent-div2" class="adjacent-div2">
+ <div id="adjacent-div3" class="adjacent-div3"></div>
+ </div>
+ <div id="adjacent-div4" class="adjacent-div4">
+ <p id="adjacent-p1" class="adjacent-p1"></p>
+ <div id="adjacent-div5" class="adjacent-div5"></div>
+ </div>
+ <div id="adjacent-div6" class="adjacent-div6"></div>
+ <p id="adjacent-p2" class="adjacent-p2"></p>
+ <p id="adjacent-p3" class="adjacent-p3"></p>
+ </div>
+
+ <div id="sibling">
+ <div id="sibling-div1" class="sibling-div"></div>
+ <div id="sibling-div2" class="sibling-div">
+ <div id="sibling-div3" class="sibling-div"></div>
+ </div>
+ <div id="sibling-div4" class="sibling-div">
+ <p id="sibling-p1" class="sibling-p"></p>
+ <div id="sibling-div5" class="sibling-div"></div>
+ </div>
+ <div id="sibling-div6" class="sibling-div"></div>
+ <p id="sibling-p2" class="sibling-p"></p>
+ <p id="sibling-p3" class="sibling-p"></p>
+ </div>
+
+ <div id="group">
+ <em id="group-em1"></em>
+ <strong id="group-strong1"></strong>
+ </div>
+</div>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesselectorsjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/selectors.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/selectors.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/selectors.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,721 @@
</span><ins>+// Bit-mapped flags to indicate which tests the selector is suitable for
+var TEST_QSA = 0x01; // querySelector() and querySelectorAll() tests
+var TEST_FIND = 0x04; // find() and findAll() tests, may be unsuitable for querySelector[All]
+var TEST_MATCH = 0x10; // matches() tests
+
+/*
+ * All of these invalid selectors should result in a SyntaxError being thrown by the APIs.
+ *
+ * name: A descriptive name of the selector being tested
+ * selector: The selector to test
+ */
+var invalidSelectors = [
+ {name: "Empty String", selector: ""},
+ {name: "Invalid character", selector: "["},
+ {name: "Invalid character", selector: "]"},
+ {name: "Invalid character", selector: "("},
+ {name: "Invalid character", selector: ")"},
+ {name: "Invalid character", selector: "{"},
+ {name: "Invalid character", selector: "}"},
+ {name: "Invalid character", selector: "<"},
+ {name: "Invalid character", selector: ">"},
+ {name: "Invalid ID", selector: "#"},
+ {name: "Invalid group of selectors", selector: "div,"},
+ {name: "Invalid class", selector: "."},
+ {name: "Invalid class", selector: ".5cm"},
+ {name: "Invalid class", selector: "..test"},
+ {name: "Invalid class", selector: ".foo..quux"},
+ {name: "Invalid class", selector: ".bar."},
+ {name: "Invalid combinator", selector: "div & address, p"},
+ {name: "Invalid combinator", selector: "div >> address, p"},
+ {name: "Invalid combinator", selector: "div ++ address, p"},
+ {name: "Invalid combinator", selector: "div ~~ address, p"},
+ {name: "Invalid [att=value] selector", selector: "[*=test]"},
+ {name: "Invalid [att=value] selector", selector: "[*|*=test]"},
+ {name: "Invalid [att=value] selector", selector: "[class= space unquoted ]"},
+ {name: "Unknown pseudo-class", selector: "div:example"},
+ {name: "Unknown pseudo-class", selector: ":example"},
+ {name: "Unknown pseudo-element", selector: "div::example"},
+ {name: "Unknown pseudo-element", selector: "::example"},
+ {name: "Invalid pseudo-element", selector: ":::before"},
+ {name: "Undeclared namespace", selector: "ns|div"},
+ {name: "Undeclared namespace", selector: ":not(ns|div)"},
+ {name: "Invalid namespace", selector: "^|div"},
+ {name: "Invalid namespace", selector: "$|div"}
+];
+
+/*
+ * All of these should be valid selectors, expected to match zero or more elements in the document.
+ * None should throw any errors.
+ *
+ * name: A descriptive name of the selector being tested
+ * selector: The selector to test
+ * expect: A list of IDs of the elements expected to be matched. List must be given in tree order.
+ * exclude: An array of contexts to exclude from testing. The valid values are:
+ * ["document", "element", "fragment", "detached", "html", "xhtml"]
+ * The "html" and "xhtml" values represent the type of document being queried. These are useful
+ * for tests that are affected by differences between HTML and XML, such as case sensitivity.
+ * level: An integer indicating the CSS or Selectors level in which the selector being tested was introduced.
+ * testType: A bit-mapped flag indicating the type of test.
+ *
+ * Note: Interactive pseudo-classes (:active :hover and :focus) have not been tested in this test suite.
+ */
+var validSelectors = [
+ // Type Selector
+ {name: "Type selector, matching html element", selector: "html", expect: ["html"], exclude: ["element", "fragment", "detached"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Type selector, matching html element", selector: "html", expect: [] /*no matches*/, exclude: ["document"], level: 1, testType: TEST_QSA},
+ {name: "Type selector, matching body element", selector: "body", expect: ["body"], exclude: ["element", "fragment", "detached"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Type selector, matching body element", selector: "body", expect: [] /*no matches*/, exclude: ["document"], level: 1, testType: TEST_QSA},
+
+ // Universal Selector
+ // Testing "*" for entire an entire context node is handled separately.
+ {name: "Universal selector, matching all children of element with specified ID", selector: "#universal>*", expect: ["universal-p1", "universal-hr1", "universal-pre1", "universal-p2", "universal-address1"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Universal selector, matching all grandchildren of element with specified ID", selector: "#universal>*>*", expect: ["universal-code1", "universal-span1", "universal-a1", "universal-code2"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Universal selector, matching all children of empty element with specified ID", selector: "#empty>*", expect: [] /*no matches*/, level: 2, testType: TEST_QSA},
+ {name: "Universal selector, matching all descendants of element with specified ID", selector: "#universal *", expect: ["universal-p1", "universal-code1", "universal-hr1", "universal-pre1", "universal-span1", "universal-p2", "universal-a1", "universal-address1", "universal-code2", "universal-a2"], level: 2, testType: TEST_QSA | TEST_MATCH},
+
+ // Attribute Selectors
+ // - presence [att]
+ {name: "Attribute presence selector, matching align attribute with value", selector: ".attr-presence-div1[align]", expect: ["attr-presence-div1"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute presence selector, matching align attribute with empty value", selector: ".attr-presence-div2[align]", expect: ["attr-presence-div2"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute presence selector, matching title attribute, case insensitivity", selector: "#attr-presence [TiTlE]", expect: ["attr-presence-a1", "attr-presence-span1"], exclude: ["xhtml"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute presence selector, not matching title attribute, case sensitivity", selector: "#attr-presence [TiTlE]", expect: [], exclude: ["html"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute presence selector, matching custom data-* attribute", selector: "[data-attr-presence]", expect: ["attr-presence-pre1", "attr-presence-blockquote1"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute presence selector, not matching attribute with similar name", selector: ".attr-presence-div3[align], .attr-presence-div4[align]", expect: [] /*no matches*/, level: 2, testType: TEST_QSA},
+ {name: "Attribute presence selector, matching attribute with non-ASCII characters", selector: "ul[data-中文]", expect: ["attr-presence-ul1"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute presence selector, not matching default option without selected attribute", selector: "#attr-presence-select1 option[selected]", expect: [] /* no matches */, level: 2, testType: TEST_QSA},
+ {name: "Attribute presence selector, matching option with selected attribute", selector: "#attr-presence-select2 option[selected]", expect: ["attr-presence-select2-option4"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute presence selector, matching multiple options with selected attributes", selector: "#attr-presence-select3 option[selected]", expect: ["attr-presence-select3-option2", "attr-presence-select3-option3"], level: 2, testType: TEST_QSA | TEST_MATCH},
+
+ // - value [att=val]
+ {name: "Attribute value selector, matching align attribute with value", selector: "#attr-value [align=\"center\"]", expect: ["attr-value-div1"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute value selector, matching align attribute with empty value", selector: "#attr-value [align=\"\"]", expect: ["attr-value-div2"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute value selector, not matching align attribute with partial value", selector: "#attr-value [align=\"c\"]", expect: [] /*no matches*/, level: 2, testType: TEST_QSA},
+ {name: "Attribute value selector, not matching align attribute with incorrect value", selector: "#attr-value [align=\"centera\"]", expect: [] /*no matches*/, level: 2, testType: TEST_QSA},
+ {name: "Attribute value selector, matching custom data-* attribute with unicode escaped value", selector: "[data-attr-value=\"\\e9\"]", expect: ["attr-value-div3"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute value selector, matching custom data-* attribute with escaped character", selector: "[data-attr-value\_foo=\"\\e9\"]", expect: ["attr-value-div4"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute value selector with single-quoted value, matching multiple inputs with type attributes", selector: "#attr-value input[type='hidden'],#attr-value input[type='radio']", expect: ["attr-value-input3", "attr-value-input4", "attr-value-input6", "attr-value-input8", "attr-value-input9"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute value selector with double-quoted value, matching multiple inputs with type attributes", selector: "#attr-value input[type=\"hidden\"],#attr-value input[type='radio']", expect: ["attr-value-input3", "attr-value-input4", "attr-value-input6", "attr-value-input8", "attr-value-input9"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute value selector with unquoted value, matching multiple inputs with type attributes", selector: "#attr-value input[type=hidden],#attr-value input[type=radio]", expect: ["attr-value-input3", "attr-value-input4", "attr-value-input6", "attr-value-input8", "attr-value-input9"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute value selector, matching attribute with value using non-ASCII characters", selector: "[data-attr-value=中文]", expect: ["attr-value-div5"], level: 2, testType: TEST_QSA | TEST_MATCH},
+
+ // - whitespace-separated list [att~=val]
+ {name: "Attribute whitespace-separated list selector, matching class attribute with value", selector: "#attr-whitespace [class~=\"div1\"]", expect: ["attr-whitespace-div1"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute whitespace-separated list selector, not matching class attribute with empty value", selector: "#attr-whitespace [class~=\"\"]", expect: [] /*no matches*/ , level: 2, testType: TEST_QSA},
+ {name: "Attribute whitespace-separated list selector, not matching class attribute with partial value", selector: "[data-attr-whitespace~=\"div\"]", expect: [] /*no matches*/ , level: 2, testType: TEST_QSA},
+ {name: "Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value", selector: "[data-attr-whitespace~=\"\\0000e9\"]", expect: ["attr-whitespace-div4"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character", selector: "[data-attr-whitespace\_foo~=\"\\e9\"]", expect: ["attr-whitespace-div5"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes", selector: "#attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']", expect: ["attr-whitespace-a1", "attr-whitespace-a2", "attr-whitespace-a3", "attr-whitespace-a5", "attr-whitespace-a7"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes", selector: "#attr-whitespace a[rel~=\"bookmark\"],#attr-whitespace a[rel~='nofollow']", expect: ["attr-whitespace-a1", "attr-whitespace-a2", "attr-whitespace-a3", "attr-whitespace-a5", "attr-whitespace-a7"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes", selector: "#attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]", expect: ["attr-whitespace-a1", "attr-whitespace-a2", "attr-whitespace-a3", "attr-whitespace-a5", "attr-whitespace-a7"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute whitespace-separated list selector with double-quoted value, not matching value with space", selector: "#attr-whitespace a[rel~=\"book mark\"]", expect: [] /* no matches */, level: 2, testType: TEST_QSA},
+ {name: "Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters", selector: "#attr-whitespace [title~=中文]", expect: ["attr-whitespace-p1"], level: 2, testType: TEST_QSA | TEST_MATCH},
+
+ // - hyphen-separated list [att|=val]
+ {name: "Attribute hyphen-separated list selector, not matching unspecified lang attribute", selector: "#attr-hyphen-div1[lang|=\"en\"]", expect: [] /*no matches*/, level: 2, testType: TEST_QSA},
+ {name: "Attribute hyphen-separated list selector, matching lang attribute with exact value", selector: "#attr-hyphen-div2[lang|=\"fr\"]", expect: ["attr-hyphen-div2"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute hyphen-separated list selector, matching lang attribute with partial value", selector: "#attr-hyphen-div3[lang|=\"en\"]", expect: ["attr-hyphen-div3"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute hyphen-separated list selector, not matching incorrect value", selector: "#attr-hyphen-div4[lang|=\"es-AR\"]", expect: [] /*no matches*/, level: 2, testType: TEST_QSA},
+
+ // - substring begins-with [att^=val] (Level 3)
+ {name: "Attribute begins with selector, matching href attributes beginning with specified substring", selector: "#attr-begins a[href^=\"http://www\"]", expect: ["attr-begins-a1", "attr-begins-a3"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute begins with selector, matching lang attributes beginning with specified substring, ", selector: "#attr-begins [lang^=\"en-\"]", expect: ["attr-begins-div2", "attr-begins-div4"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute begins with selector, not matching class attribute not beginning with specified substring", selector: "#attr-begins [class^=apple]", expect: [] /*no matches*/, level: 3, testType: TEST_QSA},
+ {name: "Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring", selector: "#attr-begins [class^=' apple']", expect: ["attr-begins-p1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring", selector: "#attr-begins [class^=\" apple\"]", expect: ["attr-begins-p1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring", selector: "#attr-begins [class^= apple]", expect: [] /*no matches*/, level: 3, testType: TEST_QSA},
+
+ // - substring ends-with [att$=val] (Level 3)
+ {name: "Attribute ends with selector, matching href attributes ending with specified substring", selector: "#attr-ends a[href$=\".org\"]", expect: ["attr-ends-a1", "attr-ends-a3"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute ends with selector, matching lang attributes ending with specified substring, ", selector: "#attr-ends [lang$=\"-CH\"]", expect: ["attr-ends-div2", "attr-ends-div4"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute ends with selector, not matching class attribute not ending with specified substring", selector: "#attr-ends [class$=apple]", expect: [] /*no matches*/, level: 3, testType: TEST_QSA},
+ {name: "Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring", selector: "#attr-ends [class$='apple ']", expect: ["attr-ends-p1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring", selector: "#attr-ends [class$=\"apple \"]", expect: ["attr-ends-p1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring", selector: "#attr-ends [class$=apple ]", expect: [] /*no matches*/, level: 3, testType: TEST_QSA},
+
+ // - substring contains [att*=val] (Level 3)
+ {name: "Attribute contains selector, matching href attributes beginning with specified substring", selector: "#attr-contains a[href*=\"http://www\"]", expect: ["attr-contains-a1", "attr-contains-a3"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute contains selector, matching href attributes ending with specified substring", selector: "#attr-contains a[href*=\".org\"]", expect: ["attr-contains-a1", "attr-contains-a2"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute contains selector, matching href attributes containing specified substring", selector: "#attr-contains a[href*=\".example.\"]", expect: ["attr-contains-a1", "attr-contains-a3"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute contains selector, matching lang attributes beginning with specified substring, ", selector: "#attr-contains [lang*=\"en-\"]", expect: ["attr-contains-div2", "attr-contains-div6"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute contains selector, matching lang attributes ending with specified substring, ", selector: "#attr-contains [lang*=\"-CH\"]", expect: ["attr-contains-div3", "attr-contains-div5"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring", selector: "#attr-contains [class*=' apple']", expect: ["attr-contains-p1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute contains selector with single-quoted value, matching class attribute ending with specified substring", selector: "#attr-contains [class*='orange ']", expect: ["attr-contains-p1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute contains selector with single-quoted value, matching class attribute containing specified substring", selector: "#attr-contains [class*='ple banana ora']", expect: ["attr-contains-p1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring", selector: "#attr-contains [class*=\" apple\"]", expect: ["attr-contains-p1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute contains selector with double-quoted value, matching class attribute ending with specified substring", selector: "#attr-contains [class*=\"orange \"]", expect: ["attr-contains-p1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute contains selector with double-quoted value, matching class attribute containing specified substring", selector: "#attr-contains [class*=\"ple banana ora\"]", expect: ["attr-contains-p1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute contains selector with unquoted value, matching class attribute beginning with specified substring", selector: "#attr-contains [class*= apple]", expect: ["attr-contains-p1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute contains selector with unquoted value, matching class attribute ending with specified substring", selector: "#attr-contains [class*=orange ]", expect: ["attr-contains-p1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "Attribute contains selector with unquoted value, matching class attribute containing specified substring", selector: "#attr-contains [class*= banana ]", expect: ["attr-contains-p1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+
+ // Pseudo-classes
+ // - :root (Level 3)
+ {name: ":root pseudo-class selector, matching document root element", selector: ":root", expect: ["html"], exclude: ["element", "fragment", "detached"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":root pseudo-class selector, not matching document root element", selector: ":root", expect: [] /*no matches*/, exclude: ["document"], level: 3, testType: TEST_QSA},
+
+ // - :nth-child(n) (Level 3)
+ // XXX write descriptions
+ {name: ":nth-child selector, matching the third child element", selector: "#pseudo-nth-table1 :nth-child(3)", expect: ["pseudo-nth-td3", "pseudo-nth-td9", "pseudo-nth-tr3", "pseudo-nth-td15"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":nth-child selector, matching every third child element", selector: "#pseudo-nth li:nth-child(3n)", expect: ["pseudo-nth-li3", "pseudo-nth-li6", "pseudo-nth-li9", "pseudo-nth-li12"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":nth-child selector, matching every second child element, starting from the fourth", selector: "#pseudo-nth li:nth-child(2n+4)", expect: ["pseudo-nth-li4", "pseudo-nth-li6", "pseudo-nth-li8", "pseudo-nth-li10", "pseudo-nth-li12"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":nth-child selector, matching every fourth child element, starting from the third", selector: "#pseudo-nth-p1 :nth-child(4n-1)", expect: ["pseudo-nth-em2", "pseudo-nth-span3"], level: 3, testType: TEST_QSA | TEST_MATCH},
+
+ // - :nth-last-child (Level 3)
+ {name: ":nth-last-child selector, matching the third last child element", selector: "#pseudo-nth-table1 :nth-last-child(3)", expect: ["pseudo-nth-tr1", "pseudo-nth-td4", "pseudo-nth-td10", "pseudo-nth-td16"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":nth-last-child selector, matching every third child element from the end", selector: "#pseudo-nth li:nth-last-child(3n)", expect: ["pseudo-nth-li1", "pseudo-nth-li4", "pseudo-nth-li7", "pseudo-nth-li10"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":nth-last-child selector, matching every second child element from the end, starting from the fourth last", selector: "#pseudo-nth li:nth-last-child(2n+4)", expect: ["pseudo-nth-li1", "pseudo-nth-li3", "pseudo-nth-li5", "pseudo-nth-li7", "pseudo-nth-li9"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":nth-last-child selector, matching every fourth element from the end, starting from the third last", selector: "#pseudo-nth-p1 :nth-last-child(4n-1)", expect: ["pseudo-nth-span2", "pseudo-nth-span4"], level: 3, testType: TEST_QSA | TEST_MATCH},
+
+ // - :nth-of-type(n) (Level 3)
+ {name: ":nth-of-type selector, matching the third em element", selector: "#pseudo-nth-p1 em:nth-of-type(3)", expect: ["pseudo-nth-em3"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":nth-of-type selector, matching every second element of their type", selector: "#pseudo-nth-p1 :nth-of-type(2n)", expect: ["pseudo-nth-em2", "pseudo-nth-span2", "pseudo-nth-span4", "pseudo-nth-strong2", "pseudo-nth-em4"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":nth-of-type selector, matching every second elemetn of their type, starting from the first", selector: "#pseudo-nth-p1 span:nth-of-type(2n-1)", expect: ["pseudo-nth-span1", "pseudo-nth-span3"], level: 3, testType: TEST_QSA | TEST_MATCH},
+
+ // - :nth-last-of-type(n) (Level 3)
+ {name: ":nth-last-of-type selector, matching the thrid last em element", selector: "#pseudo-nth-p1 em:nth-last-of-type(3)", expect: ["pseudo-nth-em2"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":nth-last-of-type selector, matching every second last element of their type", selector: "#pseudo-nth-p1 :nth-last-of-type(2n)", expect: ["pseudo-nth-span1", "pseudo-nth-em1", "pseudo-nth-strong1", "pseudo-nth-em3", "pseudo-nth-span3"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":nth-last-of-type selector, matching every second last element of their type, starting from the last", selector: "#pseudo-nth-p1 span:nth-last-of-type(2n-1)", expect: ["pseudo-nth-span2", "pseudo-nth-span4"], level: 3, testType: TEST_QSA | TEST_MATCH},
+
+ // - :first-of-type (Level 3)
+ {name: ":first-of-type selector, matching the first em element", selector: "#pseudo-nth-p1 em:first-of-type", expect: ["pseudo-nth-em1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":first-of-type selector, matching the first of every type of element", selector: "#pseudo-nth-p1 :first-of-type", expect: ["pseudo-nth-span1", "pseudo-nth-em1", "pseudo-nth-strong1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":first-of-type selector, matching the first td element in each table row", selector: "#pseudo-nth-table1 tr :first-of-type", expect: ["pseudo-nth-td1", "pseudo-nth-td7", "pseudo-nth-td13"], level: 3, testType: TEST_QSA | TEST_MATCH},
+
+ // - :last-of-type (Level 3)
+ {name: ":last-of-type selector, matching the last em elemnet", selector: "#pseudo-nth-p1 em:last-of-type", expect: ["pseudo-nth-em4"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":last-of-type selector, matching the last of every type of element", selector: "#pseudo-nth-p1 :last-of-type", expect: ["pseudo-nth-span4", "pseudo-nth-strong2", "pseudo-nth-em4"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":last-of-type selector, matching the last td element in each table row", selector: "#pseudo-nth-table1 tr :last-of-type", expect: ["pseudo-nth-td6", "pseudo-nth-td12", "pseudo-nth-td18"], level: 3, testType: TEST_QSA | TEST_MATCH},
+
+ // - :first-child
+ {name: ":first-child pseudo-class selector, matching first child div element", selector: "#pseudo-first-child div:first-child", expect: ["pseudo-first-child-div1"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: ":first-child pseudo-class selector, doesn't match non-first-child elements", selector: ".pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child", expect: [] /*no matches*/, level: 2, testType: TEST_QSA},
+ {name: ":first-child pseudo-class selector, matching first-child of multiple elements", selector: "#pseudo-first-child span:first-child", expect: ["pseudo-first-child-span1", "pseudo-first-child-span3", "pseudo-first-child-span5"], level: 2, testType: TEST_QSA | TEST_MATCH},
+
+ // - :last-child (Level 3)
+ {name: ":last-child pseudo-class selector, matching last child div element", selector: "#pseudo-last-child div:last-child", expect: ["pseudo-last-child-div3"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":last-child pseudo-class selector, doesn't match non-last-child elements", selector: ".pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child", expect: [] /*no matches*/, level: 3, testType: TEST_QSA},
+ {name: ":last-child pseudo-class selector, matching first-child of multiple elements", selector: "#pseudo-last-child span:last-child", expect: ["pseudo-last-child-span2", "pseudo-last-child-span4", "pseudo-last-child-span6"], level: 3, testType: TEST_QSA | TEST_MATCH},
+
+ // - :only-child (Level 3)
+ {name: ":pseudo-only-child pseudo-class selector, matching all only-child elements", selector: "#pseudo-only :only-child", expect: ["pseudo-only-span1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":pseudo-only-child pseudo-class selector, matching only-child em elements", selector: "#pseudo-only em:only-child", expect: [] /*no matches*/, level: 3, testType: TEST_QSA},
+
+ // - :only-of-type (Level 3)
+ {name: ":pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type", selector: "#pseudo-only :only-of-type", expect: ["pseudo-only-span1", "pseudo-only-em1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type", selector: "#pseudo-only em:only-of-type", expect: ["pseudo-only-em1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+
+ // - :empty (Level 3)
+ {name: ":empty pseudo-class selector, matching empty p elements", selector: "#pseudo-empty p:empty", expect: ["pseudo-empty-p1", "pseudo-empty-p2"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":empty pseudo-class selector, matching all empty elements", selector: "#pseudo-empty :empty", expect: ["pseudo-empty-p1", "pseudo-empty-p2", "pseudo-empty-span1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+
+ // - :link and :visited
+ // Implementations may treat all visited links as unvisited, so these cannot be tested separately.
+ // The only guarantee is that ":link,:visited" matches the set of all visited and unvisited links and that they are individually mutually exclusive sets.
+ {name: ":link and :visited pseudo-class selectors, matching a and area elements with href attributes", selector: "#pseudo-link :link, #pseudo-link :visited", expect: ["pseudo-link-a1", "pseudo-link-a2", "pseudo-link-area1"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: ":link and :visited pseudo-class selectors, matching link elements with href attributes", selector: "#head :link, #head :visited", expect: ["pseudo-link-link1", "pseudo-link-link2"], exclude: ["element", "fragment", "detached"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: ":link and :visited pseudo-class selectors, not matching link elements with href attributes", selector: "#head :link, #head :visited", expect: [] /*no matches*/, exclude: ["document"], level: 1, testType: TEST_QSA},
+ {name: ":link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing", selector: ":link:visited", expect: [] /*no matches*/, exclude: ["document"], level: 1, testType: TEST_QSA},
+
+ // - :target (Level 3)
+ {name: ":target pseudo-class selector, matching the element referenced by the URL fragment identifier", selector: ":target", expect: [] /*no matches*/, exclude: ["document", "element"], level: 3, testType: TEST_QSA},
+ {name: ":target pseudo-class selector, matching the element referenced by the URL fragment identifier", selector: ":target", expect: ["target"], exclude: ["fragment", "detached"], level: 3, testType: TEST_QSA | TEST_MATCH},
+
+ // - :lang()
+ {name: ":lang pseudo-class selector, matching inherited language", selector: "#pseudo-lang-div1:lang(en)", expect: ["pseudo-lang-div1"], exclude: ["detached", "fragment"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: ":lang pseudo-class selector, not matching element with no inherited language", selector: "#pseudo-lang-div1:lang(en)", expect: [] /*no matches*/, exclude: ["document", "element"], level: 2, testType: TEST_QSA},
+ {name: ":lang pseudo-class selector, matching specified language with exact value", selector: "#pseudo-lang-div2:lang(fr)", expect: ["pseudo-lang-div2"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: ":lang pseudo-class selector, matching specified language with partial value", selector: "#pseudo-lang-div3:lang(en)", expect: ["pseudo-lang-div3"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: ":lang pseudo-class selector, not matching incorrect language", selector: "#pseudo-lang-div4:lang(es-AR)", expect: [] /*no matches*/, level: 2, testType: TEST_QSA},
+
+ // - :enabled (Level 3)
+ {name: ":enabled pseudo-class selector, matching all enabled form controls", selector: "#pseudo-ui :enabled", expect: ["pseudo-ui-input1", "pseudo-ui-input2", "pseudo-ui-input3", "pseudo-ui-input4", "pseudo-ui-input5", "pseudo-ui-input6",
+ "pseudo-ui-input7", "pseudo-ui-input8", "pseudo-ui-input9", "pseudo-ui-textarea1", "pseudo-ui-button1"], level: 3, testType: TEST_QSA | TEST_MATCH},
+
+ // - :disabled (Level 3)
+ {name: ":enabled pseudo-class selector, matching all disabled form controls", selector: "#pseudo-ui :disabled", expect: ["pseudo-ui-input10", "pseudo-ui-input11", "pseudo-ui-input12", "pseudo-ui-input13", "pseudo-ui-input14", "pseudo-ui-input15",
+ "pseudo-ui-input16", "pseudo-ui-input17", "pseudo-ui-input18", "pseudo-ui-textarea2", "pseudo-ui-button2"], level: 3, testType: TEST_QSA | TEST_MATCH},
+
+ // - :checked (Level 3)
+ {name: ":checked pseudo-class selector, matching checked radio buttons and checkboxes", selector: "#pseudo-ui :checked", expect: ["pseudo-ui-input4", "pseudo-ui-input6", "pseudo-ui-input13", "pseudo-ui-input15"], level: 3, testType: TEST_QSA | TEST_MATCH},
+
+ // - :not(s) (Level 3)
+ {name: ":not pseudo-class selector, matching ", selector: "#not>:not(div)", expect: ["not-p1", "not-p2", "not-p3"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":not pseudo-class selector, matching ", selector: "#not * :not(:first-child)", expect: ["not-em1", "not-em2", "not-em3"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: ":not pseudo-class selector, matching nothing", selector: ":not(*)", expect: [] /* no matches */, level: 3, testType: TEST_QSA},
+ {name: ":not pseudo-class selector, matching nothing", selector: ":not(*|*)", expect: [] /* no matches */, level: 3, testType: TEST_QSA},
+
+ // Pseudo-elements
+ // - ::first-line
+ {name: ":first-line pseudo-element (one-colon syntax) selector, not matching any elements", selector: "#pseudo-element:first-line", expect: [] /*no matches*/, level: 2, testType: TEST_QSA},
+ {name: "::first-line pseudo-element (two-colon syntax) selector, not matching any elements", selector: "#pseudo-element::first-line", expect: [] /*no matches*/, level: 3, testType: TEST_QSA},
+
+ // - ::first-letter
+ {name: ":first-letter pseudo-element (one-colon syntax) selector, not matching any elements", selector: "#pseudo-element:first-letter", expect: [] /*no matches*/, level: 2, testType: TEST_QSA},
+ {name: "::first-letter pseudo-element (two-colon syntax) selector, not matching any elements", selector: "#pseudo-element::first-letter", expect: [] /*no matches*/, level: 3, testType: TEST_QSA},
+
+ // - ::before
+ {name: ":before pseudo-element (one-colon syntax) selector, not matching any elements", selector: "#pseudo-element:before", expect: [] /*no matches*/, level: 2, testType: TEST_QSA},
+ {name: "::before pseudo-element (two-colon syntax) selector, not matching any elements", selector: "#pseudo-element::before", expect: [] /*no matches*/, level: 3, testType: TEST_QSA},
+
+ // - ::after
+ {name: ":after pseudo-element (one-colon syntax) selector, not matching any elements", selector: "#pseudo-element:after", expect: [] /*no matches*/, level: 2, testType: TEST_QSA},
+ {name: "::after pseudo-element (two-colon syntax) selector, not matching any elements", selector: "#pseudo-element::after", expect: [] /*no matches*/, level: 3, testType: TEST_QSA},
+
+ // Class Selectors
+ {name: "Class selector, matching element with specified class", selector: ".class-p", expect: ["class-p1","class-p2", "class-p3"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Class selector, chained, matching only elements with all specified classes", selector: "#class .apple.orange.banana", expect: ["class-div1", "class-div2", "class-p4", "class-div3", "class-p6", "class-div4"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Class Selector, chained, with type selector", selector: "div.apple.banana.orange", expect: ["class-div1", "class-div2", "class-div3", "class-div4"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ // Caution: If copying and pasting the folowing non-ASCII classes, ensure unicode normalisation is not performed in the process.
+ {name: "Class selector, matching element with class value using non-ASCII characters", selector: ".台北Táiběi", expect: ["class-span1"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Class selector, matching multiple elements with class value using non-ASCII characters", selector: ".台北", expect: ["class-span1","class-span2"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Class selector, chained, matching element with multiple class values using non-ASCII characters", selector: ".台北Táiběi.台北", expect: ["class-span1"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Class selector, matching element with class with escaped character", selector: ".foo\\:bar", expect: ["class-span3"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Class selector, matching element with class with escaped character", selector: ".test\\.foo\\[5\\]bar", expect: ["class-span4"], level: 1, testType: TEST_QSA | TEST_MATCH},
+
+ // ID Selectors
+ {name: "ID selector, matching element with specified id", selector: "#id #id-div1", expect: ["id-div1"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "ID selector, chained, matching element with specified id", selector: "#id-div1, #id-div1", expect: ["id-div1"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "ID selector, chained, matching element with specified id", selector: "#id-div1, #id-div2", expect: ["id-div1", "id-div2"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "ID Selector, chained, with type selector", selector: "div#id-div1, div#id-div2", expect: ["id-div1", "id-div2"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "ID selector, not matching non-existent descendant", selector: "#id #none", expect: [] /*no matches*/, level: 1, testType: TEST_QSA},
+ {name: "ID selector, not matching non-existent ancestor", selector: "#none #id-div1", expect: [] /*no matches*/, level: 1, testType: TEST_QSA},
+ {name: "ID selector, matching multiple elements with duplicate id", selector: "#id-li-duplicate", expect: ["id-li-duplicate", "id-li-duplicate", "id-li-duplicate", "id-li-duplicate"], level: 1, testType: TEST_QSA | TEST_MATCH},
+
+ // Caution: If copying and pasting the folowing non-ASCII IDs, ensure unicode normalisation is not performed in the process.
+ {name: "ID selector, matching id value using non-ASCII characters", selector: "#台北Táiběi", expect: ["台北Táiběi"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "ID selector, matching id value using non-ASCII characters", selector: "#台北", expect: ["台北"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "ID selector, matching id values using non-ASCII characters", selector: "#台北Táiběi, #台北", expect: ["台北Táiběi", "台北"], level: 1, testType: TEST_QSA | TEST_MATCH},
+
+ // XXX runMatchesTest() in level2-lib.js can't handle this because obtaining the expected nodes requires escaping characters when generating the selector from 'expect' values
+ {name: "ID selector, matching element with id with escaped character", selector: "#\\#foo\\:bar", expect: ["#foo:bar"], level: 1, testType: TEST_QSA},
+ {name: "ID selector, matching element with id with escaped character", selector: "#test\\.foo\\[5\\]bar", expect: ["test.foo[5]bar"], level: 1, testType: TEST_QSA},
+
+ // Namespaces
+ // XXX runMatchesTest() in level2-lib.js can't handle these because non-HTML elements don't have a recognised id
+ {name: "Namespace selector, matching element with any namespace", selector: "#any-namespace *|div", expect: ["any-namespace-div1", "any-namespace-div2", "any-namespace-div3", "any-namespace-div4"], level: 3, testType: TEST_QSA},
+ {name: "Namespace selector, matching div elements in no namespace only", selector: "#no-namespace |div", expect: ["no-namespace-div3"], level: 3, testType: TEST_QSA},
+ {name: "Namespace selector, matching any elements in no namespace only", selector: "#no-namespace |*", expect: ["no-namespace-div3"], level: 3, testType: TEST_QSA},
+
+ // Combinators
+ // - Descendant combinator ' '
+ {name: "Descendant combinator, matching element that is a descendant of an element with id", selector: "#descendant div", expect: ["descendant-div1", "descendant-div2", "descendant-div3", "descendant-div4"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Descendant combinator, matching element with id that is a descendant of an element", selector: "body #descendant-div1", expect: ["descendant-div1"], exclude: ["detached", "fragment"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Descendant combinator, matching element with id that is a descendant of an element", selector: "div #descendant-div1", expect: ["descendant-div1"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Descendant combinator, matching element with id that is a descendant of an element with id", selector: "#descendant #descendant-div2", expect: ["descendant-div2"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Descendant combinator, matching element with class that is a descendant of an element with id", selector: "#descendant .descendant-div2", expect: ["descendant-div2"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Descendant combinator, matching element with class that is a descendant of an element with class", selector: ".descendant-div1 .descendant-div3", expect: ["descendant-div3"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Descendant combinator, not matching element with id that is not a descendant of an element with id", selector: "#descendant-div1 #descendant-div4", expect: [] /*no matches*/, level: 1, testType: TEST_QSA},
+ {name: "Descendant combinator, whitespace characters", selector: "#descendant\t\r\n#descendant-div2", expect: ["descendant-div2"], level: 1, testType: TEST_QSA | TEST_MATCH},
+
+ // - Child combinator '>'
+ {name: "Child combinator, matching element that is a child of an element with id", selector: "#child>div", expect: ["child-div1", "child-div4"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Child combinator, matching element with id that is a child of an element", selector: "div>#child-div1", expect: ["child-div1"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Child combinator, matching element with id that is a child of an element with id", selector: "#child>#child-div1", expect: ["child-div1"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Child combinator, matching element with id that is a child of an element with class", selector: "#child-div1>.child-div2", expect: ["child-div2"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Child combinator, matching element with class that is a child of an element with class", selector: ".child-div1>.child-div2", expect: ["child-div2"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Child combinator, not matching element with id that is not a child of an element with id", selector: "#child>#child-div3", expect: [] /*no matches*/, level: 2, testType: TEST_QSA},
+ {name: "Child combinator, not matching element with id that is not a child of an element with class", selector: "#child-div1>.child-div3", expect: [] /*no matches*/, level: 2, testType: TEST_QSA},
+ {name: "Child combinator, not matching element with class that is not a child of an element with class", selector: ".child-div1>.child-div3", expect: [] /*no matches*/, level: 2, testType: TEST_QSA},
+ {name: "Child combinator, surrounded by whitespace", selector: "#child-div1\t\r\n>\t\r\n#child-div2", expect: ["child-div2"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Child combinator, whitespace after", selector: "#child-div1>\t\r\n#child-div2", expect: ["child-div2"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Child combinator, whitespace before", selector: "#child-div1\t\r\n>#child-div2", expect: ["child-div2"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Child combinator, no whitespace", selector: "#child-div1>#child-div2", expect: ["child-div2"], level: 2, testType: TEST_QSA | TEST_MATCH},
+
+ // - Adjacent sibling combinator '+'
+ {name: "Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id", selector: "#adjacent-div2+div", expect: ["adjacent-div4"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element", selector: "div+#adjacent-div4", expect: ["adjacent-div4"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id", selector: "#adjacent-div2+#adjacent-div4", expect: ["adjacent-div4"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id", selector: "#adjacent-div2+.adjacent-div4", expect: ["adjacent-div4"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class", selector: ".adjacent-div2+.adjacent-div4", expect: ["adjacent-div4"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element", selector: "#adjacent div+p", expect: ["adjacent-p2"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id", selector: "#adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1", expect: [] /*no matches*/, level: 2, testType: TEST_QSA},
+ {name: "Adjacent sibling combinator, surrounded by whitespace", selector: "#adjacent-p2\t\r\n+\t\r\n#adjacent-p3", expect: ["adjacent-p3"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Adjacent sibling combinator, whitespace after", selector: "#adjacent-p2+\t\r\n#adjacent-p3", expect: ["adjacent-p3"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Adjacent sibling combinator, whitespace before", selector: "#adjacent-p2\t\r\n+#adjacent-p3", expect: ["adjacent-p3"], level: 2, testType: TEST_QSA | TEST_MATCH},
+ {name: "Adjacent sibling combinator, no whitespace", selector: "#adjacent-p2+#adjacent-p3", expect: ["adjacent-p3"], level: 2, testType: TEST_QSA | TEST_MATCH},
+
+ // - General sibling combinator ~ (Level 3)
+ {name: "General sibling combinator, matching element that is a sibling of an element with id", selector: "#sibling-div2~div", expect: ["sibling-div4", "sibling-div6"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "General sibling combinator, matching element with id that is a sibling of an element", selector: "div~#sibling-div4", expect: ["sibling-div4"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "General sibling combinator, matching element with id that is a sibling of an element with id", selector: "#sibling-div2~#sibling-div4", expect: ["sibling-div4"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "General sibling combinator, matching element with class that is a sibling of an element with id", selector: "#sibling-div2~.sibling-div", expect: ["sibling-div4", "sibling-div6"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "General sibling combinator, matching p element that is a sibling of a div element", selector: "#sibling div~p", expect: ["sibling-p2", "sibling-p3"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "General sibling combinator, not matching element with id that is not a sibling after a p element", selector: "#sibling>p~div", expect: [] /*no matches*/, level: 3, testType: TEST_QSA},
+ {name: "General sibling combinator, not matching element with id that is not a sibling after an element with id", selector: "#sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1", expect: [] /*no matches*/, level: 3, testType: TEST_QSA},
+ {name: "General sibling combinator, surrounded by whitespace", selector: "#sibling-p2\t\r\n~\t\r\n#sibling-p3", expect: ["sibling-p3"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "General sibling combinator, whitespace after", selector: "#sibling-p2~\t\r\n#sibling-p3", expect: ["sibling-p3"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "General sibling combinator, whitespace before", selector: "#sibling-p2\t\r\n~#sibling-p3", expect: ["sibling-p3"], level: 3, testType: TEST_QSA | TEST_MATCH},
+ {name: "General sibling combinator, no whitespace", selector: "#sibling-p2~#sibling-p3", expect: ["sibling-p3"], level: 3, testType: TEST_QSA | TEST_MATCH},
+
+ // Group of selectors (comma)
+ {name: "Syntax, group of selectors separator, surrounded by whitespace", selector: "#group em\t\r \n,\t\r \n#group strong", expect: ["group-em1", "group-strong1"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Syntax, group of selectors separator, whitespace after", selector: "#group em,\t\r\n#group strong", expect: ["group-em1", "group-strong1"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Syntax, group of selectors separator, whitespace before", selector: "#group em\t\r\n,#group strong", expect: ["group-em1", "group-strong1"], level: 1, testType: TEST_QSA | TEST_MATCH},
+ {name: "Syntax, group of selectors separator, no whitespace", selector: "#group em,#group strong", expect: ["group-em1", "group-strong1"], level: 1, testType: TEST_QSA | TEST_MATCH},
+];
+
+
+/*
+ * These selectors are intended to be used with the find(), findAll() and matches() methods. Expected results
+ * should be determined under the assumption that :scope will be prepended to the selector where appropriate,
+ * in accordance with the specification.
+ *
+ * All of these should be valid relative selectors, expected to match zero or more elements in the document.
+ * None should throw any errors.
+ *
+ * name: A descriptive name of the selector being tested
+ *
+ * selector: The selector to test
+ *
+ * ctx: A selector to obtain the context object to use for tests invoking context.find(),
+ * and to use as a single reference node for tests invoking document.find().
+ * Note: context = root.querySelector(ctx);
+ *
+ * ref: A selector to obtain the reference nodes to be used for the selector.
+ * Note: If root is the document or an in-document element:
+ * refNodes = document.querySelectorAll(ref);
+ * Otherwise, if root is a fragment or detached element:
+ * refNodes = root.querySelectorAll(ref);
+ *
+ * expect: A list of IDs of the elements expected to be matched. List must be given in tree order.
+ *
+ * unexpected: A list of IDs of some elements that are not expected to match the given selector.
+ * This is used to verify that unexpected.matches(selector, refNode) does not match.
+ *
+ * exclude: An array of contexts to exclude from testing. The valid values are:
+ * ["document", "element", "fragment", "detached", "html", "xhtml"]
+ * The "html" and "xhtml" values represent the type of document being queried. These are useful
+ * for tests that are affected by differences between HTML and XML, such as case sensitivity.
+ *
+ * level: An integer indicating the CSS or Selectors level in which the selector being tested was introduced.
+ *
+ * testType: A bit-mapped flag indicating the type of test.
+ *
+ * The test function for these tests accepts a specified root node, on which the methods will be invoked during the tests.
+ *
+ * Based on whether either 'context' or 'refNodes', or both, are specified the tests will execute the following methods:
+ *
+ * Where testType is TEST_FIND:
+ *
+ * context.findAll(selector, refNodes)
+ * context.findAll(selector) // Only if refNodes is not specified
+ * root.findAll(selector, context) // Only if refNodes is not specified
+ * root.findAll(selector, refNodes) // Only if context is not specified
+ * root.findAll(selector) // Only if neither context nor refNodes is specified
+ *
+ * Where testType is TEST_QSA
+ *
+ * context.querySelectorAll(selector)
+ * root.querySelectorAll(selector) // Only if neither context nor refNodes is specified
+ *
+ * Equivalent tests will be run for .find() as well.
+ * Note: Do not specify a testType of TEST_QSA where either implied :scope or explicit refNodes
+ * are required.
+ *
+ * Where testType is TEST_MATCH:
+ * For each expected result given, within the specified root:
+ *
+ * expect.matches(selector, context) // Only where refNodes is not specified
+ * expect.matches(selector, refNodes)
+ * expect.matches(selector) // Only if neither context nor refNodes is specified
+ *
+ * The tests involving refNodes for both find(), findAll() and matches() will each be run by passing the
+ * collection as a NodeList, an Array and, if there is only a single element, an Element node.
+ *
+ * Note: Interactive pseudo-classes (:active :hover and :focus) have not been tested in this test suite.
+ */
+
+var scopedSelectors = [
+ //{name: "", selector: "", ctx: "", ref: "", expect: [], level: 1, testType: TEST_FIND | TEST_MATCH},
+
+ // Universal Selector
+ {name: "Universal selector, matching all children of the specified reference element", selector: ">*", ctx: "#universal", expect: ["universal-p1", "universal-hr1", "universal-pre1", "universal-p2", "universal-address1"], unexpected: ["universal", "empty"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Universal selector, matching all grandchildren of the specified reference element", selector: ">*>*", ctx: "#universal", expect: ["universal-code1", "universal-span1", "universal-a1", "universal-code2"], unexpected: ["universal", "empty"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Universal selector, matching all children of the specified empty reference element", selector: ">*", ctx: "#empty", expect: [] /*no matches*/, unexpected: ["universal", "empty"], level: 2, testType: TEST_QSA},
+ {name: "Universal selector, matching all descendants of the specified reference element", selector: "*", ctx: "#universal", expect: ["universal-p1", "universal-code1", "universal-hr1", "universal-pre1", "universal-span1",
+ "universal-p2", "universal-a1", "universal-address1", "universal-code2", "universal-a2"], unexpected: ["universal", "empty"], level: 2, testType: TEST_FIND | TEST_MATCH},
+
+ // Attribute Selectors
+ // - presence [att]
+ {name: "Attribute presence selector, matching align attribute with value", selector: ".attr-presence-div1[align]", ctx: "#attr-presence", expect: ["attr-presence-div1"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute presence selector, matching align attribute with empty value", selector: ".attr-presence-div2[align]", ctx: "#attr-presence", expect: ["attr-presence-div2"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute presence selector, matching title attribute, case insensitivity", selector: "[TiTlE]", ctx: "#attr-presence", expect: ["attr-presence-a1", "attr-presence-span1"], exclude: ["xhtml"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute presence selector, not matching title attribute, case sensitivity", selector: "[TiTlE]", ctx: "#attr-presence", expect: [], exclude: ["html"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute presence selector, matching custom data-* attribute", selector: "[data-attr-presence]", ctx: "#attr-presence", expect: ["attr-presence-pre1", "attr-presence-blockquote1"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute presence selector, not matching attribute with similar name", selector: ".attr-presence-div3[align], .attr-presence-div4[align]", ctx: "#attr-presence", expect: [] /*no matches*/, level: 2, testType: TEST_FIND},
+ {name: "Attribute presence selector, matching attribute with non-ASCII characters", selector: "ul[data-中文]", ctx: "#attr-presence", expect: ["attr-presence-ul1"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute presence selector, not matching default option without selected attribute", selector: "#attr-presence-select1 option[selected]", ctx: "#attr-presence", expect: [] /* no matches */, level: 2, testType: TEST_FIND},
+ {name: "Attribute presence selector, matching option with selected attribute", selector: "#attr-presence-select2 option[selected]", ctx: "#attr-presence", expect: ["attr-presence-select2-option4"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute presence selector, matching multiple options with selected attributes", selector: "#attr-presence-select3 option[selected]", ctx: "#attr-presence", expect: ["attr-presence-select3-option2", "attr-presence-select3-option3"], level: 2, testType: TEST_FIND | TEST_MATCH},
+
+ // - value [att=val]
+ {name: "Attribute value selector, matching align attribute with value", selector: "[align=\"center\"]", ctx: "#attr-value", expect: ["attr-value-div1"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute value selector, matching align attribute with empty value", selector: "[align=\"\"]", ctx: "#attr-value", expect: ["attr-value-div2"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute value selector, not matching align attribute with partial value", selector: "[align=\"c\"]", ctx: "#attr-value", expect: [] /*no matches*/, level: 2, testType: TEST_FIND},
+ {name: "Attribute value selector, not matching align attribute with incorrect value", selector: "[align=\"centera\"]", ctx: "#attr-value", expect: [] /*no matches*/, level: 2, testType: TEST_FIND},
+ {name: "Attribute value selector, matching custom data-* attribute with unicode escaped value", selector: "[data-attr-value=\"\\e9\"]", ctx: "#attr-value", expect: ["attr-value-div3"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute value selector, matching custom data-* attribute with escaped character", selector: "[data-attr-value\_foo=\"\\e9\"]", ctx: "#attr-value", expect: ["attr-value-div4"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute value selector with single-quoted value, matching multiple inputs with type attributes", selector: "input[type='hidden'],#attr-value input[type='radio']", ctx: "#attr-value", expect: ["attr-value-input3", "attr-value-input4", "attr-value-input6", "attr-value-input8", "attr-value-input9"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute value selector with double-quoted value, matching multiple inputs with type attributes", selector: "input[type=\"hidden\"],#attr-value input[type='radio']", ctx: "#attr-value", expect: ["attr-value-input3", "attr-value-input4", "attr-value-input6", "attr-value-input8", "attr-value-input9"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute value selector with unquoted value, matching multiple inputs with type attributes", selector: "input[type=hidden],#attr-value input[type=radio]", ctx: "#attr-value", expect: ["attr-value-input3", "attr-value-input4", "attr-value-input6", "attr-value-input8", "attr-value-input9"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute value selector, matching attribute with value using non-ASCII characters", selector: "[data-attr-value=中文]", ctx: "#attr-value", expect: ["attr-value-div5"], level: 2, testType: TEST_FIND | TEST_MATCH},
+
+ // - whitespace-separated list [att~=val]
+ {name: "Attribute whitespace-separated list selector, matching class attribute with value", selector: "[class~=\"div1\"]", ctx: "#attr-whitespace", expect: ["attr-whitespace-div1"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute whitespace-separated list selector, not matching class attribute with empty value", selector: "[class~=\"\"]", ctx: "#attr-whitespace", expect: [] /*no matches*/ , level: 2, testType: TEST_FIND},
+ {name: "Attribute whitespace-separated list selector, not matching class attribute with partial value", selector: "[data-attr-whitespace~=\"div\"]", ctx: "#attr-whitespace", expect: [] /*no matches*/ , level: 2, testType: TEST_FIND},
+ {name: "Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value", selector: "[data-attr-whitespace~=\"\\0000e9\"]", ctx: "#attr-whitespace", expect: ["attr-whitespace-div4"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character", selector: "[data-attr-whitespace\_foo~=\"\\e9\"]", ctx: "#attr-whitespace", expect: ["attr-whitespace-div5"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes", selector: "a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']", ctx: "#attr-whitespace", expect: ["attr-whitespace-a1", "attr-whitespace-a2", "attr-whitespace-a3", "attr-whitespace-a5", "attr-whitespace-a7"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes", selector: "a[rel~=\"bookmark\"],#attr-whitespace a[rel~='nofollow']", ctx: "#attr-whitespace", expect: ["attr-whitespace-a1", "attr-whitespace-a2", "attr-whitespace-a3", "attr-whitespace-a5", "attr-whitespace-a7"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes", selector: "a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]", ctx: "#attr-whitespace", expect: ["attr-whitespace-a1", "attr-whitespace-a2", "attr-whitespace-a3", "attr-whitespace-a5", "attr-whitespace-a7"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute whitespace-separated list selector with double-quoted value, not matching value with space", selector: "a[rel~=\"book mark\"]", ctx: "#attr-whitespace", expect: [] /* no matches */, level: 2, testType: TEST_FIND},
+ {name: "Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters", selector: "[title~=中文]", ctx: "#attr-whitespace", expect: ["attr-whitespace-p1"], level: 2, testType: TEST_FIND | TEST_MATCH},
+
+ // - hyphen-separated list [att|=val]
+ {name: "Attribute hyphen-separated list selector, not matching unspecified lang attribute", selector: "#attr-hyphen-div1[lang|=\"en\"]", ctx: "#attr-hyphen", expect: [] /*no matches*/, level: 2, testType: TEST_FIND},
+ {name: "Attribute hyphen-separated list selector, matching lang attribute with exact value", selector: "#attr-hyphen-div2[lang|=\"fr\"]", ctx: "#attr-hyphen", expect: ["attr-hyphen-div2"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute hyphen-separated list selector, matching lang attribute with partial value", selector: "#attr-hyphen-div3[lang|=\"en\"]", ctx: "#attr-hyphen", expect: ["attr-hyphen-div3"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute hyphen-separated list selector, not matching incorrect value", selector: "#attr-hyphen-div4[lang|=\"es-AR\"]", ctx: "#attr-hyphen", expect: [] /*no matches*/, level: 2, testType: TEST_FIND},
+
+ // - substring begins-with [att^=val] (Level 3)
+ {name: "Attribute begins with selector, matching href attributes beginning with specified substring", selector: "a[href^=\"http://www\"]", ctx: "#attr-begins", expect: ["attr-begins-a1", "attr-begins-a3"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute begins with selector, matching lang attributes beginning with specified substring, ", selector: "[lang^=\"en-\"]", ctx: "#attr-begins", expect: ["attr-begins-div2", "attr-begins-div4"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute begins with selector, not matching class attribute not beginning with specified substring", selector: "[class^=apple]", ctx: "#attr-begins", expect: [] /*no matches*/, level: 3, testType: TEST_FIND},
+ {name: "Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring", selector: "[class^=' apple']", ctx: "#attr-begins", expect: ["attr-begins-p1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring", selector: "[class^=\" apple\"]", ctx: "#attr-begins", expect: ["attr-begins-p1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring", selector: "[class^= apple]", ctx: "#attr-begins", expect: [] /*no matches*/, level: 3, testType: TEST_FIND},
+
+ // - substring ends-with [att$=val] (Level 3)
+ {name: "Attribute ends with selector, matching href attributes ending with specified substring", selector: "a[href$=\".org\"]", ctx: "#attr-ends", expect: ["attr-ends-a1", "attr-ends-a3"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute ends with selector, matching lang attributes ending with specified substring, ", selector: "[lang$=\"-CH\"]", ctx: "#attr-ends", expect: ["attr-ends-div2", "attr-ends-div4"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute ends with selector, not matching class attribute not ending with specified substring", selector: "[class$=apple]", ctx: "#attr-ends", expect: [] /*no matches*/, level: 3, testType: TEST_FIND},
+ {name: "Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring", selector: "[class$='apple ']", ctx: "#attr-ends", expect: ["attr-ends-p1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring", selector: "[class$=\"apple \"]", ctx: "#attr-ends", expect: ["attr-ends-p1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring", selector: "[class$=apple ]", ctx: "#attr-ends", expect: [] /*no matches*/, level: 3, testType: TEST_FIND},
+
+ // - substring contains [att*=val] (Level 3)
+ {name: "Attribute contains selector, matching href attributes beginning with specified substring", selector: "a[href*=\"http://www\"]", ctx: "#attr-contains", expect: ["attr-contains-a1", "attr-contains-a3"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute contains selector, matching href attributes ending with specified substring", selector: "a[href*=\".org\"]", ctx: "#attr-contains", expect: ["attr-contains-a1", "attr-contains-a2"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute contains selector, matching href attributes containing specified substring", selector: "a[href*=\".example.\"]", ctx: "#attr-contains", expect: ["attr-contains-a1", "attr-contains-a3"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute contains selector, matching lang attributes beginning with specified substring, ", selector: "[lang*=\"en-\"]", ctx: "#attr-contains", expect: ["attr-contains-div2", "attr-contains-div6"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute contains selector, matching lang attributes ending with specified substring, ", selector: "[lang*=\"-CH\"]", ctx: "#attr-contains", expect: ["attr-contains-div3", "attr-contains-div5"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring", selector: "[class*=' apple']", ctx: "#attr-contains", expect: ["attr-contains-p1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute contains selector with single-quoted value, matching class attribute ending with specified substring", selector: "[class*='orange ']", ctx: "#attr-contains", expect: ["attr-contains-p1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute contains selector with single-quoted value, matching class attribute containing specified substring", selector: "[class*='ple banana ora']", ctx: "#attr-contains", expect: ["attr-contains-p1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring", selector: "[class*=\" apple\"]", ctx: "#attr-contains", expect: ["attr-contains-p1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute contains selector with double-quoted value, matching class attribute ending with specified substring", selector: "[class*=\"orange \"]", ctx: "#attr-contains", expect: ["attr-contains-p1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute contains selector with double-quoted value, matching class attribute containing specified substring", selector: "[class*=\"ple banana ora\"]", ctx: "#attr-contains", expect: ["attr-contains-p1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute contains selector with unquoted value, matching class attribute beginning with specified substring", selector: "[class*= apple]", ctx: "#attr-contains", expect: ["attr-contains-p1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute contains selector with unquoted value, matching class attribute ending with specified substring", selector: "[class*=orange ]", ctx: "#attr-contains", expect: ["attr-contains-p1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "Attribute contains selector with unquoted value, matching class attribute containing specified substring", selector: "[class*= banana ]", ctx: "#attr-contains", expect: ["attr-contains-p1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+
+ // Pseudo-classes
+ // - :root (Level 3)
+ {name: ":root pseudo-class selector, matching document root element", selector: ":root", expect: ["html"], exclude: ["element", "fragment", "detached"], level: 3, testType: TEST_FIND},
+ {name: ":root pseudo-class selector, not matching document root element", selector: ":root", expect: [] /*no matches*/, exclude: ["document"], level: 3, testType: TEST_FIND},
+ {name: ":root pseudo-class selector, not matching document root element", selector: ":root", ctx: "#html", expect: [] /*no matches*/, exclude: ["fragment", "detached"], level: 3, testType: TEST_FIND},
+
+ // - :nth-child(n) (Level 3)
+ {name: ":nth-child selector, matching the third child element", selector: ":nth-child(3)", ctx: "#pseudo-nth-table1", expect: ["pseudo-nth-td3", "pseudo-nth-td9", "pseudo-nth-tr3", "pseudo-nth-td15"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":nth-child selector, matching every third child element", selector: "li:nth-child(3n)", ctx: "#pseudo-nth", expect: ["pseudo-nth-li3", "pseudo-nth-li6", "pseudo-nth-li9", "pseudo-nth-li12"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":nth-child selector, matching every second child element, starting from the fourth", selector: "li:nth-child(2n+4)", ctx: "#pseudo-nth", expect: ["pseudo-nth-li4", "pseudo-nth-li6", "pseudo-nth-li8", "pseudo-nth-li10", "pseudo-nth-li12"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":nth-child selector, matching every fourth child element, starting from the third", selector: ":nth-child(4n-1)", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-em2", "pseudo-nth-span3"], level: 3, testType: TEST_FIND | TEST_MATCH},
+
+ // - :nth-last-child (Level 3)
+ {name: ":nth-last-child selector, matching the third last child element", selector: ":nth-last-child(3)", ctx: "#pseudo-nth-table1", expect: ["pseudo-nth-tr1", "pseudo-nth-td4", "pseudo-nth-td10", "pseudo-nth-td16"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":nth-last-child selector, matching every third child element from the end", selector: "li:nth-last-child(3n)", ctx: "pseudo-nth", expect: ["pseudo-nth-li1", "pseudo-nth-li4", "pseudo-nth-li7", "pseudo-nth-li10"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":nth-last-child selector, matching every second child element from the end, starting from the fourth last", selector: "li:nth-last-child(2n+4)", ctx: "pseudo-nth", expect: ["pseudo-nth-li1", "pseudo-nth-li3", "pseudo-nth-li5", "pseudo-nth-li7", "pseudo-nth-li9"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":nth-last-child selector, matching every fourth element from the end, starting from the third last", selector: ":nth-last-child(4n-1)", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-span2", "pseudo-nth-span4"], level: 3, testType: TEST_FIND | TEST_MATCH},
+
+ // - :nth-of-type(n) (Level 3)
+ {name: ":nth-of-type selector, matching the third em element", selector: "em:nth-of-type(3)", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-em3"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":nth-of-type selector, matching every second element of their type", selector: ":nth-of-type(2n)", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-em2", "pseudo-nth-span2", "pseudo-nth-span4", "pseudo-nth-strong2", "pseudo-nth-em4"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":nth-of-type selector, matching every second elemetn of their type, starting from the first", selector: "span:nth-of-type(2n-1)", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-span1", "pseudo-nth-span3"], level: 3, testType: TEST_FIND | TEST_MATCH},
+
+ // - :nth-last-of-type(n) (Level 3)
+ {name: ":nth-last-of-type selector, matching the thrid last em element", selector: "em:nth-last-of-type(3)", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-em2"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":nth-last-of-type selector, matching every second last element of their type", selector: ":nth-last-of-type(2n)", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-span1", "pseudo-nth-em1", "pseudo-nth-strong1", "pseudo-nth-em3", "pseudo-nth-span3"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":nth-last-of-type selector, matching every second last element of their type, starting from the last", selector: "span:nth-last-of-type(2n-1)", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-span2", "pseudo-nth-span4"], level: 3, testType: TEST_FIND | TEST_MATCH},
+
+ // - :first-of-type (Level 3)
+ {name: ":first-of-type selector, matching the first em element", selector: "em:first-of-type", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-em1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":first-of-type selector, matching the first of every type of element", selector: ":first-of-type", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-span1", "pseudo-nth-em1", "pseudo-nth-strong1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":first-of-type selector, matching the first td element in each table row", selector: "tr :first-of-type", ctx: "#pseudo-nth-table1", expect: ["pseudo-nth-td1", "pseudo-nth-td7", "pseudo-nth-td13"], level: 3, testType: TEST_FIND | TEST_MATCH},
+
+ // - :last-of-type (Level 3)
+ {name: ":last-of-type selector, matching the last em elemnet", selector: "em:last-of-type", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-em4"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":last-of-type selector, matching the last of every type of element", selector: ":last-of-type", ctx: "#pseudo-nth-p1", expect: ["pseudo-nth-span4", "pseudo-nth-strong2", "pseudo-nth-em4"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":last-of-type selector, matching the last td element in each table row", selector: "tr :last-of-type", ctx: "#pseudo-nth-table1", expect: ["pseudo-nth-td6", "pseudo-nth-td12", "pseudo-nth-td18"], level: 3, testType: TEST_FIND | TEST_MATCH},
+
+ // - :first-child
+ {name: ":first-child pseudo-class selector, matching first child div element", selector: "div:first-child", ctx: "#pseudo-first-child", expect: ["pseudo-first-child-div1"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: ":first-child pseudo-class selector, doesn't match non-first-child elements", selector: ".pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child", ctx: "#pseudo-first-child", expect: [] /*no matches*/, level: 2, testType: TEST_FIND},
+ {name: ":first-child pseudo-class selector, matching first-child of multiple elements", selector: "span:first-child", ctx: "#pseudo-first-child", expect: ["pseudo-first-child-span1", "pseudo-first-child-span3", "pseudo-first-child-span5"], level: 2, testType: TEST_FIND | TEST_MATCH},
+
+ // - :last-child (Level 3)
+ {name: ":last-child pseudo-class selector, matching last child div element", selector: "div:last-child", ctx: "#pseudo-last-child", expect: ["pseudo-last-child-div3"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":last-child pseudo-class selector, doesn't match non-last-child elements", selector: ".pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child", ctx: "#pseudo-last-child", expect: [] /*no matches*/, level: 3, testType: TEST_FIND},
+ {name: ":last-child pseudo-class selector, matching first-child of multiple elements", selector: "span:last-child", ctx: "#pseudo-last-child", expect: ["pseudo-last-child-span2", "pseudo-last-child-span4", "pseudo-last-child-span6"], level: 3, testType: TEST_FIND | TEST_MATCH},
+
+ // - :only-child (Level 3)
+ {name: ":pseudo-only-child pseudo-class selector, matching all only-child elements", selector: ":only-child", ctx: "#pseudo-only", expect: ["pseudo-only-span1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":pseudo-only-child pseudo-class selector, matching only-child em elements", selector: "em:only-child", ctx: "#pseudo-only", expect: [] /*no matches*/, level: 3, testType: TEST_FIND},
+
+ // - :only-of-type (Level 3)
+ {name: ":pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type", selector: " :only-of-type", ctx: "#pseudo-only", expect: ["pseudo-only-span1", "pseudo-only-em1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type", selector: " em:only-of-type", ctx: "#pseudo-only", expect: ["pseudo-only-em1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+
+ // - :empty (Level 3)
+ {name: ":empty pseudo-class selector, matching empty p elements", selector: "p:empty", ctx: "#pseudo-empty", expect: ["pseudo-empty-p1", "pseudo-empty-p2"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":empty pseudo-class selector, matching all empty elements", selector: ":empty", ctx: "#pseudo-empty", expect: ["pseudo-empty-p1", "pseudo-empty-p2", "pseudo-empty-span1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+
+ // - :link and :visited
+ // Implementations may treat all visited links as unvisited, so these cannot be tested separately.
+ // The only guarantee is that ":link,:visited" matches the set of all visited and unvisited links and that they are individually mutually exclusive sets.
+ {name: ":link and :visited pseudo-class selectors, matching a and area elements with href attributes", selector: " :link, #pseudo-link :visited", ctx: "#pseudo-link", expect: ["pseudo-link-a1", "pseudo-link-a2", "pseudo-link-area1"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: ":link and :visited pseudo-class selectors, matching link elements with href attributes", selector: " :link, #head :visited", ctx: "#head", expect: ["pseudo-link-link1", "pseudo-link-link2"], exclude: ["element", "fragment", "detached"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: ":link and :visited pseudo-class selectors, not matching link elements with href attributes", selector: " :link, #head :visited", ctx: "#head", expect: [] /*no matches*/, exclude: ["document"], level: 1, testType: TEST_FIND},
+ {name: ":link and :visited pseudo-class selectors, chained, mutually exclusive pseudo-classes match nothing", selector: ":link:visited", ctx: "#html", expect: [] /*no matches*/, exclude: ["document"], level: 1, testType: TEST_FIND},
+
+// XXX Figure out context or refNodes for this
+ // - :target (Level 3)
+ {name: ":target pseudo-class selector, matching the element referenced by the URL fragment identifier", selector: ":target", ctx: "", expect: [] /*no matches*/, exclude: ["document", "element"], level: 3, testType: TEST_FIND},
+ {name: ":target pseudo-class selector, matching the element referenced by the URL fragment identifier", selector: ":target", ctx: "", expect: ["target"], exclude: ["fragment", "detached"], level: 3, testType: TEST_FIND},
+
+// XXX Fix ctx in tests below
+
+ // - :lang()
+ {name: ":lang pseudo-class selector, matching inherited language (1)", selector: "#pseudo-lang-div1:lang(en)", ctx: "", expect: ["pseudo-lang-div1"], exclude: ["detached", "fragment"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: ":lang pseudo-class selector, not matching element with no inherited language", selector: "#pseudo-lang-div1:lang(en)", ctx: "", expect: [] /*no matches*/, exclude: ["document", "element"], level: 2, testType: TEST_FIND},
+ {name: ":lang pseudo-class selector, matching specified language with exact value (1)", selector: "#pseudo-lang-div2:lang(fr)", ctx: "", expect: ["pseudo-lang-div2"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: ":lang pseudo-class selector, matching specified language with partial value (1)", selector: "#pseudo-lang-div3:lang(en)", ctx: "", expect: ["pseudo-lang-div3"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: ":lang pseudo-class selector, not matching incorrect language", selector: "#pseudo-lang-div4:lang(es-AR)", ctx: "", expect: [] /*no matches*/, level: 2, testType: TEST_FIND},
+
+ // - :enabled (Level 3)
+ {name: ":enabled pseudo-class selector, matching all enabled form controls (1)", selector: "#pseudo-ui :enabled", ctx: "", expect: ["pseudo-ui-input1", "pseudo-ui-input2", "pseudo-ui-input3", "pseudo-ui-input4", "pseudo-ui-input5", "pseudo-ui-input6",
+ "pseudo-ui-input7", "pseudo-ui-input8", "pseudo-ui-input9", "pseudo-ui-textarea1", "pseudo-ui-button1"], level: 3, testType: TEST_FIND | TEST_MATCH},
+
+ // - :disabled (Level 3)
+ {name: ":enabled pseudo-class selector, matching all disabled form controls (1)", selector: "#pseudo-ui :disabled", ctx: "", expect: ["pseudo-ui-input10", "pseudo-ui-input11", "pseudo-ui-input12", "pseudo-ui-input13", "pseudo-ui-input14", "pseudo-ui-input15",
+ "pseudo-ui-input16", "pseudo-ui-input17", "pseudo-ui-input18", "pseudo-ui-textarea2", "pseudo-ui-button2"], level: 3, testType: TEST_FIND | TEST_MATCH},
+
+ // - :checked (Level 3)
+ {name: ":checked pseudo-class selector, matching checked radio buttons and checkboxes (1)", selector: "#pseudo-ui :checked", ctx: "", expect: ["pseudo-ui-input4", "pseudo-ui-input6", "pseudo-ui-input13", "pseudo-ui-input15"], level: 3, testType: TEST_FIND | TEST_MATCH},
+
+ // - :not(s) (Level 3)
+ {name: ":not pseudo-class selector, matching (1)", selector: "#not>:not(div)", ctx: "", expect: ["not-p1", "not-p2", "not-p3"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":not pseudo-class selector, matching (1)", selector: "#not * :not(:first-child)", ctx: "", expect: ["not-em1", "not-em2", "not-em3"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: ":not pseudo-class selector, matching nothing", selector: ":not(*)", ctx: "", expect: [] /* no matches */, level: 3, testType: TEST_FIND},
+ {name: ":not pseudo-class selector, matching nothing", selector: ":not(*|*)", ctx: "", expect: [] /* no matches */, level: 3, testType: TEST_FIND},
+
+ // Pseudo-elements
+ // - ::first-line
+ {name: ":first-line pseudo-element (one-colon syntax) selector, not matching any elements", selector: "#pseudo-element:first-line", ctx: "", expect: [] /*no matches*/, level: 2, testType: TEST_FIND},
+ {name: "::first-line pseudo-element (two-colon syntax) selector, not matching any elements", selector: "#pseudo-element::first-line", ctx: "", expect: [] /*no matches*/, level: 3, testType: TEST_FIND},
+
+ // - ::first-letter
+ {name: ":first-letter pseudo-element (one-colon syntax) selector, not matching any elements", selector: "#pseudo-element:first-letter", ctx: "", expect: [] /*no matches*/, level: 2, testType: TEST_FIND},
+ {name: "::first-letter pseudo-element (two-colon syntax) selector, not matching any elements", selector: "#pseudo-element::first-letter", ctx: "", expect: [] /*no matches*/, level: 3, testType: TEST_FIND},
+
+ // - ::before
+ {name: ":before pseudo-element (one-colon syntax) selector, not matching any elements", selector: "#pseudo-element:before", ctx: "", expect: [] /*no matches*/, level: 2, testType: TEST_FIND},
+ {name: "::before pseudo-element (two-colon syntax) selector, not matching any elements", selector: "#pseudo-element::before", ctx: "", expect: [] /*no matches*/, level: 3, testType: TEST_FIND},
+
+ // - ::after
+ {name: ":after pseudo-element (one-colon syntax) selector, not matching any elements", selector: "#pseudo-element:after", ctx: "", expect: [] /*no matches*/, level: 2, testType: TEST_FIND},
+ {name: "::after pseudo-element (two-colon syntax) selector, not matching any elements", selector: "#pseudo-element::after", ctx: "", expect: [] /*no matches*/, level: 3, testType: TEST_FIND},
+
+ // Class Selectors
+ {name: "Class selector, matching element with specified class (1)", selector: ".class-p", ctx: "", expect: ["class-p1","class-p2", "class-p3"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "Class selector, chained, matching only elements with all specified classes (1)", selector: "#class .apple.orange.banana", ctx: "", expect: ["class-div1", "class-div2", "class-p4", "class-div3", "class-p6", "class-div4"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "Class Selector, chained, with type selector (1)", selector: "div.apple.banana.orange", ctx: "", expect: ["class-div1", "class-div2", "class-div3", "class-div4"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ // Caution: If copying and pasting the folowing non-ASCII classes, ensure unicode normalisation is not performed in the process.
+ {name: "Class selector, matching element with class value using non-ASCII characters", selector: ".台北Táiběi", ctx: "", expect: ["class-span1"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "Class selector, matching multiple elements with class value using non-ASCII characters (1)", selector: ".台北", ctx: "", expect: ["class-span1","class-span2"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "Class selector, chained, matching element with multiple class values using non-ASCII characters", selector: ".台北Táiběi.台北", ctx: "", expect: ["class-span1"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "Class selector, matching element with class with escaped character (1)", selector: ".foo\\:bar", ctx: "", expect: ["class-span3"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "Class selector, matching element with class with escaped character (1)", selector: ".test\\.foo\\[5\\]bar", ctx: "", expect: ["class-span4"], level: 1, testType: TEST_FIND | TEST_MATCH},
+
+ // ID Selectors
+ {name: "ID selector, matching element with specified id (1)", selector: "#id #id-div1", ctx: "", expect: ["id-div1"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "ID selector, chained, matching element with specified id (1)", selector: "#id-div1, #id-div1", ctx: "", expect: ["id-div1"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "ID selector, chained, matching element with specified id (1)", selector: "#id-div1, #id-div2", ctx: "", expect: ["id-div1", "id-div2"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "ID Selector, chained, with type selector (1)", selector: "div#id-div1, div#id-div2", ctx: "", expect: ["id-div1", "id-div2"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "ID selector, not matching non-existent descendant", selector: "#id #none", ctx: "", expect: [] /*no matches*/, level: 1, testType: TEST_FIND},
+ {name: "ID selector, not matching non-existent ancestor", selector: "#none #id-div1", ctx: "", expect: [] /*no matches*/, level: 1, testType: TEST_FIND},
+ {name: "ID selector, matching multiple elements with duplicate id (1)", selector: "#id-li-duplicate", ctx: "", expect: ["id-li-duplicate", "id-li-duplicate", "id-li-duplicate", "id-li-duplicate"], level: 1, testType: TEST_FIND | TEST_MATCH},
+
+ // Caution: If copying and pasting the folowing non-ASCII IDs, ensure unicode normalisation is not performed in the process.
+ {name: "ID selector, matching id value using non-ASCII characters", selector: "#台北Táiběi", ctx: "", expect: ["台北Táiběi"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "ID selector, matching id value using non-ASCII characters (1)", selector: "#台北", ctx: "", expect: ["台北"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "ID selector, matching id values using non-ASCII characters", selector: "#台北Táiběi, #台北", ctx: "", expect: ["台北Táiběi", "台北"], level: 1, testType: TEST_FIND | TEST_MATCH},
+
+ // XXX runMatchesTest() in level2-lib.js can't handle this because obtaining the expected nodes requires escaping characters when generating the selector from 'expect' values
+ {name: "ID selector, matching element with id with escaped character", selector: "#\\#foo\\:bar", ctx: "", expect: ["#foo:bar"], level: 1, testType: TEST_FIND},
+ {name: "ID selector, matching element with id with escaped character", selector: "#test\\.foo\\[5\\]bar", ctx: "", expect: ["test.foo[5]bar"], level: 1, testType: TEST_FIND},
+
+ // Namespaces
+ // XXX runMatchesTest() in level2-lib.js can't handle these because non-HTML elements don't have a recognised id
+ {name: "Namespace selector, matching element with any namespace", selector: "#any-namespace *|div", ctx: "", expect: ["any-namespace-div1", "any-namespace-div2", "any-namespace-div3", "any-namespace-div4"], level: 3, testType: TEST_FIND},
+ {name: "Namespace selector, matching div elements in no namespace only", selector: "#no-namespace |div", ctx: "", expect: ["no-namespace-div3"], level: 3, testType: TEST_FIND},
+ {name: "Namespace selector, matching any elements in no namespace only", selector: "#no-namespace |*", ctx: "", expect: ["no-namespace-div3"], level: 3, testType: TEST_FIND},
+
+ // Combinators
+ // - Descendant combinator ' '
+ {name: "Descendant combinator, matching element that is a descendant of an element with id (1)", selector: "#descendant div", ctx: "", expect: ["descendant-div1", "descendant-div2", "descendant-div3", "descendant-div4"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "Descendant combinator, matching element with id that is a descendant of an element (1)", selector: "body #descendant-div1", ctx: "", expect: ["descendant-div1"], exclude: ["detached", "fragment"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "Descendant combinator, matching element with id that is a descendant of an element (1)", selector: "div #descendant-div1", ctx: "", expect: ["descendant-div1"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "Descendant combinator, matching element with id that is a descendant of an element with id (1)", selector: "#descendant #descendant-div2", ctx: "", expect: ["descendant-div2"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "Descendant combinator, matching element with class that is a descendant of an element with id (1)", selector: "#descendant .descendant-div2", ctx: "", expect: ["descendant-div2"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "Descendant combinator, matching element with class that is a descendant of an element with class (1)", selector: ".descendant-div1 .descendant-div3", ctx: "", expect: ["descendant-div3"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "Descendant combinator, not matching element with id that is not a descendant of an element with id", selector: "#descendant-div1 #descendant-div4", ctx: "", expect: [] /*no matches*/, level: 1, testType: TEST_FIND},
+ {name: "Descendant combinator, whitespace characters (1)", selector: "#descendant\t\r\n#descendant-div2", ctx: "", expect: ["descendant-div2"], level: 1, testType: TEST_FIND | TEST_MATCH},
+
+ // - Child combinator '>'
+ {name: "Child combinator, matching element that is a child of an element with id (1)", selector: "#child>div", ctx: "", expect: ["child-div1", "child-div4"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Child combinator, matching element with id that is a child of an element (1)", selector: "div>#child-div1", ctx: "", expect: ["child-div1"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Child combinator, matching element with id that is a child of an element with id (1)", selector: "#child>#child-div1", ctx: "", expect: ["child-div1"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Child combinator, matching element with id that is a child of an element with class (1)", selector: "#child-div1>.child-div2", ctx: "", expect: ["child-div2"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Child combinator, matching element with class that is a child of an element with class (1)", selector: ".child-div1>.child-div2", ctx: "", expect: ["child-div2"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Child combinator, not matching element with id that is not a child of an element with id", selector: "#child>#child-div3", ctx: "", expect: [] /*no matches*/, level: 2, testType: TEST_FIND},
+ {name: "Child combinator, not matching element with id that is not a child of an element with class", selector: "#child-div1>.child-div3", ctx: "", expect: [] /*no matches*/, level: 2, testType: TEST_FIND},
+ {name: "Child combinator, not matching element with class that is not a child of an element with class", selector: ".child-div1>.child-div3", ctx: "", expect: [] /*no matches*/, level: 2, testType: TEST_FIND},
+ {name: "Child combinator, surrounded by whitespace (1)", selector: "#child-div1\t\r\n>\t\r\n#child-div2", ctx: "", expect: ["child-div2"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Child combinator, whitespace after (1)", selector: "#child-div1>\t\r\n#child-div2", ctx: "", expect: ["child-div2"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Child combinator, whitespace before (1)", selector: "#child-div1\t\r\n>#child-div2", ctx: "", expect: ["child-div2"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Child combinator, no whitespace (1)", selector: "#child-div1>#child-div2", ctx: "", expect: ["child-div2"], level: 2, testType: TEST_FIND | TEST_MATCH},
+
+ // - Adjacent sibling combinator '+'
+ {name: "Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id (1)", selector: "#adjacent-div2+div", ctx: "", expect: ["adjacent-div4"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element (1)", selector: "div+#adjacent-div4", ctx: "", expect: ["adjacent-div4"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id (1)", selector: "#adjacent-div2+#adjacent-div4", ctx: "", expect: ["adjacent-div4"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id (1)", selector: "#adjacent-div2+.adjacent-div4", ctx: "", expect: ["adjacent-div4"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class (1)", selector: ".adjacent-div2+.adjacent-div4", ctx: "", expect: ["adjacent-div4"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element (1)", selector: "#adjacent div+p", ctx: "", expect: ["adjacent-p2"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id", selector: "#adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1", ctx: "", expect: [] /*no matches*/, level: 2, testType: TEST_FIND},
+ {name: "Adjacent sibling combinator, surrounded by whitespace (1)", selector: "#adjacent-p2\t\r\n+\t\r\n#adjacent-p3", ctx: "", expect: ["adjacent-p3"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Adjacent sibling combinator, whitespace after (1)", selector: "#adjacent-p2+\t\r\n#adjacent-p3", ctx: "", expect: ["adjacent-p3"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Adjacent sibling combinator, whitespace before (1)", selector: "#adjacent-p2\t\r\n+#adjacent-p3", ctx: "", expect: ["adjacent-p3"], level: 2, testType: TEST_FIND | TEST_MATCH},
+ {name: "Adjacent sibling combinator, no whitespace (1)", selector: "#adjacent-p2+#adjacent-p3", ctx: "", expect: ["adjacent-p3"], level: 2, testType: TEST_FIND | TEST_MATCH},
+
+ // - General sibling combinator ~ (Level 3)
+ {name: "General sibling combinator, matching element that is a sibling of an element with id (1)", selector: "#sibling-div2~div", ctx: "", expect: ["sibling-div4", "sibling-div6"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "General sibling combinator, matching element with id that is a sibling of an element (1)", selector: "div~#sibling-div4", ctx: "", expect: ["sibling-div4"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "General sibling combinator, matching element with id that is a sibling of an element with id (1)", selector: "#sibling-div2~#sibling-div4", ctx: "", expect: ["sibling-div4"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "General sibling combinator, matching element with class that is a sibling of an element with id (1)", selector: "#sibling-div2~.sibling-div", ctx: "", expect: ["sibling-div4", "sibling-div6"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "General sibling combinator, matching p element that is a sibling of a div element (1)", selector: "#sibling div~p", ctx: "", expect: ["sibling-p2", "sibling-p3"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "General sibling combinator, not matching element with id that is not a sibling after a p element (1)", selector: "#sibling>p~div", ctx: "", expect: [] /*no matches*/, level: 3, testType: TEST_FIND},
+ {name: "General sibling combinator, not matching element with id that is not a sibling after an element with id", selector: "#sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1", ctx: "", expect: [] /*no matches*/, level: 3, testType: TEST_FIND},
+ {name: "General sibling combinator, surrounded by whitespace (1)", selector: "#sibling-p2\t\r\n~\t\r\n#sibling-p3", ctx: "", expect: ["sibling-p3"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "General sibling combinator, whitespace after (1)", selector: "#sibling-p2~\t\r\n#sibling-p3", ctx: "", expect: ["sibling-p3"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "General sibling combinator, whitespace before (1)", selector: "#sibling-p2\t\r\n~#sibling-p3", ctx: "", expect: ["sibling-p3"], level: 3, testType: TEST_FIND | TEST_MATCH},
+ {name: "General sibling combinator, no whitespace (1)", selector: "#sibling-p2~#sibling-p3", ctx: "", expect: ["sibling-p3"], level: 3, testType: TEST_FIND | TEST_MATCH},
+
+ // Group of selectors (comma)
+ {name: "Syntax, group of selectors separator, surrounded by whitespace (1)", selector: "#group em\t\r \n,\t\r \n#group strong", ctx: "", expect: ["group-em1", "group-strong1"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "Syntax, group of selectors separator, whitespace after (1)", selector: "#group em,\t\r\n#group strong", ctx: "", expect: ["group-em1", "group-strong1"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "Syntax, group of selectors separator, whitespace before (1)", selector: "#group em\t\r\n,#group strong", ctx: "", expect: ["group-em1", "group-strong1"], level: 1, testType: TEST_FIND | TEST_MATCH},
+ {name: "Syntax, group of selectors separator, no whitespace (1)", selector: "#group em,#group strong", ctx: "", expect: ["group-em1", "group-strong1"], level: 1, testType: TEST_FIND | TEST_MATCH},
+];
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomnodesw3cimportlog"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/nodes/w3c-import.log (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/nodes/w3c-import.log         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/nodes/w3c-import.log        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,191 @@
</span><ins>+The tests in this directory were imported from the W3C repository.
+Do NOT modify these tests directly in Webkit.
+Instead, create a pull request on the W3C CSS or WPT github:
+        https://github.com/w3c/csswg-test
+        https://github.com/w3c/web-platform-tests
+
+Then run the Tools/Scripts/import-w3c-tests in Webkit to reimport
+
+Do NOT modify or remove this file
+
+------------------------------------------------------------------------
+Properties requiring vendor prefixes:
+None
+Property values requiring vendor prefixes:
+None
+------------------------------------------------------------------------
+List of files:
+/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-appendData.html
+/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-data.html
+/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-deleteData.html
+/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-insertData.html
+/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-remove.html
+/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-replaceData.html
+/LayoutTests/http/tests/w3c/dom/nodes/CharacterData-substringData.html
+/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-after.html
+/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-before.html
+/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-remove.js
+/LayoutTests/http/tests/w3c/dom/nodes/ChildNode-replaceWith.html
+/LayoutTests/http/tests/w3c/dom/nodes/Comment-Text-constructor.js
+/LayoutTests/http/tests/w3c/dom/nodes/Comment-constructor.html
+/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocument.html
+/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createDocumentType.html
+/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createHTMLDocument.html
+/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-createHTMLDocument.js
+/LayoutTests/http/tests/w3c/dom/nodes/DOMImplementation-hasFeature.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-Element-getElementsByTagName.js
+/LayoutTests/http/tests/w3c/dom/nodes/Document-Element-getElementsByTagNameNS.js
+/LayoutTests/http/tests/w3c/dom/nodes/Document-URL.sub.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-adoptNode.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-characterSet-normalization.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-constructor.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-createAttribute.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-createComment-createTextNode.js
+/LayoutTests/http/tests/w3c/dom/nodes/Document-createComment.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-createElement-namespace.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-createElement.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-createElementNS.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-createElementNS.js
+/LayoutTests/http/tests/w3c/dom/nodes/Document-createEvent.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-createEvent.js
+/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction.js
+/LayoutTests/http/tests/w3c/dom/nodes/Document-createProcessingInstruction.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Document-createTextNode.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-createTreeWalker.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-doctype.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementById.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagName.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Document-getElementsByTagNameNS.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-implementation.html
+/LayoutTests/http/tests/w3c/dom/nodes/Document-importNode.html
+/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal.html
+/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-literal.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/DocumentType-remove.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null.svg
+/LayoutTests/http/tests/w3c/dom/nodes/Element-childElement-null.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add.svg
+/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-add.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove.svg
+/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-dynamic-remove.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild.svg
+/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount-nochild.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount.svg
+/LayoutTests/http/tests/w3c/dom/nodes/Element-childElementCount.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Element-children.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-classlist.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-closest.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-entity.svg
+/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-entity.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace.svg
+/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild-namespace.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild.svg
+/LayoutTests/http/tests/w3c/dom/nodes/Element-firstElementChild.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByClassName.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagName.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-getElementsByTagNameNS.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild.svg
+/LayoutTests/http/tests/w3c/dom/nodes/Element-lastElementChild.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Element-matches.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-matches.js
+/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling.svg
+/LayoutTests/http/tests/w3c/dom/nodes/Element-nextElementSibling.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling.svg
+/LayoutTests/http/tests/w3c/dom/nodes/Element-previousElementSibling.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Element-remove.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-removeAttributeNS.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null.html
+/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null.svg
+/LayoutTests/http/tests/w3c/dom/nodes/Element-siblingElement-null.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Element-tagName.html
+/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-attributes.html
+/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-characterData.html
+/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-childList.html
+/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-disconnect.html
+/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-document.html
+/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-inner-outer.html
+/LayoutTests/http/tests/w3c/dom/nodes/MutationObserver-takeRecords.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-appendChild.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-baseURI.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-childNodes.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-cloneNode.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-compareDocumentPosition.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-constants.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-contains.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-contains.xml
+/LayoutTests/http/tests/w3c/dom/nodes/Node-insertBefore.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-isEqualNode.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupNamespaceURI.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-lookupPrefix.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeName.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Node-nodeValue.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-normalize.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-parentElement.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-parentNode.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-properties.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-removeChild.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-replaceChild.html
+/LayoutTests/http/tests/w3c/dom/nodes/Node-textContent.html
+/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-append.html
+/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-prepend.html
+/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All.html
+/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All.js
+/LayoutTests/http/tests/w3c/dom/nodes/ParentNode-querySelector-All.xht
+/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-1.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/ProcessingInstruction-literal-2.xhtml
+/LayoutTests/http/tests/w3c/dom/nodes/Text-constructor.html
+/LayoutTests/http/tests/w3c/dom/nodes/Text-splitText.html
+/LayoutTests/http/tests/w3c/dom/nodes/append-on-Document.html
+/LayoutTests/http/tests/w3c/dom/nodes/attributes.html
+/LayoutTests/http/tests/w3c/dom/nodes/attributes.js
+/LayoutTests/http/tests/w3c/dom/nodes/case.html
+/LayoutTests/http/tests/w3c/dom/nodes/case.js
+/LayoutTests/http/tests/w3c/dom/nodes/creators.js
+/LayoutTests/http/tests/w3c/dom/nodes/encoding.py
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-01.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-02.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-03.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-04.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-05.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-06.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-07.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-08.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-09.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-10.xml
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-11.xml
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-12.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-13.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-14.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-15.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-16.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-17.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-18.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-19.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-20.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-21.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-22.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-23.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-24.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-25.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-26.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-27.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-28.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-29.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-30.htm
+/LayoutTests/http/tests/w3c/dom/nodes/getElementsByClassName-31.htm
+/LayoutTests/http/tests/w3c/dom/nodes/mutationobservers.js
+/LayoutTests/http/tests/w3c/dom/nodes/prepend-on-Document.html
+/LayoutTests/http/tests/w3c/dom/nodes/productions.js
+/LayoutTests/http/tests/w3c/dom/nodes/selectors.js
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangeattributesexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-attributes-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-attributes-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-attributes-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+FAIL Range attributes InvalidStateError: DOM Exception 11
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangeattributeshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-attributes.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-attributes.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-attributes.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+<!DOCTYPE html>
+<title>Range attributes</title>
+<link rel="author" title="Ms2ger" href="mailto:ms2ger@gmail.com">
+<meta name=timeout content=long>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<script>
+test(function() {
+ var r = document.createRange();
+ assert_equals(r.startContainer, document)
+ assert_equals(r.endContainer, document)
+ assert_equals(r.startOffset, 0)
+ assert_equals(r.endOffset, 0)
+ assert_true(r.collapsed)
+ r.detach()
+ assert_equals(r.startContainer, document)
+ assert_equals(r.endContainer, document)
+ assert_equals(r.startOffset, 0)
+ assert_equals(r.endOffset, 0)
+ assert_true(r.collapsed)
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangecloneContentsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneContents-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneContents-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneContents-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,187 @@
</span><ins>+To debug test failures, add a query parameter "subtest" with the test id (like "?subtest=5"). Only that test will be run. Then you can look at the resulting iframe in the DOM.
+
+
+FAIL Range.detach() InvalidStateError: DOM Exception 11
+PASS Resulting DOM for range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Resulting cursor position for range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Returned fragment for range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Resulting DOM for range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Resulting cursor position for range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Returned fragment for range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Resulting DOM for range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Resulting cursor position for range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Returned fragment for range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Resulting DOM for range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Resulting cursor position for range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Returned fragment for range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Resulting DOM for range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Resulting cursor position for range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Returned fragment for range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Resulting DOM for range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Resulting cursor position for range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Returned fragment for range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Resulting DOM for range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Resulting cursor position for range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Returned fragment for range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Resulting DOM for range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Resulting cursor position for range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Returned fragment for range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Resulting DOM for range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Resulting cursor position for range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Returned fragment for range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Resulting DOM for range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Resulting cursor position for range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Returned fragment for range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Resulting DOM for range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Resulting cursor position for range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Returned fragment for range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Resulting DOM for range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Resulting cursor position for range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Returned fragment for range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Resulting DOM for range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Resulting cursor position for range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Returned fragment for range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Resulting DOM for range 13 [document.head, 1, document.head, 1]
+PASS Resulting cursor position for range 13 [document.head, 1, document.head, 1]
+PASS Returned fragment for range 13 [document.head, 1, document.head, 1]
+PASS Resulting DOM for range 14 [document.body, 4, document.body, 5]
+PASS Resulting cursor position for range 14 [document.body, 4, document.body, 5]
+PASS Returned fragment for range 14 [document.body, 4, document.body, 5]
+PASS Resulting DOM for range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Resulting cursor position for range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Returned fragment for range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Resulting DOM for range 16 [paras[0], 0, paras[0], 1]
+PASS Resulting cursor position for range 16 [paras[0], 0, paras[0], 1]
+PASS Returned fragment for range 16 [paras[0], 0, paras[0], 1]
+PASS Resulting DOM for range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Resulting cursor position for range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Returned fragment for range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Resulting DOM for range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Resulting cursor position for range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Returned fragment for range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Resulting DOM for range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Resulting cursor position for range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Returned fragment for range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Resulting DOM for range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Resulting cursor position for range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Returned fragment for range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Resulting DOM for range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Resulting cursor position for range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Returned fragment for range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Resulting DOM for range 22 [testDiv, 2, paras[4], 1]
+PASS Resulting cursor position for range 22 [testDiv, 2, paras[4], 1]
+PASS Returned fragment for range 22 [testDiv, 2, paras[4], 1]
+PASS Resulting DOM for range 23 [document, 0, document, 1]
+PASS Resulting cursor position for range 23 [document, 0, document, 1]
+PASS Returned fragment for range 23 [document, 0, document, 1]
+FAIL Resulting DOM for range 24 [document, 0, document, 2] assert_throws: function "function () {
+ actualRange.cloneContents();
+ }" did not throw
+FAIL Resulting cursor position for range 24 [document, 0, document, 2] undefined is not an object (evaluating 'actualRoots')
+PASS Returned fragment for range 24 [document, 0, document, 2]
+PASS Resulting DOM for range 25 [comment, 2, comment, 3]
+PASS Resulting cursor position for range 25 [comment, 2, comment, 3]
+PASS Returned fragment for range 25 [comment, 2, comment, 3]
+PASS Resulting DOM for range 26 [testDiv, 0, comment, 5]
+PASS Resulting cursor position for range 26 [testDiv, 0, comment, 5]
+PASS Returned fragment for range 26 [testDiv, 0, comment, 5]
+PASS Resulting DOM for range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Resulting cursor position for range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Returned fragment for range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Resulting DOM for range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Resulting cursor position for range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Returned fragment for range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Resulting DOM for range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Resulting cursor position for range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Returned fragment for range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Resulting DOM for range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Resulting cursor position for range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Returned fragment for range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Resulting DOM for range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Resulting cursor position for range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Returned fragment for range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Resulting DOM for range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Resulting cursor position for range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Returned fragment for range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Resulting DOM for range 33 [detachedComment, 3, detachedComment, 4]
+PASS Resulting cursor position for range 33 [detachedComment, 3, detachedComment, 4]
+PASS Returned fragment for range 33 [detachedComment, 3, detachedComment, 4]
+PASS Resulting DOM for range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Resulting cursor position for range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Returned fragment for range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Resulting DOM for range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Resulting cursor position for range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Returned fragment for range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Resulting DOM for range 36 [docfrag, 0, docfrag, 0]
+PASS Resulting cursor position for range 36 [docfrag, 0, docfrag, 0]
+PASS Returned fragment for range 36 [docfrag, 0, docfrag, 0]
+PASS Resulting DOM for range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Resulting cursor position for range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Returned fragment for range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Resulting DOM for range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Resulting cursor position for range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Returned fragment for range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Resulting DOM for range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Resulting cursor position for range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Returned fragment for range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Resulting DOM for range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Resulting cursor position for range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Returned fragment for range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Resulting DOM for range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Resulting cursor position for range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Returned fragment for range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Resulting DOM for range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Resulting cursor position for range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Returned fragment for range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Resulting DOM for range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Resulting cursor position for range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Returned fragment for range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Resulting DOM for range 44 [paras[0], 0, paras[0], 0]
+PASS Resulting cursor position for range 44 [paras[0], 0, paras[0], 0]
+PASS Returned fragment for range 44 [paras[0], 0, paras[0], 0]
+PASS Resulting DOM for range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Resulting cursor position for range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Returned fragment for range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Resulting DOM for range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Resulting cursor position for range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Returned fragment for range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Resulting DOM for range 47 [document.documentElement, 1, document.body, 0]
+PASS Resulting cursor position for range 47 [document.documentElement, 1, document.body, 0]
+PASS Returned fragment for range 47 [document.documentElement, 1, document.body, 0]
+PASS Resulting DOM for range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Resulting cursor position for range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Returned fragment for range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Resulting DOM for range 49 [document, 1, document, 2]
+PASS Resulting cursor position for range 49 [document, 1, document, 2]
+PASS Returned fragment for range 49 [document, 1, document, 2]
+PASS Resulting DOM for range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Resulting cursor position for range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Returned fragment for range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Resulting DOM for range 51 [paras[3], 1, comment, 8]
+PASS Resulting cursor position for range 51 [paras[3], 1, comment, 8]
+PASS Returned fragment for range 51 [paras[3], 1, comment, 8]
+PASS Resulting DOM for range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Resulting cursor position for range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Returned fragment for range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Resulting DOM for range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Resulting cursor position for range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Returned fragment for range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Resulting DOM for range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Resulting cursor position for range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Returned fragment for range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Resulting DOM for range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Resulting cursor position for range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Returned fragment for range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Resulting DOM for range 56 [detachedComment, 5, detachedComment, 5]
+PASS Resulting cursor position for range 56 [detachedComment, 5, detachedComment, 5]
+PASS Returned fragment for range 56 [detachedComment, 5, detachedComment, 5]
+PASS Resulting DOM for range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Resulting cursor position for range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Returned fragment for range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Resulting DOM for range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Resulting cursor position for range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Returned fragment for range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Resulting DOM for range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Resulting cursor position for range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Returned fragment for range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangecloneContentshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneContents.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneContents.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneContents.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,457 @@
</span><ins>+<!doctype html>
+<title>Range.cloneContents() tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<p>To debug test failures, add a query parameter "subtest" with the test id (like
+"?subtest=5"). Only that test will be run. Then you can look at the resulting
+iframe in the DOM.
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+testDiv.parentNode.removeChild(testDiv);
+
+var actualIframe = document.createElement("iframe");
+actualIframe.style.display = "none";
+document.body.appendChild(actualIframe);
+
+var expectedIframe = document.createElement("iframe");
+expectedIframe.style.display = "none";
+document.body.appendChild(expectedIframe);
+
+function myCloneContents(range) {
+ // "Let frag be a new DocumentFragment whose ownerDocument is the same as
+ // the ownerDocument of the context object's start node."
+ var ownerDoc = range.startContainer.nodeType == Node.DOCUMENT_NODE
+ ? range.startContainer
+ : range.startContainer.ownerDocument;
+ var frag = ownerDoc.createDocumentFragment();
+
+ // "If the context object's start and end are the same, abort this method,
+ // returning frag."
+ if (range.startContainer == range.endContainer
+ && range.startOffset == range.endOffset) {
+ return frag;
+ }
+
+ // "Let original start node, original start offset, original end node, and
+ // original end offset be the context object's start and end nodes and
+ // offsets, respectively."
+ var originalStartNode = range.startContainer;
+ var originalStartOffset = range.startOffset;
+ var originalEndNode = range.endContainer;
+ var originalEndOffset = range.endOffset;
+
+ // "If original start node and original end node are the same, and they are
+ // a Text, ProcessingInstruction, or Comment node:"
+ if (range.startContainer == range.endContainer
+ && (range.startContainer.nodeType == Node.TEXT_NODE
+ || range.startContainer.nodeType == Node.COMMENT_NODE
+ || range.startContainer.nodeType == Node.PROCESSING_INSTRUCTION_NODE)) {
+ // "Let clone be the result of calling cloneNode(false) on original
+ // start node."
+ var clone = originalStartNode.cloneNode(false);
+
+ // "Set the data of clone to the result of calling
+ // substringData(original start offset, original end offset − original
+ // start offset) on original start node."
+ clone.data = originalStartNode.substringData(originalStartOffset,
+ originalEndOffset - originalStartOffset);
+
+ // "Append clone as the last child of frag."
+ frag.appendChild(clone);
+
+ // "Abort this method, returning frag."
+ return frag;
+ }
+
+ // "Let common ancestor equal original start node."
+ var commonAncestor = originalStartNode;
+
+ // "While common ancestor is not an ancestor container of original end
+ // node, set common ancestor to its own parent."
+ while (!isAncestorContainer(commonAncestor, originalEndNode)) {
+ commonAncestor = commonAncestor.parentNode;
+ }
+
+ // "If original start node is an ancestor container of original end node,
+ // let first partially contained child be null."
+ var firstPartiallyContainedChild;
+ if (isAncestorContainer(originalStartNode, originalEndNode)) {
+ firstPartiallyContainedChild = null;
+ // "Otherwise, let first partially contained child be the first child of
+ // common ancestor that is partially contained in the context object."
+ } else {
+ for (var i = 0; i < commonAncestor.childNodes.length; i++) {
+ if (isPartiallyContained(commonAncestor.childNodes[i], range)) {
+ firstPartiallyContainedChild = commonAncestor.childNodes[i];
+ break;
+ }
+ }
+ if (!firstPartiallyContainedChild) {
+ throw "Spec bug: no first partially contained child!";
+ }
+ }
+
+ // "If original end node is an ancestor container of original start node,
+ // let last partially contained child be null."
+ var lastPartiallyContainedChild;
+ if (isAncestorContainer(originalEndNode, originalStartNode)) {
+ lastPartiallyContainedChild = null;
+ // "Otherwise, let last partially contained child be the last child of
+ // common ancestor that is partially contained in the context object."
+ } else {
+ for (var i = commonAncestor.childNodes.length - 1; i >= 0; i--) {
+ if (isPartiallyContained(commonAncestor.childNodes[i], range)) {
+ lastPartiallyContainedChild = commonAncestor.childNodes[i];
+ break;
+ }
+ }
+ if (!lastPartiallyContainedChild) {
+ throw "Spec bug: no last partially contained child!";
+ }
+ }
+
+ // "Let contained children be a list of all children of common ancestor
+ // that are contained in the context object, in tree order."
+ //
+ // "If any member of contained children is a DocumentType, raise a
+ // HIERARCHY_REQUEST_ERR exception and abort these steps."
+ var containedChildren = [];
+ for (var i = 0; i < commonAncestor.childNodes.length; i++) {
+ if (isContained(commonAncestor.childNodes[i], range)) {
+ if (commonAncestor.childNodes[i].nodeType
+ == Node.DOCUMENT_TYPE_NODE) {
+ return "HIERARCHY_REQUEST_ERR";
+ }
+ containedChildren.push(commonAncestor.childNodes[i]);
+ }
+ }
+
+ // "If first partially contained child is a Text, ProcessingInstruction, or Comment node:"
+ if (firstPartiallyContainedChild
+ && (firstPartiallyContainedChild.nodeType == Node.TEXT_NODE
+ || firstPartiallyContainedChild.nodeType == Node.COMMENT_NODE
+ || firstPartiallyContainedChild.nodeType == Node.PROCESSING_INSTRUCTION_NODE)) {
+ // "Let clone be the result of calling cloneNode(false) on original
+ // start node."
+ var clone = originalStartNode.cloneNode(false);
+
+ // "Set the data of clone to the result of calling substringData() on
+ // original start node, with original start offset as the first
+ // argument and (length of original start node − original start offset)
+ // as the second."
+ clone.data = originalStartNode.substringData(originalStartOffset,
+ nodeLength(originalStartNode) - originalStartOffset);
+
+ // "Append clone as the last child of frag."
+ frag.appendChild(clone);
+ // "Otherwise, if first partially contained child is not null:"
+ } else if (firstPartiallyContainedChild) {
+ // "Let clone be the result of calling cloneNode(false) on first
+ // partially contained child."
+ var clone = firstPartiallyContainedChild.cloneNode(false);
+
+ // "Append clone as the last child of frag."
+ frag.appendChild(clone);
+
+ // "Let subrange be a new Range whose start is (original start node,
+ // original start offset) and whose end is (first partially contained
+ // child, length of first partially contained child)."
+ var subrange = ownerDoc.createRange();
+ subrange.setStart(originalStartNode, originalStartOffset);
+ subrange.setEnd(firstPartiallyContainedChild,
+ nodeLength(firstPartiallyContainedChild));
+
+ // "Let subfrag be the result of calling cloneContents() on
+ // subrange."
+ var subfrag = myCloneContents(subrange);
+
+ // "For each child of subfrag, in order, append that child to clone as
+ // its last child."
+ for (var i = 0; i < subfrag.childNodes.length; i++) {
+ clone.appendChild(subfrag.childNodes[i]);
+ }
+ }
+
+ // "For each contained child in contained children:"
+ for (var i = 0; i < containedChildren.length; i++) {
+ // "Let clone be the result of calling cloneNode(true) of contained
+ // child."
+ var clone = containedChildren[i].cloneNode(true);
+
+ // "Append clone as the last child of frag."
+ frag.appendChild(clone);
+ }
+
+ // "If last partially contained child is a Text, ProcessingInstruction, or Comment node:"
+ if (lastPartiallyContainedChild
+ && (lastPartiallyContainedChild.nodeType == Node.TEXT_NODE
+ || lastPartiallyContainedChild.nodeType == Node.COMMENT_NODE
+ || lastPartiallyContainedChild.nodeType == Node.PROCESSING_INSTRUCTION_NODE)) {
+ // "Let clone be the result of calling cloneNode(false) on original
+ // end node."
+ var clone = originalEndNode.cloneNode(false);
+
+ // "Set the data of clone to the result of calling substringData(0,
+ // original end offset) on original end node."
+ clone.data = originalEndNode.substringData(0, originalEndOffset);
+
+ // "Append clone as the last child of frag."
+ frag.appendChild(clone);
+ // "Otherwise, if last partially contained child is not null:"
+ } else if (lastPartiallyContainedChild) {
+ // "Let clone be the result of calling cloneNode(false) on last
+ // partially contained child."
+ var clone = lastPartiallyContainedChild.cloneNode(false);
+
+ // "Append clone as the last child of frag."
+ frag.appendChild(clone);
+
+ // "Let subrange be a new Range whose start is (last partially
+ // contained child, 0) and whose end is (original end node, original
+ // end offset)."
+ var subrange = ownerDoc.createRange();
+ subrange.setStart(lastPartiallyContainedChild, 0);
+ subrange.setEnd(originalEndNode, originalEndOffset);
+
+ // "Let subfrag be the result of calling cloneContents() on
+ // subrange."
+ var subfrag = myCloneContents(subrange);
+
+ // "For each child of subfrag, in order, append that child to clone as
+ // its last child."
+ for (var i = 0; i < subfrag.childNodes.length; i++) {
+ clone.appendChild(subfrag.childNodes[i]);
+ }
+ }
+
+ // "Return frag."
+ return frag;
+}
+
+function restoreIframe(iframe, i) {
+ // Most of this function is designed to work around the fact that Opera
+ // doesn't let you add a doctype to a document that no longer has one, in
+ // any way I can figure out. I eventually compromised on something that
+ // will still let Opera pass most tests that don't actually involve
+ // doctypes.
+ while (iframe.contentDocument.firstChild
+ && iframe.contentDocument.firstChild.nodeType != Node.DOCUMENT_TYPE_NODE) {
+ iframe.contentDocument.removeChild(iframe.contentDocument.firstChild);
+ }
+
+ while (iframe.contentDocument.lastChild
+ && iframe.contentDocument.lastChild.nodeType != Node.DOCUMENT_TYPE_NODE) {
+ iframe.contentDocument.removeChild(iframe.contentDocument.lastChild);
+ }
+
+ if (!iframe.contentDocument.firstChild) {
+ // This will throw an exception in Opera if we reach here, which is why
+ // I try to avoid it. It will never happen in a browser that obeys the
+ // spec, so it's really just insurance. I don't think it actually gets
+ // hit by anything.
+ iframe.contentDocument.appendChild(iframe.contentDocument.implementation.createDocumentType("html", "", ""));
+ }
+ iframe.contentDocument.appendChild(referenceDoc.documentElement.cloneNode(true));
+ iframe.contentWindow.setupRangeTests();
+ iframe.contentWindow.testRangeInput = testRanges[i];
+ iframe.contentWindow.run();
+}
+
+function testCloneContents(i) {
+ restoreIframe(actualIframe, i);
+ restoreIframe(expectedIframe, i);
+
+ var actualRange = actualIframe.contentWindow.testRange;
+ var expectedRange = expectedIframe.contentWindow.testRange;
+ var actualFrag, expectedFrag;
+ var actualRoots, expectedRoots;
+
+ domTests[i].step(function() {
+ assert_equals(actualIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for actual cloneContents()");
+ assert_equals(expectedIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for simulated cloneContents()");
+ assert_equals(typeof actualRange, "object",
+ "typeof Range produced in actual iframe");
+ assert_equals(typeof expectedRange, "object",
+ "typeof Range produced in expected iframe");
+
+ // NOTE: We could just assume that cloneContents() doesn't change
+ // anything. That would simplify these tests, taken in isolation. But
+ // once we've already set up the whole apparatus for extractContents()
+ // and deleteContents(), we just reuse it here, on the theory of "why
+ // not test some more stuff if it's easy to do".
+ //
+ // Just to be pedantic, we'll test not only that the tree we're
+ // modifying is the same in expected vs. actual, but also that all the
+ // nodes originally in it were the same. Typically some nodes will
+ // become detached when the algorithm is run, but they still exist and
+ // references can still be kept to them, so they should also remain the
+ // same.
+ //
+ // We initialize the list to all nodes, and later on remove all the
+ // ones which still have parents, since the parents will presumably be
+ // tested for isEqualNode() and checking the children would be
+ // redundant.
+ var actualAllNodes = [];
+ var node = furthestAncestor(actualRange.startContainer);
+ do {
+ actualAllNodes.push(node);
+ } while (node = nextNode(node));
+
+ var expectedAllNodes = [];
+ var node = furthestAncestor(expectedRange.startContainer);
+ do {
+ expectedAllNodes.push(node);
+ } while (node = nextNode(node));
+
+ expectedFrag = myCloneContents(expectedRange);
+ if (typeof expectedFrag == "string") {
+ assert_throws(expectedFrag, function() {
+ actualRange.cloneContents();
+ });
+ } else {
+ actualFrag = actualRange.cloneContents();
+ }
+
+ actualRoots = [];
+ for (var j = 0; j < actualAllNodes.length; j++) {
+ if (!actualAllNodes[j].parentNode) {
+ actualRoots.push(actualAllNodes[j]);
+ }
+ }
+
+ expectedRoots = [];
+ for (var j = 0; j < expectedAllNodes.length; j++) {
+ if (!expectedAllNodes[j].parentNode) {
+ expectedRoots.push(expectedAllNodes[j]);
+ }
+ }
+
+ for (var j = 0; j < actualRoots.length; j++) {
+ assertNodesEqual(actualRoots[j], expectedRoots[j], j ? "detached node #" + j : "tree root");
+
+ if (j == 0) {
+ // Clearly something is wrong if the node lists are different
+ // lengths. We want to report this only after we've already
+ // checked the main tree for equality, though, so it doesn't
+ // mask more interesting errors.
+ assert_equals(actualRoots.length, expectedRoots.length,
+ "Actual and expected DOMs were broken up into a different number of pieces by cloneContents() (this probably means you created or detached nodes when you weren't supposed to)");
+ }
+ }
+ });
+ domTests[i].done();
+
+ positionTests[i].step(function() {
+ assert_equals(actualIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for actual cloneContents()");
+ assert_equals(expectedIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for simulated cloneContents()");
+ assert_equals(typeof actualRange, "object",
+ "typeof Range produced in actual iframe");
+ assert_equals(typeof expectedRange, "object",
+ "typeof Range produced in expected iframe");
+
+ assert_true(actualRoots[0].isEqualNode(expectedRoots[0]),
+ "The resulting DOMs were not equal, so comparing positions makes no sense");
+
+ if (typeof expectedFrag == "string") {
+ // It's no longer true that, e.g., startContainer and endContainer
+ // must always be the same
+ return;
+ }
+
+ assert_equals(actualRange.startOffset, expectedRange.startOffset,
+ "Unexpected startOffset after cloneContents()");
+ // How do we decide that the two nodes are equal, since they're in
+ // different trees? Since the DOMs are the same, it's enough to check
+ // that the index in the parent is the same all the way up the tree.
+ // But we can first cheat by just checking they're actually equal.
+ assert_true(actualRange.startContainer.isEqualNode(expectedRange.startContainer),
+ "Unexpected startContainer after cloneContents(), expected " +
+ expectedRange.startContainer.nodeName.toLowerCase() + " but got " +
+ actualRange.startContainer.nodeName.toLowerCase());
+ var currentActual = actualRange.startContainer;
+ var currentExpected = expectedRange.startContainer;
+ var actual = "";
+ var expected = "";
+ while (currentActual && currentExpected) {
+ actual = indexOf(currentActual) + "-" + actual;
+ expected = indexOf(currentExpected) + "-" + expected;
+
+ currentActual = currentActual.parentNode;
+ currentExpected = currentExpected.parentNode;
+ }
+ actual = actual.substr(0, actual.length - 1);
+ expected = expected.substr(0, expected.length - 1);
+ assert_equals(actual, expected,
+ "startContainer superficially looks right but is actually the wrong node if you trace back its index in all its ancestors (I'm surprised this actually happened");
+ });
+ positionTests[i].done();
+
+ fragTests[i].step(function() {
+ assert_equals(actualIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for actual cloneContents()");
+ assert_equals(expectedIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for simulated cloneContents()");
+ assert_equals(typeof actualRange, "object",
+ "typeof Range produced in actual iframe");
+ assert_equals(typeof expectedRange, "object",
+ "typeof Range produced in expected iframe");
+
+ if (typeof expectedFrag == "string") {
+ // Comparing makes no sense
+ return;
+ }
+ assertNodesEqual(actualFrag, expectedFrag,
+ "returned fragment");
+ });
+ fragTests[i].done();
+}
+
+// First test a Range that has the no-op detach() called on it, synchronously
+test(function() {
+ var range = document.createRange();
+ range.detach();
+ assert_array_equals(range.cloneContents().childNodes, []);
+}, "Range.detach()");
+
+var iStart = 0;
+var iStop = testRanges.length;
+
+if (/subtest=[0-9]+/.test(location.search)) {
+ var matches = /subtest=([0-9]+)/.exec(location.search);
+ iStart = Number(matches[1]);
+ iStop = Number(matches[1]) + 1;
+}
+
+var domTests = [];
+var positionTests = [];
+var fragTests = [];
+
+for (var i = iStart; i < iStop; i++) {
+ domTests[i] = async_test("Resulting DOM for range " + i + " " + testRanges[i]);
+ positionTests[i] = async_test("Resulting cursor position for range " + i + " " + testRanges[i]);
+ fragTests[i] = async_test("Returned fragment for range " + i + " " + testRanges[i]);
+}
+
+var referenceDoc = document.implementation.createHTMLDocument("");
+referenceDoc.removeChild(referenceDoc.documentElement);
+
+actualIframe.onload = function() {
+ expectedIframe.onload = function() {
+ for (var i = iStart; i < iStop; i++) {
+ testCloneContents(i);
+ }
+ }
+ expectedIframe.src = "resources/Range-test-iframe.html";
+ referenceDoc.appendChild(actualIframe.contentDocument.documentElement.cloneNode(true));
+}
+actualIframe.src = "resources/Range-test-iframe.html";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangecloneRangeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneRange-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneRange-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneRange-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,62 @@
</span><ins>+
+PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Range 13 [document.head, 1, document.head, 1]
+PASS Range 14 [document.body, 4, document.body, 5]
+PASS Range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Range 16 [paras[0], 0, paras[0], 1]
+PASS Range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Range 22 [testDiv, 2, paras[4], 1]
+PASS Range 23 [document, 0, document, 1]
+PASS Range 24 [document, 0, document, 2]
+PASS Range 25 [comment, 2, comment, 3]
+PASS Range 26 [testDiv, 0, comment, 5]
+PASS Range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Range 33 [detachedComment, 3, detachedComment, 4]
+PASS Range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Range 36 [docfrag, 0, docfrag, 0]
+PASS Range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Range 44 [paras[0], 0, paras[0], 0]
+PASS Range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Range 47 [document.documentElement, 1, document.body, 0]
+PASS Range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Range 49 [document, 1, document, 2]
+PASS Range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Range 51 [paras[3], 1, comment, 8]
+PASS Range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Range 56 [detachedComment, 5, detachedComment, 5]
+PASS Range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangecloneRangehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneRange.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneRange.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneRange.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,112 @@
</span><ins>+<!doctype html>
+<title>Range.cloneRange() and document.createRange() tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+function testCloneRange(rangeEndpoints) {
+ var range;
+ if (rangeEndpoints == "detached") {
+ range = document.createRange();
+ range.detach();
+ var clonedRange = range.cloneRange();
+ assert_equals(clonedRange.startContainer, range.startContainer,
+ "startContainers must be equal after cloneRange()");
+ assert_equals(clonedRange.startOffset, range.startOffset,
+ "startOffsets must be equal after cloneRange()");
+ assert_equals(clonedRange.endContainer, range.endContainer,
+ "endContainers must be equal after cloneRange()");
+ assert_equals(clonedRange.endOffset, range.endOffset,
+ "endOffsets must be equal after cloneRange()");
+ return;
+ }
+
+ // Have to account for Ranges involving Documents! We could just create
+ // the Range from the current document unconditionally, but some browsers
+ // (WebKit) don't implement setStart() and setEnd() per spec and will throw
+ // spurious exceptions at the time of this writing. No need to mask other
+ // bugs.
+ var ownerDoc = rangeEndpoints[0].nodeType == Node.DOCUMENT_NODE
+ ? rangeEndpoints[0]
+ : rangeEndpoints[0].ownerDocument;
+ range = ownerDoc.createRange();
+ // Here we throw in some createRange() tests, because why not. Have to
+ // test it someplace.
+ assert_equals(range.startContainer, ownerDoc,
+ "doc.createRange() must create Range whose startContainer is doc");
+ assert_equals(range.endContainer, ownerDoc,
+ "doc.createRange() must create Range whose endContainer is doc");
+ assert_equals(range.startOffset, 0,
+ "doc.createRange() must create Range whose startOffset is 0");
+ assert_equals(range.endOffset, 0,
+ "doc.createRange() must create Range whose endOffset is 0");
+
+ range.setStart(rangeEndpoints[0], rangeEndpoints[1]);
+ range.setEnd(rangeEndpoints[2], rangeEndpoints[3]);
+
+ // Make sure we bail out now if setStart or setEnd are buggy, so it doesn't
+ // create misleading failures later.
+ assert_equals(range.startContainer, rangeEndpoints[0],
+ "Sanity check on setStart()");
+ assert_equals(range.startOffset, rangeEndpoints[1],
+ "Sanity check on setStart()");
+ assert_equals(range.endContainer, rangeEndpoints[2],
+ "Sanity check on setEnd()");
+ assert_equals(range.endOffset, rangeEndpoints[3],
+ "Sanity check on setEnd()");
+
+ var clonedRange = range.cloneRange();
+
+ assert_equals(clonedRange.startContainer, range.startContainer,
+ "startContainers must be equal after cloneRange()");
+ assert_equals(clonedRange.startOffset, range.startOffset,
+ "startOffsets must be equal after cloneRange()");
+ assert_equals(clonedRange.endContainer, range.endContainer,
+ "endContainers must be equal after cloneRange()");
+ assert_equals(clonedRange.endOffset, range.endOffset,
+ "endOffsets must be equal after cloneRange()");
+
+ // Make sure that modifying one doesn't affect the other.
+ var testNode1 = ownerDoc.createTextNode("testing");
+ var testNode2 = ownerDoc.createTextNode("testing with different length");
+
+ range.setStart(testNode1, 1);
+ range.setEnd(testNode1, 2);
+ assert_equals(clonedRange.startContainer, rangeEndpoints[0],
+ "Modifying a Range must not modify its clone's startContainer");
+ assert_equals(clonedRange.startOffset, rangeEndpoints[1],
+ "Modifying a Range must not modify its clone's startOffset");
+ assert_equals(clonedRange.endContainer, rangeEndpoints[2],
+ "Modifying a Range must not modify its clone's endContainer");
+ assert_equals(clonedRange.endOffset, rangeEndpoints[3],
+ "Modifying a Range must not modify its clone's endOffset");
+
+ clonedRange.setStart(testNode2, 3);
+ clonedRange.setStart(testNode2, 4);
+
+ assert_equals(range.startContainer, testNode1,
+ "Modifying a clone must not modify the original Range's startContainer");
+ assert_equals(range.startOffset, 1,
+ "Modifying a clone must not modify the original Range's startOffset");
+ assert_equals(range.endContainer, testNode1,
+ "Modifying a clone must not modify the original Range's endContainer");
+ assert_equals(range.endOffset, 2,
+ "Modifying a clone must not modify the original Range's endOffset");
+}
+
+var tests = [];
+for (var i = 0; i < testRanges.length; i++) {
+ tests.push([
+ "Range " + i + " " + testRanges[i],
+ eval(testRanges[i])
+ ]);
+}
+generate_tests(testCloneRange, tests);
+
+testDiv.style.display = "none";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangecollapseexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-collapse-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-collapse-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-collapse-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,182 @@
</span><ins>+
+PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], toStart true
+PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], toStart false
+PASS Range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], toStart omitted
+PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], toStart true
+PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], toStart false
+PASS Range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], toStart omitted
+PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], toStart true
+PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], toStart false
+PASS Range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], toStart omitted
+PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], toStart true
+PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], toStart false
+PASS Range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], toStart omitted
+PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], toStart true
+PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], toStart false
+PASS Range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], toStart omitted
+PASS Range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], toStart true
+PASS Range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], toStart false
+PASS Range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], toStart omitted
+PASS Range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], toStart true
+PASS Range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], toStart false
+PASS Range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], toStart omitted
+PASS Range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], toStart true
+PASS Range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], toStart false
+PASS Range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], toStart omitted
+PASS Range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], toStart true
+PASS Range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], toStart false
+PASS Range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], toStart omitted
+PASS Range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], toStart true
+PASS Range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], toStart false
+PASS Range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], toStart omitted
+PASS Range 10 [document.documentElement, 0, document.documentElement, 1], toStart true
+PASS Range 10 [document.documentElement, 0, document.documentElement, 1], toStart false
+PASS Range 10 [document.documentElement, 0, document.documentElement, 1], toStart omitted
+PASS Range 11 [document.documentElement, 0, document.documentElement, 2], toStart true
+PASS Range 11 [document.documentElement, 0, document.documentElement, 2], toStart false
+PASS Range 11 [document.documentElement, 0, document.documentElement, 2], toStart omitted
+PASS Range 12 [document.documentElement, 1, document.documentElement, 2], toStart true
+PASS Range 12 [document.documentElement, 1, document.documentElement, 2], toStart false
+PASS Range 12 [document.documentElement, 1, document.documentElement, 2], toStart omitted
+PASS Range 13 [document.head, 1, document.head, 1], toStart true
+PASS Range 13 [document.head, 1, document.head, 1], toStart false
+PASS Range 13 [document.head, 1, document.head, 1], toStart omitted
+PASS Range 14 [document.body, 4, document.body, 5], toStart true
+PASS Range 14 [document.body, 4, document.body, 5], toStart false
+PASS Range 14 [document.body, 4, document.body, 5], toStart omitted
+PASS Range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], toStart true
+PASS Range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], toStart false
+PASS Range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], toStart omitted
+PASS Range 16 [paras[0], 0, paras[0], 1], toStart true
+PASS Range 16 [paras[0], 0, paras[0], 1], toStart false
+PASS Range 16 [paras[0], 0, paras[0], 1], toStart omitted
+PASS Range 17 [detachedPara1, 0, detachedPara1, 1], toStart true
+PASS Range 17 [detachedPara1, 0, detachedPara1, 1], toStart false
+PASS Range 17 [detachedPara1, 0, detachedPara1, 1], toStart omitted
+PASS Range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], toStart true
+PASS Range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], toStart false
+PASS Range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], toStart omitted
+PASS Range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], toStart true
+PASS Range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], toStart false
+PASS Range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], toStart omitted
+PASS Range 20 [paras[0].firstChild, 3, paras[3], 1], toStart true
+PASS Range 20 [paras[0].firstChild, 3, paras[3], 1], toStart false
+PASS Range 20 [paras[0].firstChild, 3, paras[3], 1], toStart omitted
+PASS Range 21 [paras[0], 0, paras[0].firstChild, 7], toStart true
+PASS Range 21 [paras[0], 0, paras[0].firstChild, 7], toStart false
+PASS Range 21 [paras[0], 0, paras[0].firstChild, 7], toStart omitted
+PASS Range 22 [testDiv, 2, paras[4], 1], toStart true
+PASS Range 22 [testDiv, 2, paras[4], 1], toStart false
+PASS Range 22 [testDiv, 2, paras[4], 1], toStart omitted
+PASS Range 23 [document, 0, document, 1], toStart true
+PASS Range 23 [document, 0, document, 1], toStart false
+PASS Range 23 [document, 0, document, 1], toStart omitted
+PASS Range 24 [document, 0, document, 2], toStart true
+PASS Range 24 [document, 0, document, 2], toStart false
+PASS Range 24 [document, 0, document, 2], toStart omitted
+PASS Range 25 [comment, 2, comment, 3], toStart true
+PASS Range 25 [comment, 2, comment, 3], toStart false
+PASS Range 25 [comment, 2, comment, 3], toStart omitted
+PASS Range 26 [testDiv, 0, comment, 5], toStart true
+PASS Range 26 [testDiv, 0, comment, 5], toStart false
+PASS Range 26 [testDiv, 0, comment, 5], toStart omitted
+PASS Range 27 [foreignDoc, 1, foreignComment, 2], toStart true
+PASS Range 27 [foreignDoc, 1, foreignComment, 2], toStart false
+PASS Range 27 [foreignDoc, 1, foreignComment, 2], toStart omitted
+PASS Range 28 [foreignDoc.body, 0, foreignTextNode, 36], toStart true
+PASS Range 28 [foreignDoc.body, 0, foreignTextNode, 36], toStart false
+PASS Range 28 [foreignDoc.body, 0, foreignTextNode, 36], toStart omitted
+PASS Range 29 [xmlDoc, 1, xmlComment, 0], toStart true
+PASS Range 29 [xmlDoc, 1, xmlComment, 0], toStart false
+PASS Range 29 [xmlDoc, 1, xmlComment, 0], toStart omitted
+PASS Range 30 [detachedTextNode, 0, detachedTextNode, 8], toStart true
+PASS Range 30 [detachedTextNode, 0, detachedTextNode, 8], toStart false
+PASS Range 30 [detachedTextNode, 0, detachedTextNode, 8], toStart omitted
+PASS Range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], toStart true
+PASS Range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], toStart false
+PASS Range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], toStart omitted
+PASS Range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], toStart true
+PASS Range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], toStart false
+PASS Range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], toStart omitted
+PASS Range 33 [detachedComment, 3, detachedComment, 4], toStart true
+PASS Range 33 [detachedComment, 3, detachedComment, 4], toStart false
+PASS Range 33 [detachedComment, 3, detachedComment, 4], toStart omitted
+PASS Range 34 [detachedForeignComment, 0, detachedForeignComment, 1], toStart true
+PASS Range 34 [detachedForeignComment, 0, detachedForeignComment, 1], toStart false
+PASS Range 34 [detachedForeignComment, 0, detachedForeignComment, 1], toStart omitted
+PASS Range 35 [detachedXmlComment, 2, detachedXmlComment, 6], toStart true
+PASS Range 35 [detachedXmlComment, 2, detachedXmlComment, 6], toStart false
+PASS Range 35 [detachedXmlComment, 2, detachedXmlComment, 6], toStart omitted
+PASS Range 36 [docfrag, 0, docfrag, 0], toStart true
+PASS Range 36 [docfrag, 0, docfrag, 0], toStart false
+PASS Range 36 [docfrag, 0, docfrag, 0], toStart omitted
+PASS Range 37 [processingInstruction, 0, processingInstruction, 4], toStart true
+PASS Range 37 [processingInstruction, 0, processingInstruction, 4], toStart false
+PASS Range 37 [processingInstruction, 0, processingInstruction, 4], toStart omitted
+PASS Range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1], toStart true
+PASS Range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1], toStart false
+PASS Range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1], toStart omitted
+PASS Range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8], toStart true
+PASS Range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8], toStart false
+PASS Range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8], toStart omitted
+PASS Range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], toStart true
+PASS Range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], toStart false
+PASS Range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1], toStart omitted
+PASS Range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], toStart true
+PASS Range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], toStart false
+PASS Range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1], toStart omitted
+PASS Range 42 [foreignDoc.head, 1, foreignDoc.head, 1], toStart true
+PASS Range 42 [foreignDoc.head, 1, foreignDoc.head, 1], toStart false
+PASS Range 42 [foreignDoc.head, 1, foreignDoc.head, 1], toStart omitted
+PASS Range 43 [foreignDoc.body, 0, foreignDoc.body, 0], toStart true
+PASS Range 43 [foreignDoc.body, 0, foreignDoc.body, 0], toStart false
+PASS Range 43 [foreignDoc.body, 0, foreignDoc.body, 0], toStart omitted
+PASS Range 44 [paras[0], 0, paras[0], 0], toStart true
+PASS Range 44 [paras[0], 0, paras[0], 0], toStart false
+PASS Range 44 [paras[0], 0, paras[0], 0], toStart omitted
+PASS Range 45 [detachedPara1, 0, detachedPara1, 0], toStart true
+PASS Range 45 [detachedPara1, 0, detachedPara1, 0], toStart false
+PASS Range 45 [detachedPara1, 0, detachedPara1, 0], toStart omitted
+PASS Range 46 [testDiv, 1, paras[2].firstChild, 5], toStart true
+PASS Range 46 [testDiv, 1, paras[2].firstChild, 5], toStart false
+PASS Range 46 [testDiv, 1, paras[2].firstChild, 5], toStart omitted
+PASS Range 47 [document.documentElement, 1, document.body, 0], toStart true
+PASS Range 47 [document.documentElement, 1, document.body, 0], toStart false
+PASS Range 47 [document.documentElement, 1, document.body, 0], toStart omitted
+PASS Range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0], toStart true
+PASS Range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0], toStart false
+PASS Range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0], toStart omitted
+PASS Range 49 [document, 1, document, 2], toStart true
+PASS Range 49 [document, 1, document, 2], toStart false
+PASS Range 49 [document, 1, document, 2], toStart omitted
+PASS Range 50 [paras[2].firstChild, 4, comment, 2], toStart true
+PASS Range 50 [paras[2].firstChild, 4, comment, 2], toStart false
+PASS Range 50 [paras[2].firstChild, 4, comment, 2], toStart omitted
+PASS Range 51 [paras[3], 1, comment, 8], toStart true
+PASS Range 51 [paras[3], 1, comment, 8], toStart false
+PASS Range 51 [paras[3], 1, comment, 8], toStart omitted
+PASS Range 52 [foreignDoc, 0, foreignDoc, 0], toStart true
+PASS Range 52 [foreignDoc, 0, foreignDoc, 0], toStart false
+PASS Range 52 [foreignDoc, 0, foreignDoc, 0], toStart omitted
+PASS Range 53 [xmlDoc, 0, xmlDoc, 0], toStart true
+PASS Range 53 [xmlDoc, 0, xmlDoc, 0], toStart false
+PASS Range 53 [xmlDoc, 0, xmlDoc, 0], toStart omitted
+PASS Range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], toStart true
+PASS Range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], toStart false
+PASS Range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7], toStart omitted
+PASS Range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], toStart true
+PASS Range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], toStart false
+PASS Range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7], toStart omitted
+PASS Range 56 [detachedComment, 5, detachedComment, 5], toStart true
+PASS Range 56 [detachedComment, 5, detachedComment, 5], toStart false
+PASS Range 56 [detachedComment, 5, detachedComment, 5], toStart omitted
+PASS Range 57 [detachedForeignComment, 4, detachedForeignComment, 4], toStart true
+PASS Range 57 [detachedForeignComment, 4, detachedForeignComment, 4], toStart false
+PASS Range 57 [detachedForeignComment, 4, detachedForeignComment, 4], toStart omitted
+PASS Range 58 [foreignDocfrag, 0, foreignDocfrag, 0], toStart true
+PASS Range 58 [foreignDocfrag, 0, foreignDocfrag, 0], toStart false
+PASS Range 58 [foreignDocfrag, 0, foreignDocfrag, 0], toStart omitted
+PASS Range 59 [xmlDocfrag, 0, xmlDocfrag, 0], toStart true
+PASS Range 59 [xmlDocfrag, 0, xmlDocfrag, 0], toStart false
+PASS Range 59 [xmlDocfrag, 0, xmlDocfrag, 0], toStart omitted
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangecollapsehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-collapse.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-collapse.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-collapse.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,75 @@
</span><ins>+<!doctype html>
+<title>Range.collapse() and .collapsed tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+function testCollapse(rangeEndpoints, toStart) {
+ var range;
+ if (rangeEndpoints == "detached") {
+ range = document.createRange();
+ range.detach(); // should be a no-op and therefore the following should not throw
+ range.collapse(toStart);
+ assert_equals(true, range.collapsed);
+ }
+
+ // Have to account for Ranges involving Documents!
+ var ownerDoc = rangeEndpoints[0].nodeType == Node.DOCUMENT_NODE
+ ? rangeEndpoints[0]
+ : rangeEndpoints[0].ownerDocument;
+ range = ownerDoc.createRange();
+ range.setStart(rangeEndpoints[0], rangeEndpoints[1]);
+ range.setEnd(rangeEndpoints[2], rangeEndpoints[3]);
+
+ var expectedContainer = toStart ? range.startContainer : range.endContainer;
+ var expectedOffset = toStart ? range.startOffset : range.endOffset;
+
+ assert_equals(range.collapsed, range.startContainer == range.endContainer
+ && range.startOffset == range.endOffset,
+ "collapsed must be true if and only if the start and end are equal");
+
+ if (toStart === undefined) {
+ range.collapse();
+ } else {
+ range.collapse(toStart);
+ }
+
+ assert_equals(range.startContainer, expectedContainer,
+ "Wrong startContainer");
+ assert_equals(range.endContainer, expectedContainer,
+ "Wrong endContainer");
+ assert_equals(range.startOffset, expectedOffset,
+ "Wrong startOffset");
+ assert_equals(range.endOffset, expectedOffset,
+ "Wrong endOffset");
+ assert_true(range.collapsed,
+ ".collapsed must be set after .collapsed()");
+}
+
+var tests = [];
+for (var i = 0; i < testRanges.length; i++) {
+ tests.push([
+ "Range " + i + " " + testRanges[i] + ", toStart true",
+ eval(testRanges[i]),
+ true
+ ]);
+ tests.push([
+ "Range " + i + " " + testRanges[i] + ", toStart false",
+ eval(testRanges[i]),
+ false
+ ]);
+ tests.push([
+ "Range " + i + " " + testRanges[i] + ", toStart omitted",
+ eval(testRanges[i]),
+ undefined
+ ]);
+}
+generate_tests(testCollapse, tests);
+
+testDiv.style.display = "none";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangecommonAncestorContainer2expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer-2-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer-2-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer-2-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+
+FAIL Detached Range InvalidStateError: DOM Exception 11
+PASS Normal Ranges
+PASS Range.commonAncestorContainer
+PASS Range.commonAncestorContainer 1
+PASS Range.commonAncestorContainer 2
+PASS Range.commonAncestorContainer 3
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangecommonAncestorContainer2html"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer-2.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer-2.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer-2.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,33 @@
</span><ins>+<!doctype html>
+<title>Range.commonAncestorContainer</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<script>
+test(function() {
+ var range = document.createRange();
+ range.detach();
+ assert_equals(range.commonAncestorContainer, document);
+}, "Detached Range")
+test(function() {
+ var df = document.createDocumentFragment();
+ var foo = df.appendChild(document.createElement("foo"));
+ foo.appendChild(document.createTextNode("Foo"));
+ var bar = df.appendChild(document.createElement("bar"));
+ bar.appendChild(document.createComment("Bar"));
+ [
+ // start node, start offset, end node, end offset, expected cAC
+ [foo, 0, bar, 0, df],
+ [foo, 0, foo.firstChild, 3, foo],
+ [foo.firstChild, 0, bar, 0, df],
+ [foo.firstChild, 3, bar.firstChild, 2, df]
+ ].forEach(function(t) {
+ test(function() {
+ var range = document.createRange();
+ range.setStart(t[0], t[1]);
+ range.setEnd(t[2], t[3]);
+ assert_equals(range.commonAncestorContainer, t[4]);
+ })
+ });
+}, "Normal Ranges")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangecommonAncestorContainerexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,63 @@
</span><ins>+
+FAIL 0: range [detached] InvalidStateError: DOM Exception 11
+PASS 1: range [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS 2: range [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS 3: range [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS 4: range [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS 5: range [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS 6: range [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS 7: range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS 8: range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS 9: range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS 10: range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS 11: range [document.documentElement, 0, document.documentElement, 1]
+PASS 12: range [document.documentElement, 0, document.documentElement, 2]
+PASS 13: range [document.documentElement, 1, document.documentElement, 2]
+PASS 14: range [document.head, 1, document.head, 1]
+PASS 15: range [document.body, 4, document.body, 5]
+PASS 16: range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS 17: range [paras[0], 0, paras[0], 1]
+PASS 18: range [detachedPara1, 0, detachedPara1, 1]
+PASS 19: range [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS 20: range [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS 21: range [paras[0].firstChild, 3, paras[3], 1]
+PASS 22: range [paras[0], 0, paras[0].firstChild, 7]
+PASS 23: range [testDiv, 2, paras[4], 1]
+PASS 24: range [document, 0, document, 1]
+PASS 25: range [document, 0, document, 2]
+PASS 26: range [comment, 2, comment, 3]
+PASS 27: range [testDiv, 0, comment, 5]
+PASS 28: range [foreignDoc, 1, foreignComment, 2]
+PASS 29: range [foreignDoc.body, 0, foreignTextNode, 36]
+PASS 30: range [xmlDoc, 1, xmlComment, 0]
+PASS 31: range [detachedTextNode, 0, detachedTextNode, 8]
+PASS 32: range [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS 33: range [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS 34: range [detachedComment, 3, detachedComment, 4]
+PASS 35: range [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS 36: range [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS 37: range [docfrag, 0, docfrag, 0]
+PASS 38: range [processingInstruction, 0, processingInstruction, 4]
+PASS 39: range [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS 40: range [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS 41: range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS 42: range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS 43: range [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS 44: range [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS 45: range [paras[0], 0, paras[0], 0]
+PASS 46: range [detachedPara1, 0, detachedPara1, 0]
+PASS 47: range [testDiv, 1, paras[2].firstChild, 5]
+PASS 48: range [document.documentElement, 1, document.body, 0]
+PASS 49: range [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS 50: range [document, 1, document, 2]
+PASS 51: range [paras[2].firstChild, 4, comment, 2]
+PASS 52: range [paras[3], 1, comment, 8]
+PASS 53: range [foreignDoc, 0, foreignDoc, 0]
+PASS 54: range [xmlDoc, 0, xmlDoc, 0]
+PASS 55: range [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS 56: range [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS 57: range [detachedComment, 5, detachedComment, 5]
+PASS 58: range [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS 59: range [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS 60: range [xmlDocfrag, 0, xmlDocfrag, 0]
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangecommonAncestorContainerhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+<!doctype html>
+<title>Range.commonAncestorContainer tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+testRanges.unshift("[detached]");
+
+for (var i = 0; i < testRanges.length; i++) {
+ test(function() {
+ var range;
+ if (i == 0) {
+ range = document.createRange();
+ range.detach();
+ } else {
+ range = rangeFromEndpoints(eval(testRanges[i]));
+ }
+
+ // "Let container be start node."
+ var container = range.startContainer;
+
+ // "While container is not an inclusive ancestor of end node, let
+ // container be container's parent."
+ while (container != range.endContainer
+ && !isAncestor(container, range.endContainer)) {
+ container = container.parentNode;
+ }
+
+ // "Return container."
+ assert_equals(range.commonAncestorContainer, container);
+ }, i + ": range " + testRanges[i]);
+}
+
+testDiv.style.display = "none";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangecompareBoundaryPointsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-compareBoundaryPoints-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-compareBoundaryPoints-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-compareBoundaryPoints-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,8667 @@
</span><ins>+
+FAIL 0,0,0: context range 0 [detached], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,0,1: context range 0 [detached], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,0,2: context range 0 [detached], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,0,3: context range 0 [detached], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 0,0,4: context range 0 [detached], argument range 0 [detached], how -1
+PASS 0,0,5: context range 0 [detached], argument range 0 [detached], how 4
+PASS 0,0,6: context range 0 [detached], argument range 0 [detached], how 5
+FAIL 0,0,7: context range 0 [detached], argument range 0 [detached], how NaN InvalidStateError: DOM Exception 11
+FAIL 0,0,8: context range 0 [detached], argument range 0 [detached], how -0 InvalidStateError: DOM Exception 11
+FAIL 0,0,9: context range 0 [detached], argument range 0 [detached], how Infinity InvalidStateError: DOM Exception 11
+FAIL 0,0,10: context range 0 [detached], argument range 0 [detached], how -Infinity InvalidStateError: DOM Exception 11
+PASS 0,0,11: context range 0 [detached], argument range 0 [detached], how 65535
+FAIL 0,0,12: context range 0 [detached], argument range 0 [detached], how 65536 InvalidStateError: DOM Exception 11
+FAIL 0,0,13: context range 0 [detached], argument range 0 [detached], how 65537 InvalidStateError: DOM Exception 11
+FAIL 0,0,14: context range 0 [detached], argument range 0 [detached], how 65538 InvalidStateError: DOM Exception 11
+FAIL 0,0,15: context range 0 [detached], argument range 0 [detached], how 65539 InvalidStateError: DOM Exception 11
+PASS 0,0,16: context range 0 [detached], argument range 0 [detached], how 65540
+PASS 0,0,17: context range 0 [detached], argument range 0 [detached], how -65537
+FAIL 0,0,18: context range 0 [detached], argument range 0 [detached], how -65536 InvalidStateError: DOM Exception 11
+FAIL 0,0,19: context range 0 [detached], argument range 0 [detached], how -65535 InvalidStateError: DOM Exception 11
+FAIL 0,0,20: context range 0 [detached], argument range 0 [detached], how -65534 InvalidStateError: DOM Exception 11
+FAIL 0,0,21: context range 0 [detached], argument range 0 [detached], how -65533 InvalidStateError: DOM Exception 11
+PASS 0,0,22: context range 0 [detached], argument range 0 [detached], how -65532
+PASS 0,0,23: context range 0 [detached], argument range 0 [detached], how 4294967295
+FAIL 0,0,24: context range 0 [detached], argument range 0 [detached], how 4294967296 InvalidStateError: DOM Exception 11
+FAIL 0,0,25: context range 0 [detached], argument range 0 [detached], how 4294967297 InvalidStateError: DOM Exception 11
+FAIL 0,0,26: context range 0 [detached], argument range 0 [detached], how 4294967298 InvalidStateError: DOM Exception 11
+FAIL 0,0,27: context range 0 [detached], argument range 0 [detached], how 4294967299 InvalidStateError: DOM Exception 11
+PASS 0,0,28: context range 0 [detached], argument range 0 [detached], how 4294967300
+FAIL 0,0,29: context range 0 [detached], argument range 0 [detached], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 0,0,30: context range 0 [detached], argument range 0 [detached], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 0,0,31: context range 0 [detached], argument range 0 [detached], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 0,0,32: context range 0 [detached], argument range 0 [detached], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 0,0,33: context range 0 [detached], argument range 0 [detached], how 3.5 InvalidStateError: DOM Exception 11
+PASS 0,0,34: context range 0 [detached], argument range 0 [detached], how 4.5
+PASS 0,0,35: context range 0 [detached], argument range 0 [detached], how -1.5
+FAIL 0,0,36: context range 0 [detached], argument range 0 [detached], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 0,0,37: context range 0 [detached], argument range 0 [detached], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 0,0,38: context range 0 [detached], argument range 0 [detached], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 0,0,39: context range 0 [detached], argument range 0 [detached], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 0,0,40: context range 0 [detached], argument range 0 [detached], how 3.5 InvalidStateError: DOM Exception 11
+PASS 0,0,41: context range 0 [detached], argument range 0 [detached], how -73.5
+PASS 0,0,42: context range 0 [detached], argument range 0 [detached], how -72.5
+PASS 0,0,43: context range 0 [detached], argument range 0 [detached], how -71.5
+PASS 0,0,44: context range 0 [detached], argument range 0 [detached], how -70.5
+PASS 0,0,45: context range 0 [detached], argument range 0 [detached], how -69.5
+PASS 0,0,46: context range 0 [detached], argument range 0 [detached], how -68.5
+FAIL 0,0,47: context range 0 [detached], argument range 0 [detached], how "0" InvalidStateError: DOM Exception 11
+FAIL 0,0,48: context range 0 [detached], argument range 0 [detached], how "1" InvalidStateError: DOM Exception 11
+FAIL 0,0,49: context range 0 [detached], argument range 0 [detached], how "2" InvalidStateError: DOM Exception 11
+FAIL 0,0,50: context range 0 [detached], argument range 0 [detached], how "3" InvalidStateError: DOM Exception 11
+PASS 0,0,51: context range 0 [detached], argument range 0 [detached], how "-1"
+PASS 0,0,52: context range 0 [detached], argument range 0 [detached], how "4"
+PASS 0,0,53: context range 0 [detached], argument range 0 [detached], how "5"
+FAIL 0,0,54: context range 0 [detached], argument range 0 [detached], how "NaN" InvalidStateError: DOM Exception 11
+FAIL 0,0,55: context range 0 [detached], argument range 0 [detached], how "0" InvalidStateError: DOM Exception 11
+FAIL 0,0,56: context range 0 [detached], argument range 0 [detached], how "Infinity" InvalidStateError: DOM Exception 11
+FAIL 0,0,57: context range 0 [detached], argument range 0 [detached], how "-Infinity" InvalidStateError: DOM Exception 11
+PASS 0,0,58: context range 0 [detached], argument range 0 [detached], how "65535"
+FAIL 0,0,59: context range 0 [detached], argument range 0 [detached], how "65536" InvalidStateError: DOM Exception 11
+FAIL 0,0,60: context range 0 [detached], argument range 0 [detached], how "65537" InvalidStateError: DOM Exception 11
+FAIL 0,0,61: context range 0 [detached], argument range 0 [detached], how "65538" InvalidStateError: DOM Exception 11
+FAIL 0,0,62: context range 0 [detached], argument range 0 [detached], how "65539" InvalidStateError: DOM Exception 11
+PASS 0,0,63: context range 0 [detached], argument range 0 [detached], how "65540"
+PASS 0,0,64: context range 0 [detached], argument range 0 [detached], how "-65537"
+FAIL 0,0,65: context range 0 [detached], argument range 0 [detached], how "-65536" InvalidStateError: DOM Exception 11
+FAIL 0,0,66: context range 0 [detached], argument range 0 [detached], how "-65535" InvalidStateError: DOM Exception 11
+FAIL 0,0,67: context range 0 [detached], argument range 0 [detached], how "-65534" InvalidStateError: DOM Exception 11
+FAIL 0,0,68: context range 0 [detached], argument range 0 [detached], how "-65533" InvalidStateError: DOM Exception 11
+PASS 0,0,69: context range 0 [detached], argument range 0 [detached], how "-65532"
+PASS 0,0,70: context range 0 [detached], argument range 0 [detached], how "4294967295"
+FAIL 0,0,71: context range 0 [detached], argument range 0 [detached], how "4294967296" InvalidStateError: DOM Exception 11
+FAIL 0,0,72: context range 0 [detached], argument range 0 [detached], how "4294967297" InvalidStateError: DOM Exception 11
+FAIL 0,0,73: context range 0 [detached], argument range 0 [detached], how "4294967298" InvalidStateError: DOM Exception 11
+FAIL 0,0,74: context range 0 [detached], argument range 0 [detached], how "4294967299" InvalidStateError: DOM Exception 11
+PASS 0,0,75: context range 0 [detached], argument range 0 [detached], how "4294967300"
+FAIL 0,0,76: context range 0 [detached], argument range 0 [detached], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 0,0,77: context range 0 [detached], argument range 0 [detached], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 0,0,78: context range 0 [detached], argument range 0 [detached], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 0,0,79: context range 0 [detached], argument range 0 [detached], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 0,0,80: context range 0 [detached], argument range 0 [detached], how "3.5" InvalidStateError: DOM Exception 11
+PASS 0,0,81: context range 0 [detached], argument range 0 [detached], how "4.5"
+PASS 0,0,82: context range 0 [detached], argument range 0 [detached], how "-1.5"
+FAIL 0,0,83: context range 0 [detached], argument range 0 [detached], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 0,0,84: context range 0 [detached], argument range 0 [detached], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 0,0,85: context range 0 [detached], argument range 0 [detached], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 0,0,86: context range 0 [detached], argument range 0 [detached], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 0,0,87: context range 0 [detached], argument range 0 [detached], how "3.5" InvalidStateError: DOM Exception 11
+PASS 0,0,88: context range 0 [detached], argument range 0 [detached], how "-73.5"
+PASS 0,0,89: context range 0 [detached], argument range 0 [detached], how "-72.5"
+PASS 0,0,90: context range 0 [detached], argument range 0 [detached], how "-71.5"
+PASS 0,0,91: context range 0 [detached], argument range 0 [detached], how "-70.5"
+PASS 0,0,92: context range 0 [detached], argument range 0 [detached], how "-69.5"
+PASS 0,0,93: context range 0 [detached], argument range 0 [detached], how "-68.5"
+FAIL 0,0,94: context range 0 [detached], argument range 0 [detached], how "6.5536e4" InvalidStateError: DOM Exception 11
+FAIL 0,0,95: context range 0 [detached], argument range 0 [detached], how null InvalidStateError: DOM Exception 11
+FAIL 0,0,96: context range 0 [detached], argument range 0 [detached], how undefined InvalidStateError: DOM Exception 11
+FAIL 0,0,97: context range 0 [detached], argument range 0 [detached], how true InvalidStateError: DOM Exception 11
+FAIL 0,0,98: context range 0 [detached], argument range 0 [detached], how false InvalidStateError: DOM Exception 11
+FAIL 0,0,99: context range 0 [detached], argument range 0 [detached], how "" InvalidStateError: DOM Exception 11
+FAIL 0,0,100: context range 0 [detached], argument range 0 [detached], how "quasit" InvalidStateError: DOM Exception 11
+FAIL 0,1,0: context range 0 [detached], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,1,1: context range 0 [detached], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,1,2: context range 0 [detached], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,1,3: context range 0 [detached], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,2,0: context range 0 [detached], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,2,1: context range 0 [detached], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,2,2: context range 0 [detached], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,2,3: context range 0 [detached], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,3,0: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,3,1: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,3,2: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,3,3: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3 InvalidStateError: DOM Exception 11
+PASS 0,3,4: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -1
+PASS 0,3,5: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4
+PASS 0,3,6: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 5
+FAIL 0,3,7: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how NaN InvalidStateError: DOM Exception 11
+FAIL 0,3,8: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -0 InvalidStateError: DOM Exception 11
+FAIL 0,3,9: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how Infinity InvalidStateError: DOM Exception 11
+FAIL 0,3,10: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -Infinity InvalidStateError: DOM Exception 11
+PASS 0,3,11: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65535
+FAIL 0,3,12: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65536 InvalidStateError: DOM Exception 11
+FAIL 0,3,13: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65537 InvalidStateError: DOM Exception 11
+FAIL 0,3,14: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65538 InvalidStateError: DOM Exception 11
+FAIL 0,3,15: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65539 InvalidStateError: DOM Exception 11
+PASS 0,3,16: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65540
+PASS 0,3,17: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65537
+FAIL 0,3,18: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65536 InvalidStateError: DOM Exception 11
+FAIL 0,3,19: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65535 InvalidStateError: DOM Exception 11
+FAIL 0,3,20: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65534 InvalidStateError: DOM Exception 11
+FAIL 0,3,21: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65533 InvalidStateError: DOM Exception 11
+PASS 0,3,22: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65532
+PASS 0,3,23: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967295
+FAIL 0,3,24: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967296 InvalidStateError: DOM Exception 11
+FAIL 0,3,25: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967297 InvalidStateError: DOM Exception 11
+FAIL 0,3,26: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967298 InvalidStateError: DOM Exception 11
+FAIL 0,3,27: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967299 InvalidStateError: DOM Exception 11
+PASS 0,3,28: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967300
+FAIL 0,3,29: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 0,3,30: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 0,3,31: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 0,3,32: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 0,3,33: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3.5 InvalidStateError: DOM Exception 11
+PASS 0,3,34: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4.5
+PASS 0,3,35: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -1.5
+FAIL 0,3,36: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 0,3,37: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 0,3,38: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 0,3,39: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 0,3,40: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3.5 InvalidStateError: DOM Exception 11
+PASS 0,3,41: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -73.5
+PASS 0,3,42: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -72.5
+PASS 0,3,43: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -71.5
+PASS 0,3,44: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -70.5
+PASS 0,3,45: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -69.5
+PASS 0,3,46: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -68.5
+FAIL 0,3,47: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0" InvalidStateError: DOM Exception 11
+FAIL 0,3,48: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "1" InvalidStateError: DOM Exception 11
+FAIL 0,3,49: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "2" InvalidStateError: DOM Exception 11
+FAIL 0,3,50: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "3" InvalidStateError: DOM Exception 11
+PASS 0,3,51: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-1"
+PASS 0,3,52: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4"
+PASS 0,3,53: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "5"
+FAIL 0,3,54: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "NaN" InvalidStateError: DOM Exception 11
+FAIL 0,3,55: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0" InvalidStateError: DOM Exception 11
+FAIL 0,3,56: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "Infinity" InvalidStateError: DOM Exception 11
+FAIL 0,3,57: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-Infinity" InvalidStateError: DOM Exception 11
+PASS 0,3,58: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65535"
+FAIL 0,3,59: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65536" InvalidStateError: DOM Exception 11
+FAIL 0,3,60: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65537" InvalidStateError: DOM Exception 11
+FAIL 0,3,61: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65538" InvalidStateError: DOM Exception 11
+FAIL 0,3,62: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65539" InvalidStateError: DOM Exception 11
+PASS 0,3,63: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65540"
+PASS 0,3,64: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65537"
+FAIL 0,3,65: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65536" InvalidStateError: DOM Exception 11
+FAIL 0,3,66: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65535" InvalidStateError: DOM Exception 11
+FAIL 0,3,67: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65534" InvalidStateError: DOM Exception 11
+FAIL 0,3,68: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65533" InvalidStateError: DOM Exception 11
+PASS 0,3,69: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65532"
+PASS 0,3,70: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967295"
+FAIL 0,3,71: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967296" InvalidStateError: DOM Exception 11
+FAIL 0,3,72: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967297" InvalidStateError: DOM Exception 11
+FAIL 0,3,73: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967298" InvalidStateError: DOM Exception 11
+FAIL 0,3,74: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967299" InvalidStateError: DOM Exception 11
+PASS 0,3,75: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967300"
+FAIL 0,3,76: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 0,3,77: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 0,3,78: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 0,3,79: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 0,3,80: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "3.5" InvalidStateError: DOM Exception 11
+PASS 0,3,81: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4.5"
+PASS 0,3,82: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-1.5"
+FAIL 0,3,83: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 0,3,84: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 0,3,85: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 0,3,86: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 0,3,87: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "3.5" InvalidStateError: DOM Exception 11
+PASS 0,3,88: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-73.5"
+PASS 0,3,89: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-72.5"
+PASS 0,3,90: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-71.5"
+PASS 0,3,91: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-70.5"
+PASS 0,3,92: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-69.5"
+PASS 0,3,93: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-68.5"
+FAIL 0,3,94: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "6.5536e4" InvalidStateError: DOM Exception 11
+FAIL 0,3,95: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how null InvalidStateError: DOM Exception 11
+FAIL 0,3,96: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how undefined InvalidStateError: DOM Exception 11
+FAIL 0,3,97: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how true InvalidStateError: DOM Exception 11
+FAIL 0,3,98: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how false InvalidStateError: DOM Exception 11
+FAIL 0,3,99: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "" InvalidStateError: DOM Exception 11
+FAIL 0,3,100: context range 0 [detached], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "quasit" InvalidStateError: DOM Exception 11
+FAIL 0,4,0: context range 0 [detached], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,4,1: context range 0 [detached], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,4,2: context range 0 [detached], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,4,3: context range 0 [detached], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,5,0: context range 0 [detached], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,5,1: context range 0 [detached], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,5,2: context range 0 [detached], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,5,3: context range 0 [detached], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,6,0: context range 0 [detached], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,6,1: context range 0 [detached], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,6,2: context range 0 [detached], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,6,3: context range 0 [detached], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,7,0: context range 0 [detached], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,7,1: context range 0 [detached], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,7,2: context range 0 [detached], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,7,3: context range 0 [detached], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,8,0: context range 0 [detached], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,8,1: context range 0 [detached], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,8,2: context range 0 [detached], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,8,3: context range 0 [detached], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,9,0: context range 0 [detached], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,9,1: context range 0 [detached], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,9,2: context range 0 [detached], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,9,3: context range 0 [detached], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,10,0: context range 0 [detached], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,10,1: context range 0 [detached], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,10,2: context range 0 [detached], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,10,3: context range 0 [detached], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,11,0: context range 0 [detached], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,11,1: context range 0 [detached], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,11,2: context range 0 [detached], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,11,3: context range 0 [detached], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,12,0: context range 0 [detached], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,12,1: context range 0 [detached], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,12,2: context range 0 [detached], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,12,3: context range 0 [detached], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,13,0: context range 0 [detached], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,13,1: context range 0 [detached], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,13,2: context range 0 [detached], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,13,3: context range 0 [detached], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,14,0: context range 0 [detached], argument range 14 [document.head, 1, document.head, 1], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,14,1: context range 0 [detached], argument range 14 [document.head, 1, document.head, 1], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,14,2: context range 0 [detached], argument range 14 [document.head, 1, document.head, 1], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,14,3: context range 0 [detached], argument range 14 [document.head, 1, document.head, 1], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,15,0: context range 0 [detached], argument range 15 [document.body, 4, document.body, 5], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,15,1: context range 0 [detached], argument range 15 [document.body, 4, document.body, 5], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,15,2: context range 0 [detached], argument range 15 [document.body, 4, document.body, 5], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,15,3: context range 0 [detached], argument range 15 [document.body, 4, document.body, 5], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,16,0: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,16,1: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,16,2: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,16,3: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3 InvalidStateError: DOM Exception 11
+PASS 0,16,4: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -1
+PASS 0,16,5: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4
+PASS 0,16,6: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 5
+FAIL 0,16,7: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how NaN InvalidStateError: DOM Exception 11
+FAIL 0,16,8: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -0 InvalidStateError: DOM Exception 11
+FAIL 0,16,9: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how Infinity InvalidStateError: DOM Exception 11
+FAIL 0,16,10: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -Infinity InvalidStateError: DOM Exception 11
+PASS 0,16,11: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65535
+FAIL 0,16,12: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65536 InvalidStateError: DOM Exception 11
+FAIL 0,16,13: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65537 InvalidStateError: DOM Exception 11
+FAIL 0,16,14: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65538 InvalidStateError: DOM Exception 11
+FAIL 0,16,15: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65539 InvalidStateError: DOM Exception 11
+PASS 0,16,16: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65540
+PASS 0,16,17: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65537
+FAIL 0,16,18: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65536 InvalidStateError: DOM Exception 11
+FAIL 0,16,19: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65535 InvalidStateError: DOM Exception 11
+FAIL 0,16,20: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65534 InvalidStateError: DOM Exception 11
+FAIL 0,16,21: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65533 InvalidStateError: DOM Exception 11
+PASS 0,16,22: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65532
+PASS 0,16,23: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967295
+FAIL 0,16,24: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967296 InvalidStateError: DOM Exception 11
+FAIL 0,16,25: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967297 InvalidStateError: DOM Exception 11
+FAIL 0,16,26: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967298 InvalidStateError: DOM Exception 11
+FAIL 0,16,27: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967299 InvalidStateError: DOM Exception 11
+PASS 0,16,28: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967300
+FAIL 0,16,29: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 0,16,30: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 0,16,31: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 0,16,32: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 0,16,33: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3.5 InvalidStateError: DOM Exception 11
+PASS 0,16,34: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4.5
+PASS 0,16,35: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -1.5
+FAIL 0,16,36: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 0,16,37: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 0,16,38: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 0,16,39: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 0,16,40: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3.5 InvalidStateError: DOM Exception 11
+PASS 0,16,41: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -73.5
+PASS 0,16,42: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -72.5
+PASS 0,16,43: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -71.5
+PASS 0,16,44: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -70.5
+PASS 0,16,45: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -69.5
+PASS 0,16,46: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -68.5
+FAIL 0,16,47: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0" InvalidStateError: DOM Exception 11
+FAIL 0,16,48: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "1" InvalidStateError: DOM Exception 11
+FAIL 0,16,49: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "2" InvalidStateError: DOM Exception 11
+FAIL 0,16,50: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "3" InvalidStateError: DOM Exception 11
+PASS 0,16,51: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-1"
+PASS 0,16,52: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4"
+PASS 0,16,53: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "5"
+FAIL 0,16,54: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "NaN" InvalidStateError: DOM Exception 11
+FAIL 0,16,55: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0" InvalidStateError: DOM Exception 11
+FAIL 0,16,56: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "Infinity" InvalidStateError: DOM Exception 11
+FAIL 0,16,57: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-Infinity" InvalidStateError: DOM Exception 11
+PASS 0,16,58: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65535"
+FAIL 0,16,59: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65536" InvalidStateError: DOM Exception 11
+FAIL 0,16,60: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65537" InvalidStateError: DOM Exception 11
+FAIL 0,16,61: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65538" InvalidStateError: DOM Exception 11
+FAIL 0,16,62: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65539" InvalidStateError: DOM Exception 11
+PASS 0,16,63: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65540"
+PASS 0,16,64: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65537"
+FAIL 0,16,65: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65536" InvalidStateError: DOM Exception 11
+FAIL 0,16,66: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65535" InvalidStateError: DOM Exception 11
+FAIL 0,16,67: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65534" InvalidStateError: DOM Exception 11
+FAIL 0,16,68: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65533" InvalidStateError: DOM Exception 11
+PASS 0,16,69: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65532"
+PASS 0,16,70: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967295"
+FAIL 0,16,71: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967296" InvalidStateError: DOM Exception 11
+FAIL 0,16,72: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967297" InvalidStateError: DOM Exception 11
+FAIL 0,16,73: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967298" InvalidStateError: DOM Exception 11
+FAIL 0,16,74: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967299" InvalidStateError: DOM Exception 11
+PASS 0,16,75: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967300"
+FAIL 0,16,76: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 0,16,77: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 0,16,78: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 0,16,79: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 0,16,80: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "3.5" InvalidStateError: DOM Exception 11
+PASS 0,16,81: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4.5"
+PASS 0,16,82: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-1.5"
+FAIL 0,16,83: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 0,16,84: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 0,16,85: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 0,16,86: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 0,16,87: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "3.5" InvalidStateError: DOM Exception 11
+PASS 0,16,88: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-73.5"
+PASS 0,16,89: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-72.5"
+PASS 0,16,90: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-71.5"
+PASS 0,16,91: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-70.5"
+PASS 0,16,92: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-69.5"
+PASS 0,16,93: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-68.5"
+FAIL 0,16,94: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "6.5536e4" InvalidStateError: DOM Exception 11
+FAIL 0,16,95: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how null InvalidStateError: DOM Exception 11
+FAIL 0,16,96: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how undefined InvalidStateError: DOM Exception 11
+FAIL 0,16,97: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how true InvalidStateError: DOM Exception 11
+FAIL 0,16,98: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how false InvalidStateError: DOM Exception 11
+FAIL 0,16,99: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "" InvalidStateError: DOM Exception 11
+FAIL 0,16,100: context range 0 [detached], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "quasit" InvalidStateError: DOM Exception 11
+FAIL 0,17,0: context range 0 [detached], argument range 17 [paras[0], 0, paras[0], 1], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,17,1: context range 0 [detached], argument range 17 [paras[0], 0, paras[0], 1], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,17,2: context range 0 [detached], argument range 17 [paras[0], 0, paras[0], 1], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,17,3: context range 0 [detached], argument range 17 [paras[0], 0, paras[0], 1], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,18,0: context range 0 [detached], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,18,1: context range 0 [detached], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,18,2: context range 0 [detached], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,18,3: context range 0 [detached], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,19,0: context range 0 [detached], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,19,1: context range 0 [detached], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,19,2: context range 0 [detached], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,19,3: context range 0 [detached], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,20,0: context range 0 [detached], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,20,1: context range 0 [detached], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,20,2: context range 0 [detached], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,20,3: context range 0 [detached], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,21,0: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,21,1: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,21,2: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,21,3: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3 InvalidStateError: DOM Exception 11
+PASS 0,21,4: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -1
+PASS 0,21,5: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4
+PASS 0,21,6: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 5
+FAIL 0,21,7: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how NaN InvalidStateError: DOM Exception 11
+FAIL 0,21,8: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -0 InvalidStateError: DOM Exception 11
+FAIL 0,21,9: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how Infinity InvalidStateError: DOM Exception 11
+FAIL 0,21,10: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -Infinity InvalidStateError: DOM Exception 11
+PASS 0,21,11: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65535
+FAIL 0,21,12: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65536 InvalidStateError: DOM Exception 11
+FAIL 0,21,13: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65537 InvalidStateError: DOM Exception 11
+FAIL 0,21,14: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65538 InvalidStateError: DOM Exception 11
+FAIL 0,21,15: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65539 InvalidStateError: DOM Exception 11
+PASS 0,21,16: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65540
+PASS 0,21,17: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65537
+FAIL 0,21,18: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65536 InvalidStateError: DOM Exception 11
+FAIL 0,21,19: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65535 InvalidStateError: DOM Exception 11
+FAIL 0,21,20: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65534 InvalidStateError: DOM Exception 11
+FAIL 0,21,21: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65533 InvalidStateError: DOM Exception 11
+PASS 0,21,22: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65532
+PASS 0,21,23: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967295
+FAIL 0,21,24: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967296 InvalidStateError: DOM Exception 11
+FAIL 0,21,25: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967297 InvalidStateError: DOM Exception 11
+FAIL 0,21,26: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967298 InvalidStateError: DOM Exception 11
+FAIL 0,21,27: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967299 InvalidStateError: DOM Exception 11
+PASS 0,21,28: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967300
+FAIL 0,21,29: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 0,21,30: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 0,21,31: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 0,21,32: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 0,21,33: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3.5 InvalidStateError: DOM Exception 11
+PASS 0,21,34: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4.5
+PASS 0,21,35: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -1.5
+FAIL 0,21,36: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 0,21,37: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 0,21,38: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 0,21,39: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 0,21,40: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3.5 InvalidStateError: DOM Exception 11
+PASS 0,21,41: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -73.5
+PASS 0,21,42: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -72.5
+PASS 0,21,43: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -71.5
+PASS 0,21,44: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -70.5
+PASS 0,21,45: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -69.5
+PASS 0,21,46: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -68.5
+FAIL 0,21,47: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0" InvalidStateError: DOM Exception 11
+FAIL 0,21,48: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "1" InvalidStateError: DOM Exception 11
+FAIL 0,21,49: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "2" InvalidStateError: DOM Exception 11
+FAIL 0,21,50: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "3" InvalidStateError: DOM Exception 11
+PASS 0,21,51: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-1"
+PASS 0,21,52: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4"
+PASS 0,21,53: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "5"
+FAIL 0,21,54: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "NaN" InvalidStateError: DOM Exception 11
+FAIL 0,21,55: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0" InvalidStateError: DOM Exception 11
+FAIL 0,21,56: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "Infinity" InvalidStateError: DOM Exception 11
+FAIL 0,21,57: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-Infinity" InvalidStateError: DOM Exception 11
+PASS 0,21,58: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65535"
+FAIL 0,21,59: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65536" InvalidStateError: DOM Exception 11
+FAIL 0,21,60: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65537" InvalidStateError: DOM Exception 11
+FAIL 0,21,61: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65538" InvalidStateError: DOM Exception 11
+FAIL 0,21,62: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65539" InvalidStateError: DOM Exception 11
+PASS 0,21,63: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65540"
+PASS 0,21,64: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65537"
+FAIL 0,21,65: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65536" InvalidStateError: DOM Exception 11
+FAIL 0,21,66: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65535" InvalidStateError: DOM Exception 11
+FAIL 0,21,67: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65534" InvalidStateError: DOM Exception 11
+FAIL 0,21,68: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65533" InvalidStateError: DOM Exception 11
+PASS 0,21,69: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65532"
+PASS 0,21,70: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967295"
+FAIL 0,21,71: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967296" InvalidStateError: DOM Exception 11
+FAIL 0,21,72: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967297" InvalidStateError: DOM Exception 11
+FAIL 0,21,73: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967298" InvalidStateError: DOM Exception 11
+FAIL 0,21,74: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967299" InvalidStateError: DOM Exception 11
+PASS 0,21,75: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967300"
+FAIL 0,21,76: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 0,21,77: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 0,21,78: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 0,21,79: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 0,21,80: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "3.5" InvalidStateError: DOM Exception 11
+PASS 0,21,81: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4.5"
+PASS 0,21,82: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-1.5"
+FAIL 0,21,83: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 0,21,84: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 0,21,85: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 0,21,86: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 0,21,87: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "3.5" InvalidStateError: DOM Exception 11
+PASS 0,21,88: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-73.5"
+PASS 0,21,89: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-72.5"
+PASS 0,21,90: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-71.5"
+PASS 0,21,91: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-70.5"
+PASS 0,21,92: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-69.5"
+PASS 0,21,93: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-68.5"
+FAIL 0,21,94: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "6.5536e4" InvalidStateError: DOM Exception 11
+FAIL 0,21,95: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how null InvalidStateError: DOM Exception 11
+FAIL 0,21,96: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how undefined InvalidStateError: DOM Exception 11
+FAIL 0,21,97: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how true InvalidStateError: DOM Exception 11
+FAIL 0,21,98: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how false InvalidStateError: DOM Exception 11
+FAIL 0,21,99: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "" InvalidStateError: DOM Exception 11
+FAIL 0,21,100: context range 0 [detached], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "quasit" InvalidStateError: DOM Exception 11
+FAIL 0,22,0: context range 0 [detached], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,22,1: context range 0 [detached], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,22,2: context range 0 [detached], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,22,3: context range 0 [detached], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,23,0: context range 0 [detached], argument range 23 [testDiv, 2, paras[4], 1], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,23,1: context range 0 [detached], argument range 23 [testDiv, 2, paras[4], 1], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,23,2: context range 0 [detached], argument range 23 [testDiv, 2, paras[4], 1], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,23,3: context range 0 [detached], argument range 23 [testDiv, 2, paras[4], 1], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,24,0: context range 0 [detached], argument range 24 [document, 0, document, 1], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,24,1: context range 0 [detached], argument range 24 [document, 0, document, 1], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,24,2: context range 0 [detached], argument range 24 [document, 0, document, 1], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,24,3: context range 0 [detached], argument range 24 [document, 0, document, 1], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,25,0: context range 0 [detached], argument range 25 [document, 0, document, 2], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,25,1: context range 0 [detached], argument range 25 [document, 0, document, 2], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,25,2: context range 0 [detached], argument range 25 [document, 0, document, 2], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,25,3: context range 0 [detached], argument range 25 [document, 0, document, 2], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,26,0: context range 0 [detached], argument range 26 [comment, 2, comment, 3], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,26,1: context range 0 [detached], argument range 26 [comment, 2, comment, 3], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,26,2: context range 0 [detached], argument range 26 [comment, 2, comment, 3], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,26,3: context range 0 [detached], argument range 26 [comment, 2, comment, 3], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,27,0: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,27,1: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,27,2: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,27,3: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 3 InvalidStateError: DOM Exception 11
+PASS 0,27,4: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -1
+PASS 0,27,5: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 4
+PASS 0,27,6: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 5
+FAIL 0,27,7: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how NaN InvalidStateError: DOM Exception 11
+FAIL 0,27,8: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -0 InvalidStateError: DOM Exception 11
+FAIL 0,27,9: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how Infinity InvalidStateError: DOM Exception 11
+FAIL 0,27,10: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -Infinity InvalidStateError: DOM Exception 11
+PASS 0,27,11: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 65535
+FAIL 0,27,12: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 65536 InvalidStateError: DOM Exception 11
+FAIL 0,27,13: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 65537 InvalidStateError: DOM Exception 11
+FAIL 0,27,14: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 65538 InvalidStateError: DOM Exception 11
+FAIL 0,27,15: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 65539 InvalidStateError: DOM Exception 11
+PASS 0,27,16: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 65540
+PASS 0,27,17: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -65537
+FAIL 0,27,18: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -65536 InvalidStateError: DOM Exception 11
+FAIL 0,27,19: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -65535 InvalidStateError: DOM Exception 11
+FAIL 0,27,20: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -65534 InvalidStateError: DOM Exception 11
+FAIL 0,27,21: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -65533 InvalidStateError: DOM Exception 11
+PASS 0,27,22: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -65532
+PASS 0,27,23: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 4294967295
+FAIL 0,27,24: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 4294967296 InvalidStateError: DOM Exception 11
+FAIL 0,27,25: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 4294967297 InvalidStateError: DOM Exception 11
+FAIL 0,27,26: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 4294967298 InvalidStateError: DOM Exception 11
+FAIL 0,27,27: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 4294967299 InvalidStateError: DOM Exception 11
+PASS 0,27,28: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 4294967300
+FAIL 0,27,29: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 0,27,30: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 0,27,31: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 0,27,32: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 0,27,33: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 3.5 InvalidStateError: DOM Exception 11
+PASS 0,27,34: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 4.5
+PASS 0,27,35: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -1.5
+FAIL 0,27,36: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 0,27,37: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 0,27,38: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 0,27,39: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 0,27,40: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how 3.5 InvalidStateError: DOM Exception 11
+PASS 0,27,41: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -73.5
+PASS 0,27,42: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -72.5
+PASS 0,27,43: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -71.5
+PASS 0,27,44: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -70.5
+PASS 0,27,45: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -69.5
+PASS 0,27,46: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how -68.5
+FAIL 0,27,47: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "0" InvalidStateError: DOM Exception 11
+FAIL 0,27,48: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "1" InvalidStateError: DOM Exception 11
+FAIL 0,27,49: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "2" InvalidStateError: DOM Exception 11
+FAIL 0,27,50: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "3" InvalidStateError: DOM Exception 11
+PASS 0,27,51: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-1"
+PASS 0,27,52: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "4"
+PASS 0,27,53: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "5"
+FAIL 0,27,54: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "NaN" InvalidStateError: DOM Exception 11
+FAIL 0,27,55: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "0" InvalidStateError: DOM Exception 11
+FAIL 0,27,56: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "Infinity" InvalidStateError: DOM Exception 11
+FAIL 0,27,57: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-Infinity" InvalidStateError: DOM Exception 11
+PASS 0,27,58: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "65535"
+FAIL 0,27,59: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "65536" InvalidStateError: DOM Exception 11
+FAIL 0,27,60: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "65537" InvalidStateError: DOM Exception 11
+FAIL 0,27,61: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "65538" InvalidStateError: DOM Exception 11
+FAIL 0,27,62: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "65539" InvalidStateError: DOM Exception 11
+PASS 0,27,63: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "65540"
+PASS 0,27,64: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-65537"
+FAIL 0,27,65: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-65536" InvalidStateError: DOM Exception 11
+FAIL 0,27,66: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-65535" InvalidStateError: DOM Exception 11
+FAIL 0,27,67: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-65534" InvalidStateError: DOM Exception 11
+FAIL 0,27,68: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-65533" InvalidStateError: DOM Exception 11
+PASS 0,27,69: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-65532"
+PASS 0,27,70: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "4294967295"
+FAIL 0,27,71: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "4294967296" InvalidStateError: DOM Exception 11
+FAIL 0,27,72: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "4294967297" InvalidStateError: DOM Exception 11
+FAIL 0,27,73: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "4294967298" InvalidStateError: DOM Exception 11
+FAIL 0,27,74: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "4294967299" InvalidStateError: DOM Exception 11
+PASS 0,27,75: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "4294967300"
+FAIL 0,27,76: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 0,27,77: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 0,27,78: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 0,27,79: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 0,27,80: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "3.5" InvalidStateError: DOM Exception 11
+PASS 0,27,81: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "4.5"
+PASS 0,27,82: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-1.5"
+FAIL 0,27,83: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 0,27,84: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 0,27,85: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 0,27,86: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 0,27,87: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "3.5" InvalidStateError: DOM Exception 11
+PASS 0,27,88: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-73.5"
+PASS 0,27,89: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-72.5"
+PASS 0,27,90: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-71.5"
+PASS 0,27,91: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-70.5"
+PASS 0,27,92: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-69.5"
+PASS 0,27,93: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "-68.5"
+FAIL 0,27,94: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "6.5536e4" InvalidStateError: DOM Exception 11
+FAIL 0,27,95: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how null InvalidStateError: DOM Exception 11
+FAIL 0,27,96: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how undefined InvalidStateError: DOM Exception 11
+FAIL 0,27,97: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how true InvalidStateError: DOM Exception 11
+FAIL 0,27,98: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how false InvalidStateError: DOM Exception 11
+FAIL 0,27,99: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "" InvalidStateError: DOM Exception 11
+FAIL 0,27,100: context range 0 [detached], argument range 27 [testDiv, 0, comment, 5], how "quasit" InvalidStateError: DOM Exception 11
+FAIL 0,28,0: context range 0 [detached], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,28,1: context range 0 [detached], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,28,2: context range 0 [detached], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,28,3: context range 0 [detached], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,29,0: context range 0 [detached], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,29,1: context range 0 [detached], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,29,2: context range 0 [detached], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,29,3: context range 0 [detached], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,30,0: context range 0 [detached], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,30,1: context range 0 [detached], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,30,2: context range 0 [detached], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,30,3: context range 0 [detached], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,31,0: context range 0 [detached], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,31,1: context range 0 [detached], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,31,2: context range 0 [detached], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,31,3: context range 0 [detached], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,32,0: context range 0 [detached], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,32,1: context range 0 [detached], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,32,2: context range 0 [detached], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,32,3: context range 0 [detached], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,33,0: context range 0 [detached], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,33,1: context range 0 [detached], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,33,2: context range 0 [detached], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,33,3: context range 0 [detached], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,34,0: context range 0 [detached], argument range 34 [detachedComment, 3, detachedComment, 4], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,34,1: context range 0 [detached], argument range 34 [detachedComment, 3, detachedComment, 4], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,34,2: context range 0 [detached], argument range 34 [detachedComment, 3, detachedComment, 4], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,34,3: context range 0 [detached], argument range 34 [detachedComment, 3, detachedComment, 4], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,35,0: context range 0 [detached], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,35,1: context range 0 [detached], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,35,2: context range 0 [detached], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,35,3: context range 0 [detached], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,36,0: context range 0 [detached], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,36,1: context range 0 [detached], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,36,2: context range 0 [detached], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,36,3: context range 0 [detached], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,37,0: context range 0 [detached], argument range 37 [docfrag, 0, docfrag, 0], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,37,1: context range 0 [detached], argument range 37 [docfrag, 0, docfrag, 0], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,37,2: context range 0 [detached], argument range 37 [docfrag, 0, docfrag, 0], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,37,3: context range 0 [detached], argument range 37 [docfrag, 0, docfrag, 0], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,38,0: context range 0 [detached], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0 InvalidStateError: DOM Exception 11
+FAIL 0,38,1: context range 0 [detached], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1 InvalidStateError: DOM Exception 11
+FAIL 0,38,2: context range 0 [detached], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2 InvalidStateError: DOM Exception 11
+FAIL 0,38,3: context range 0 [detached], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3 InvalidStateError: DOM Exception 11
+FAIL 0,39,0: context range 0 [detached], argument range same as first range, how 0 InvalidStateError: DOM Exception 11
+FAIL 0,39,1: context range 0 [detached], argument range same as first range, how 1 InvalidStateError: DOM Exception 11
+FAIL 0,39,2: context range 0 [detached], argument range same as first range, how 2 InvalidStateError: DOM Exception 11
+FAIL 0,39,3: context range 0 [detached], argument range same as first range, how 3 InvalidStateError: DOM Exception 11
+FAIL 1,0,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 1,0,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 1,0,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 1,0,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 1,1,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 1,1,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 1,1,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 1,1,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 1,2,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 1,2,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 1,2,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 1,2,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 1,3,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 1,3,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 1,3,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 1,3,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 1,4,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 1,4,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 1,4,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 1,4,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 1,5,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 1,5,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 1,5,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 1,5,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 1,6,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 1,6,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 1,6,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 1,6,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 1,7,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 1,7,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 1,7,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 1,7,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 1,8,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 1,8,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 1,8,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 1,8,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 1,9,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 1,9,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 1,9,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 1,9,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 1,10,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 1,10,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 1,10,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 1,10,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 1,11,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 1,11,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 1,11,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 1,11,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 1,12,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 1,12,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 1,12,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 1,12,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 1,13,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 1,13,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 1,13,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 1,13,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 1,14,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 1,14,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 1,14,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 1,14,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 1,15,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 1,15,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 1,15,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 1,15,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 1,16,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 1,16,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 1,16,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 1,16,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 1,17,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 1,17,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 1,17,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 1,17,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 1,18,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 1,18,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 1,18,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 1,18,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 1,19,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 1,19,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 1,19,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 1,19,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 1,20,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 1,20,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 1,20,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 1,20,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 1,21,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 1,21,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 1,21,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 1,21,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 1,22,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 1,22,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 1,22,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 1,22,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 1,23,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 1,23,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 1,23,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 1,23,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 1,24,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 24 [document, 0, document, 1], how 0
+PASS 1,24,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 24 [document, 0, document, 1], how 1
+PASS 1,24,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 24 [document, 0, document, 1], how 2
+PASS 1,24,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 24 [document, 0, document, 1], how 3
+PASS 1,25,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 25 [document, 0, document, 2], how 0
+PASS 1,25,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 25 [document, 0, document, 2], how 1
+PASS 1,25,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 25 [document, 0, document, 2], how 2
+PASS 1,25,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 25 [document, 0, document, 2], how 3
+PASS 1,26,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 26 [comment, 2, comment, 3], how 0
+PASS 1,26,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 26 [comment, 2, comment, 3], how 1
+PASS 1,26,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 26 [comment, 2, comment, 3], how 2
+PASS 1,26,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 26 [comment, 2, comment, 3], how 3
+PASS 1,27,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 1,27,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 1,27,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 1,27,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 1,28,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 1,28,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 1,28,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 1,28,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 1,29,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 1,29,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 1,29,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 1,29,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 1,30,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 1,30,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 1,30,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 1,30,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 1,31,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 1,31,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 1,31,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 1,31,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 1,32,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 1,32,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 1,32,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 1,32,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 1,33,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 1,33,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 1,33,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 1,33,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 1,34,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 1,34,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 1,34,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 1,34,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 1,35,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 1,35,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 1,35,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 1,35,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 1,36,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 1,36,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 1,36,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 1,36,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 1,37,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 1,37,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 1,37,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 1,37,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 1,38,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 1,38,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 1,38,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 1,38,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 1,39,0: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range same as first range, how 0
+PASS 1,39,1: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range same as first range, how 1
+PASS 1,39,2: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range same as first range, how 2
+PASS 1,39,3: context range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], argument range same as first range, how 3
+FAIL 2,0,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 2,0,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 2,0,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 2,0,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 2,1,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 2,1,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 2,1,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 2,1,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 2,2,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 2,2,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 2,2,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 2,2,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 2,3,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 2,3,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 2,3,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 2,3,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 2,4,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 2,4,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 2,4,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 2,4,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 2,5,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 2,5,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 2,5,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 2,5,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 2,6,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 2,6,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 2,6,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 2,6,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 2,7,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 2,7,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 2,7,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 2,7,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 2,8,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 2,8,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 2,8,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 2,8,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 2,9,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 2,9,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 2,9,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 2,9,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 2,10,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 2,10,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 2,10,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 2,10,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 2,11,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 2,11,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 2,11,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 2,11,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 2,12,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 2,12,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 2,12,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 2,12,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 2,13,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 2,13,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 2,13,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 2,13,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 2,14,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 2,14,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 2,14,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 2,14,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 2,15,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 2,15,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 2,15,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 2,15,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 2,16,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 2,16,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 2,16,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 2,16,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 2,17,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 2,17,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 2,17,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 2,17,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 2,18,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 2,18,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 2,18,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 2,18,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 2,19,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 2,19,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 2,19,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 2,19,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 2,20,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 2,20,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 2,20,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 2,20,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 2,21,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 2,21,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 2,21,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 2,21,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 2,22,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 2,22,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 2,22,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 2,22,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 2,23,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 2,23,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 2,23,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 2,23,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 2,24,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 24 [document, 0, document, 1], how 0
+PASS 2,24,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 24 [document, 0, document, 1], how 1
+PASS 2,24,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 24 [document, 0, document, 1], how 2
+PASS 2,24,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 24 [document, 0, document, 1], how 3
+PASS 2,25,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 25 [document, 0, document, 2], how 0
+PASS 2,25,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 25 [document, 0, document, 2], how 1
+PASS 2,25,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 25 [document, 0, document, 2], how 2
+PASS 2,25,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 25 [document, 0, document, 2], how 3
+PASS 2,26,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 26 [comment, 2, comment, 3], how 0
+PASS 2,26,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 26 [comment, 2, comment, 3], how 1
+PASS 2,26,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 26 [comment, 2, comment, 3], how 2
+PASS 2,26,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 26 [comment, 2, comment, 3], how 3
+PASS 2,27,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 2,27,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 2,27,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 2,27,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 2,28,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 2,28,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 2,28,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 2,28,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 2,29,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 2,29,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 2,29,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 2,29,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 2,30,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 2,30,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 2,30,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 2,30,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 2,31,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 2,31,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 2,31,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 2,31,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 2,32,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 2,32,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 2,32,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 2,32,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 2,33,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 2,33,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 2,33,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 2,33,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 2,34,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 2,34,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 2,34,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 2,34,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 2,35,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 2,35,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 2,35,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 2,35,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 2,36,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 2,36,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 2,36,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 2,36,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 2,37,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 2,37,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 2,37,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 2,37,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 2,38,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 2,38,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 2,38,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 2,38,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 2,39,0: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range same as first range, how 0
+PASS 2,39,1: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range same as first range, how 1
+PASS 2,39,2: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range same as first range, how 2
+PASS 2,39,3: context range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], argument range same as first range, how 3
+FAIL 3,0,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 3,0,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 3,0,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 3,0,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 3,0,4: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -1
+PASS 3,0,5: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 4
+PASS 3,0,6: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 5
+FAIL 3,0,7: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how NaN InvalidStateError: DOM Exception 11
+FAIL 3,0,8: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -0 InvalidStateError: DOM Exception 11
+FAIL 3,0,9: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how Infinity InvalidStateError: DOM Exception 11
+FAIL 3,0,10: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -Infinity InvalidStateError: DOM Exception 11
+PASS 3,0,11: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 65535
+FAIL 3,0,12: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 65536 InvalidStateError: DOM Exception 11
+FAIL 3,0,13: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 65537 InvalidStateError: DOM Exception 11
+FAIL 3,0,14: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 65538 InvalidStateError: DOM Exception 11
+FAIL 3,0,15: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 65539 InvalidStateError: DOM Exception 11
+PASS 3,0,16: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 65540
+PASS 3,0,17: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -65537
+FAIL 3,0,18: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -65536 InvalidStateError: DOM Exception 11
+FAIL 3,0,19: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -65535 InvalidStateError: DOM Exception 11
+FAIL 3,0,20: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -65534 InvalidStateError: DOM Exception 11
+FAIL 3,0,21: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -65533 InvalidStateError: DOM Exception 11
+PASS 3,0,22: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -65532
+PASS 3,0,23: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 4294967295
+FAIL 3,0,24: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 4294967296 InvalidStateError: DOM Exception 11
+FAIL 3,0,25: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 4294967297 InvalidStateError: DOM Exception 11
+FAIL 3,0,26: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 4294967298 InvalidStateError: DOM Exception 11
+FAIL 3,0,27: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 4294967299 InvalidStateError: DOM Exception 11
+PASS 3,0,28: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 4294967300
+FAIL 3,0,29: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 3,0,30: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 3,0,31: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 3,0,32: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 3,0,33: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 3.5 InvalidStateError: DOM Exception 11
+PASS 3,0,34: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 4.5
+PASS 3,0,35: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -1.5
+FAIL 3,0,36: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 3,0,37: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 3,0,38: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 3,0,39: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 3,0,40: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how 3.5 InvalidStateError: DOM Exception 11
+PASS 3,0,41: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -73.5
+PASS 3,0,42: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -72.5
+PASS 3,0,43: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -71.5
+PASS 3,0,44: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -70.5
+PASS 3,0,45: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -69.5
+PASS 3,0,46: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how -68.5
+FAIL 3,0,47: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "0" InvalidStateError: DOM Exception 11
+FAIL 3,0,48: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "1" InvalidStateError: DOM Exception 11
+FAIL 3,0,49: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "2" InvalidStateError: DOM Exception 11
+FAIL 3,0,50: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "3" InvalidStateError: DOM Exception 11
+PASS 3,0,51: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-1"
+PASS 3,0,52: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "4"
+PASS 3,0,53: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "5"
+FAIL 3,0,54: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "NaN" InvalidStateError: DOM Exception 11
+FAIL 3,0,55: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "0" InvalidStateError: DOM Exception 11
+FAIL 3,0,56: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "Infinity" InvalidStateError: DOM Exception 11
+FAIL 3,0,57: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-Infinity" InvalidStateError: DOM Exception 11
+PASS 3,0,58: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "65535"
+FAIL 3,0,59: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "65536" InvalidStateError: DOM Exception 11
+FAIL 3,0,60: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "65537" InvalidStateError: DOM Exception 11
+FAIL 3,0,61: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "65538" InvalidStateError: DOM Exception 11
+FAIL 3,0,62: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "65539" InvalidStateError: DOM Exception 11
+PASS 3,0,63: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "65540"
+PASS 3,0,64: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-65537"
+FAIL 3,0,65: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-65536" InvalidStateError: DOM Exception 11
+FAIL 3,0,66: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-65535" InvalidStateError: DOM Exception 11
+FAIL 3,0,67: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-65534" InvalidStateError: DOM Exception 11
+FAIL 3,0,68: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-65533" InvalidStateError: DOM Exception 11
+PASS 3,0,69: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-65532"
+PASS 3,0,70: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "4294967295"
+FAIL 3,0,71: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "4294967296" InvalidStateError: DOM Exception 11
+FAIL 3,0,72: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "4294967297" InvalidStateError: DOM Exception 11
+FAIL 3,0,73: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "4294967298" InvalidStateError: DOM Exception 11
+FAIL 3,0,74: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "4294967299" InvalidStateError: DOM Exception 11
+PASS 3,0,75: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "4294967300"
+FAIL 3,0,76: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 3,0,77: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 3,0,78: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 3,0,79: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 3,0,80: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "3.5" InvalidStateError: DOM Exception 11
+PASS 3,0,81: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "4.5"
+PASS 3,0,82: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-1.5"
+FAIL 3,0,83: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 3,0,84: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 3,0,85: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 3,0,86: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 3,0,87: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "3.5" InvalidStateError: DOM Exception 11
+PASS 3,0,88: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-73.5"
+PASS 3,0,89: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-72.5"
+PASS 3,0,90: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-71.5"
+PASS 3,0,91: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-70.5"
+PASS 3,0,92: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-69.5"
+PASS 3,0,93: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "-68.5"
+FAIL 3,0,94: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "6.5536e4" InvalidStateError: DOM Exception 11
+FAIL 3,0,95: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how null InvalidStateError: DOM Exception 11
+FAIL 3,0,96: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how undefined InvalidStateError: DOM Exception 11
+FAIL 3,0,97: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how true InvalidStateError: DOM Exception 11
+FAIL 3,0,98: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how false InvalidStateError: DOM Exception 11
+FAIL 3,0,99: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "" InvalidStateError: DOM Exception 11
+FAIL 3,0,100: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 0 [detached], how "quasit" InvalidStateError: DOM Exception 11
+PASS 3,1,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 3,1,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 3,1,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 3,1,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 3,2,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 3,2,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 3,2,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 3,2,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 3,3,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 3,3,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 3,3,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 3,3,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 3,3,4: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -1
+PASS 3,3,5: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4
+PASS 3,3,6: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 5
+PASS 3,3,7: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how NaN
+PASS 3,3,8: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -0
+PASS 3,3,9: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how Infinity
+PASS 3,3,10: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -Infinity
+PASS 3,3,11: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65535
+PASS 3,3,12: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65536
+PASS 3,3,13: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65537
+PASS 3,3,14: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65538
+PASS 3,3,15: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65539
+PASS 3,3,16: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65540
+PASS 3,3,17: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65537
+PASS 3,3,18: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65536
+PASS 3,3,19: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65535
+PASS 3,3,20: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65534
+PASS 3,3,21: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65533
+PASS 3,3,22: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65532
+PASS 3,3,23: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967295
+PASS 3,3,24: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967296
+PASS 3,3,25: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967297
+PASS 3,3,26: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967298
+PASS 3,3,27: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967299
+PASS 3,3,28: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967300
+PASS 3,3,29: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -0.5
+PASS 3,3,30: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0.5
+PASS 3,3,31: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1.5
+PASS 3,3,32: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2.5
+PASS 3,3,33: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3.5
+PASS 3,3,34: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4.5
+PASS 3,3,35: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -1.5
+PASS 3,3,36: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -0.5
+PASS 3,3,37: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0.5
+PASS 3,3,38: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1.5
+PASS 3,3,39: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2.5
+PASS 3,3,40: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3.5
+PASS 3,3,41: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -73.5
+PASS 3,3,42: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -72.5
+PASS 3,3,43: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -71.5
+PASS 3,3,44: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -70.5
+PASS 3,3,45: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -69.5
+PASS 3,3,46: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -68.5
+PASS 3,3,47: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0"
+PASS 3,3,48: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "1"
+PASS 3,3,49: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "2"
+PASS 3,3,50: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "3"
+PASS 3,3,51: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-1"
+PASS 3,3,52: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4"
+PASS 3,3,53: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "5"
+PASS 3,3,54: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "NaN"
+PASS 3,3,55: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0"
+PASS 3,3,56: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "Infinity"
+PASS 3,3,57: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-Infinity"
+PASS 3,3,58: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65535"
+PASS 3,3,59: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65536"
+PASS 3,3,60: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65537"
+PASS 3,3,61: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65538"
+PASS 3,3,62: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65539"
+PASS 3,3,63: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65540"
+PASS 3,3,64: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65537"
+PASS 3,3,65: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65536"
+PASS 3,3,66: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65535"
+PASS 3,3,67: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65534"
+PASS 3,3,68: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65533"
+PASS 3,3,69: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65532"
+PASS 3,3,70: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967295"
+PASS 3,3,71: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967296"
+PASS 3,3,72: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967297"
+PASS 3,3,73: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967298"
+PASS 3,3,74: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967299"
+PASS 3,3,75: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967300"
+PASS 3,3,76: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-0.5"
+PASS 3,3,77: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0.5"
+PASS 3,3,78: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "1.5"
+PASS 3,3,79: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "2.5"
+PASS 3,3,80: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "3.5"
+PASS 3,3,81: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4.5"
+PASS 3,3,82: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-1.5"
+PASS 3,3,83: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-0.5"
+PASS 3,3,84: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0.5"
+PASS 3,3,85: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "1.5"
+PASS 3,3,86: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "2.5"
+PASS 3,3,87: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "3.5"
+PASS 3,3,88: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-73.5"
+PASS 3,3,89: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-72.5"
+PASS 3,3,90: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-71.5"
+PASS 3,3,91: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-70.5"
+PASS 3,3,92: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-69.5"
+PASS 3,3,93: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-68.5"
+PASS 3,3,94: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "6.5536e4"
+PASS 3,3,95: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how null
+PASS 3,3,96: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how undefined
+PASS 3,3,97: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how true
+PASS 3,3,98: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how false
+PASS 3,3,99: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how ""
+PASS 3,3,100: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "quasit"
+PASS 3,4,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 3,4,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 3,4,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 3,4,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 3,5,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 3,5,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 3,5,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 3,5,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 3,6,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 3,6,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 3,6,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 3,6,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 3,7,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 3,7,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 3,7,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 3,7,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 3,8,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 3,8,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 3,8,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 3,8,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 3,9,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 3,9,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 3,9,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 3,9,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 3,10,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 3,10,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 3,10,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 3,10,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 3,11,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 3,11,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 3,11,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 3,11,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 3,12,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 3,12,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 3,12,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 3,12,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 3,13,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 3,13,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 3,13,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 3,13,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 3,14,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 3,14,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 3,14,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 3,14,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 3,15,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 3,15,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 3,15,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 3,15,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 3,16,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 3,16,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 3,16,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 3,16,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 3,16,4: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -1
+PASS 3,16,5: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4
+PASS 3,16,6: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 5
+PASS 3,16,7: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how NaN
+PASS 3,16,8: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -0
+PASS 3,16,9: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how Infinity
+PASS 3,16,10: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -Infinity
+PASS 3,16,11: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65535
+PASS 3,16,12: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65536
+PASS 3,16,13: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65537
+PASS 3,16,14: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65538
+PASS 3,16,15: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65539
+PASS 3,16,16: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65540
+PASS 3,16,17: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65537
+PASS 3,16,18: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65536
+PASS 3,16,19: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65535
+PASS 3,16,20: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65534
+PASS 3,16,21: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65533
+PASS 3,16,22: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65532
+PASS 3,16,23: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967295
+PASS 3,16,24: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967296
+PASS 3,16,25: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967297
+PASS 3,16,26: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967298
+PASS 3,16,27: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967299
+PASS 3,16,28: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967300
+PASS 3,16,29: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -0.5
+PASS 3,16,30: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0.5
+PASS 3,16,31: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1.5
+PASS 3,16,32: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2.5
+PASS 3,16,33: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3.5
+PASS 3,16,34: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4.5
+PASS 3,16,35: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -1.5
+PASS 3,16,36: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -0.5
+PASS 3,16,37: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0.5
+PASS 3,16,38: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1.5
+PASS 3,16,39: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2.5
+PASS 3,16,40: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3.5
+PASS 3,16,41: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -73.5
+PASS 3,16,42: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -72.5
+PASS 3,16,43: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -71.5
+PASS 3,16,44: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -70.5
+PASS 3,16,45: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -69.5
+PASS 3,16,46: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -68.5
+PASS 3,16,47: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0"
+PASS 3,16,48: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "1"
+PASS 3,16,49: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "2"
+PASS 3,16,50: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "3"
+PASS 3,16,51: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-1"
+PASS 3,16,52: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4"
+PASS 3,16,53: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "5"
+PASS 3,16,54: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "NaN"
+PASS 3,16,55: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0"
+PASS 3,16,56: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "Infinity"
+PASS 3,16,57: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-Infinity"
+PASS 3,16,58: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65535"
+PASS 3,16,59: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65536"
+PASS 3,16,60: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65537"
+PASS 3,16,61: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65538"
+PASS 3,16,62: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65539"
+PASS 3,16,63: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65540"
+PASS 3,16,64: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65537"
+PASS 3,16,65: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65536"
+PASS 3,16,66: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65535"
+PASS 3,16,67: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65534"
+PASS 3,16,68: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65533"
+PASS 3,16,69: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65532"
+PASS 3,16,70: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967295"
+PASS 3,16,71: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967296"
+PASS 3,16,72: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967297"
+PASS 3,16,73: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967298"
+PASS 3,16,74: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967299"
+PASS 3,16,75: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967300"
+PASS 3,16,76: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-0.5"
+PASS 3,16,77: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0.5"
+PASS 3,16,78: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "1.5"
+PASS 3,16,79: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "2.5"
+PASS 3,16,80: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "3.5"
+PASS 3,16,81: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4.5"
+PASS 3,16,82: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-1.5"
+PASS 3,16,83: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-0.5"
+PASS 3,16,84: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0.5"
+PASS 3,16,85: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "1.5"
+PASS 3,16,86: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "2.5"
+PASS 3,16,87: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "3.5"
+PASS 3,16,88: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-73.5"
+PASS 3,16,89: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-72.5"
+PASS 3,16,90: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-71.5"
+PASS 3,16,91: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-70.5"
+PASS 3,16,92: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-69.5"
+PASS 3,16,93: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-68.5"
+PASS 3,16,94: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "6.5536e4"
+PASS 3,16,95: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how null
+PASS 3,16,96: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how undefined
+PASS 3,16,97: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how true
+PASS 3,16,98: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how false
+PASS 3,16,99: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how ""
+PASS 3,16,100: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "quasit"
+PASS 3,17,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 3,17,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 3,17,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 3,17,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 3,18,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 3,18,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 3,18,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 3,18,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 3,19,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 3,19,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 3,19,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 3,19,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 3,20,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 3,20,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 3,20,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 3,20,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 3,21,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 3,21,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 3,21,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 3,21,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 3,21,4: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -1
+PASS 3,21,5: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4
+PASS 3,21,6: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 5
+PASS 3,21,7: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how NaN
+PASS 3,21,8: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -0
+PASS 3,21,9: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how Infinity
+PASS 3,21,10: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -Infinity
+PASS 3,21,11: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65535
+PASS 3,21,12: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65536
+PASS 3,21,13: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65537
+PASS 3,21,14: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65538
+PASS 3,21,15: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65539
+PASS 3,21,16: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65540
+PASS 3,21,17: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65537
+PASS 3,21,18: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65536
+PASS 3,21,19: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65535
+PASS 3,21,20: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65534
+PASS 3,21,21: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65533
+PASS 3,21,22: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65532
+PASS 3,21,23: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967295
+PASS 3,21,24: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967296
+PASS 3,21,25: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967297
+PASS 3,21,26: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967298
+PASS 3,21,27: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967299
+PASS 3,21,28: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967300
+PASS 3,21,29: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -0.5
+PASS 3,21,30: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0.5
+PASS 3,21,31: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1.5
+PASS 3,21,32: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2.5
+PASS 3,21,33: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3.5
+PASS 3,21,34: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4.5
+PASS 3,21,35: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -1.5
+PASS 3,21,36: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -0.5
+PASS 3,21,37: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0.5
+PASS 3,21,38: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1.5
+PASS 3,21,39: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2.5
+PASS 3,21,40: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3.5
+PASS 3,21,41: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -73.5
+PASS 3,21,42: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -72.5
+PASS 3,21,43: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -71.5
+PASS 3,21,44: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -70.5
+PASS 3,21,45: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -69.5
+PASS 3,21,46: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -68.5
+PASS 3,21,47: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0"
+PASS 3,21,48: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "1"
+PASS 3,21,49: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "2"
+PASS 3,21,50: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "3"
+PASS 3,21,51: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-1"
+PASS 3,21,52: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4"
+PASS 3,21,53: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "5"
+PASS 3,21,54: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "NaN"
+PASS 3,21,55: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0"
+PASS 3,21,56: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "Infinity"
+PASS 3,21,57: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-Infinity"
+PASS 3,21,58: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65535"
+PASS 3,21,59: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65536"
+PASS 3,21,60: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65537"
+PASS 3,21,61: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65538"
+PASS 3,21,62: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65539"
+PASS 3,21,63: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65540"
+PASS 3,21,64: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65537"
+PASS 3,21,65: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65536"
+PASS 3,21,66: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65535"
+PASS 3,21,67: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65534"
+PASS 3,21,68: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65533"
+PASS 3,21,69: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65532"
+PASS 3,21,70: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967295"
+PASS 3,21,71: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967296"
+PASS 3,21,72: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967297"
+PASS 3,21,73: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967298"
+PASS 3,21,74: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967299"
+PASS 3,21,75: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967300"
+PASS 3,21,76: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-0.5"
+PASS 3,21,77: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0.5"
+PASS 3,21,78: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "1.5"
+PASS 3,21,79: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "2.5"
+PASS 3,21,80: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "3.5"
+PASS 3,21,81: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4.5"
+PASS 3,21,82: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-1.5"
+PASS 3,21,83: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-0.5"
+PASS 3,21,84: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0.5"
+PASS 3,21,85: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "1.5"
+PASS 3,21,86: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "2.5"
+PASS 3,21,87: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "3.5"
+PASS 3,21,88: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-73.5"
+PASS 3,21,89: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-72.5"
+PASS 3,21,90: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-71.5"
+PASS 3,21,91: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-70.5"
+PASS 3,21,92: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-69.5"
+PASS 3,21,93: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-68.5"
+PASS 3,21,94: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "6.5536e4"
+PASS 3,21,95: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how null
+PASS 3,21,96: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how undefined
+PASS 3,21,97: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how true
+PASS 3,21,98: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how false
+PASS 3,21,99: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how ""
+PASS 3,21,100: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "quasit"
+PASS 3,22,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 3,22,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 3,22,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 3,22,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 3,23,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 3,23,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 3,23,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 3,23,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 3,24,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 24 [document, 0, document, 1], how 0
+PASS 3,24,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 24 [document, 0, document, 1], how 1
+PASS 3,24,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 24 [document, 0, document, 1], how 2
+PASS 3,24,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 24 [document, 0, document, 1], how 3
+PASS 3,25,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 25 [document, 0, document, 2], how 0
+PASS 3,25,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 25 [document, 0, document, 2], how 1
+PASS 3,25,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 25 [document, 0, document, 2], how 2
+PASS 3,25,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 25 [document, 0, document, 2], how 3
+PASS 3,26,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 26 [comment, 2, comment, 3], how 0
+PASS 3,26,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 26 [comment, 2, comment, 3], how 1
+PASS 3,26,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 26 [comment, 2, comment, 3], how 2
+PASS 3,26,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 26 [comment, 2, comment, 3], how 3
+PASS 3,27,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 3,27,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 3,27,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 3,27,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 3,27,4: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -1
+PASS 3,27,5: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 4
+PASS 3,27,6: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 5
+PASS 3,27,7: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how NaN
+PASS 3,27,8: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -0
+PASS 3,27,9: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how Infinity
+PASS 3,27,10: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -Infinity
+PASS 3,27,11: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 65535
+PASS 3,27,12: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 65536
+PASS 3,27,13: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 65537
+PASS 3,27,14: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 65538
+PASS 3,27,15: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 65539
+PASS 3,27,16: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 65540
+PASS 3,27,17: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -65537
+PASS 3,27,18: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -65536
+PASS 3,27,19: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -65535
+PASS 3,27,20: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -65534
+PASS 3,27,21: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -65533
+PASS 3,27,22: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -65532
+PASS 3,27,23: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 4294967295
+PASS 3,27,24: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 4294967296
+PASS 3,27,25: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 4294967297
+PASS 3,27,26: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 4294967298
+PASS 3,27,27: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 4294967299
+PASS 3,27,28: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 4294967300
+PASS 3,27,29: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -0.5
+PASS 3,27,30: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 0.5
+PASS 3,27,31: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 1.5
+PASS 3,27,32: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 2.5
+PASS 3,27,33: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 3.5
+PASS 3,27,34: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 4.5
+PASS 3,27,35: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -1.5
+PASS 3,27,36: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -0.5
+PASS 3,27,37: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 0.5
+PASS 3,27,38: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 1.5
+PASS 3,27,39: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 2.5
+PASS 3,27,40: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 3.5
+PASS 3,27,41: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -73.5
+PASS 3,27,42: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -72.5
+PASS 3,27,43: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -71.5
+PASS 3,27,44: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -70.5
+PASS 3,27,45: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -69.5
+PASS 3,27,46: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how -68.5
+PASS 3,27,47: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "0"
+PASS 3,27,48: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "1"
+PASS 3,27,49: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "2"
+PASS 3,27,50: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "3"
+PASS 3,27,51: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-1"
+PASS 3,27,52: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "4"
+PASS 3,27,53: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "5"
+PASS 3,27,54: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "NaN"
+PASS 3,27,55: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "0"
+PASS 3,27,56: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "Infinity"
+PASS 3,27,57: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-Infinity"
+PASS 3,27,58: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "65535"
+PASS 3,27,59: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "65536"
+PASS 3,27,60: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "65537"
+PASS 3,27,61: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "65538"
+PASS 3,27,62: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "65539"
+PASS 3,27,63: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "65540"
+PASS 3,27,64: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-65537"
+PASS 3,27,65: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-65536"
+PASS 3,27,66: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-65535"
+PASS 3,27,67: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-65534"
+PASS 3,27,68: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-65533"
+PASS 3,27,69: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-65532"
+PASS 3,27,70: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "4294967295"
+PASS 3,27,71: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "4294967296"
+PASS 3,27,72: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "4294967297"
+PASS 3,27,73: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "4294967298"
+PASS 3,27,74: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "4294967299"
+PASS 3,27,75: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "4294967300"
+PASS 3,27,76: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-0.5"
+PASS 3,27,77: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "0.5"
+PASS 3,27,78: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "1.5"
+PASS 3,27,79: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "2.5"
+PASS 3,27,80: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "3.5"
+PASS 3,27,81: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "4.5"
+PASS 3,27,82: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-1.5"
+PASS 3,27,83: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-0.5"
+PASS 3,27,84: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "0.5"
+PASS 3,27,85: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "1.5"
+PASS 3,27,86: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "2.5"
+PASS 3,27,87: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "3.5"
+PASS 3,27,88: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-73.5"
+PASS 3,27,89: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-72.5"
+PASS 3,27,90: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-71.5"
+PASS 3,27,91: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-70.5"
+PASS 3,27,92: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-69.5"
+PASS 3,27,93: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "-68.5"
+PASS 3,27,94: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "6.5536e4"
+PASS 3,27,95: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how null
+PASS 3,27,96: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how undefined
+PASS 3,27,97: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how true
+PASS 3,27,98: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how false
+PASS 3,27,99: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how ""
+PASS 3,27,100: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how "quasit"
+PASS 3,28,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 3,28,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 3,28,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 3,28,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 3,29,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 3,29,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 3,29,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 3,29,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 3,30,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 3,30,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 3,30,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 3,30,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 3,31,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 3,31,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 3,31,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 3,31,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 3,32,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 3,32,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 3,32,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 3,32,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 3,33,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 3,33,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 3,33,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 3,33,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 3,34,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 3,34,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 3,34,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 3,34,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 3,35,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 3,35,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 3,35,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 3,35,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 3,36,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 3,36,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 3,36,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 3,36,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 3,37,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 3,37,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 3,37,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 3,37,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 3,38,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 3,38,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 3,38,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 3,38,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 3,39,0: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range same as first range, how 0
+PASS 3,39,1: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range same as first range, how 1
+PASS 3,39,2: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range same as first range, how 2
+PASS 3,39,3: context range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], argument range same as first range, how 3
+FAIL 4,0,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 4,0,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 4,0,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 4,0,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 4,1,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 4,1,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 4,1,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 4,1,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 4,2,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 4,2,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 4,2,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 4,2,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 4,3,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 4,3,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 4,3,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 4,3,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 4,4,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 4,4,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 4,4,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 4,4,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 4,5,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 4,5,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 4,5,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 4,5,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 4,6,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 4,6,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 4,6,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 4,6,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 4,7,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 4,7,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 4,7,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 4,7,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 4,8,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 4,8,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 4,8,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 4,8,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 4,9,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 4,9,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 4,9,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 4,9,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 4,10,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 4,10,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 4,10,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 4,10,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 4,11,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 4,11,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 4,11,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 4,11,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 4,12,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 4,12,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 4,12,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 4,12,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 4,13,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 4,13,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 4,13,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 4,13,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 4,14,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 4,14,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 4,14,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 4,14,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 4,15,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 4,15,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 4,15,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 4,15,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 4,16,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 4,16,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 4,16,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 4,16,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 4,17,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 4,17,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 4,17,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 4,17,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 4,18,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 4,18,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 4,18,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 4,18,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 4,19,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 4,19,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 4,19,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 4,19,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 4,20,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 4,20,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 4,20,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 4,20,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 4,21,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 4,21,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 4,21,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 4,21,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 4,22,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 4,22,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 4,22,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 4,22,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 4,23,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 4,23,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 4,23,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 4,23,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 4,24,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 24 [document, 0, document, 1], how 0
+PASS 4,24,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 24 [document, 0, document, 1], how 1
+PASS 4,24,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 24 [document, 0, document, 1], how 2
+PASS 4,24,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 24 [document, 0, document, 1], how 3
+PASS 4,25,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 25 [document, 0, document, 2], how 0
+PASS 4,25,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 25 [document, 0, document, 2], how 1
+PASS 4,25,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 25 [document, 0, document, 2], how 2
+PASS 4,25,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 25 [document, 0, document, 2], how 3
+PASS 4,26,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 26 [comment, 2, comment, 3], how 0
+PASS 4,26,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 26 [comment, 2, comment, 3], how 1
+PASS 4,26,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 26 [comment, 2, comment, 3], how 2
+PASS 4,26,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 26 [comment, 2, comment, 3], how 3
+PASS 4,27,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 4,27,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 4,27,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 4,27,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 4,28,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 4,28,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 4,28,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 4,28,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 4,29,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 4,29,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 4,29,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 4,29,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 4,30,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 4,30,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 4,30,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 4,30,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 4,31,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 4,31,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 4,31,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 4,31,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 4,32,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 4,32,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 4,32,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 4,32,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 4,33,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 4,33,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 4,33,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 4,33,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 4,34,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 4,34,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 4,34,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 4,34,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 4,35,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 4,35,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 4,35,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 4,35,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 4,36,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 4,36,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 4,36,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 4,36,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 4,37,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 4,37,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 4,37,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 4,37,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 4,38,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 4,38,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 4,38,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 4,38,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 4,39,0: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range same as first range, how 0
+PASS 4,39,1: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range same as first range, how 1
+PASS 4,39,2: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range same as first range, how 2
+PASS 4,39,3: context range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], argument range same as first range, how 3
+FAIL 5,0,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 5,0,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 5,0,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 5,0,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 5,1,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 5,1,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 5,1,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 5,1,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 5,2,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 5,2,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 5,2,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 5,2,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 5,3,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 5,3,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 5,3,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 5,3,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 5,4,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 5,4,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 5,4,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 5,4,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 5,5,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 5,5,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 5,5,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 5,5,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 5,6,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 5,6,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 5,6,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 5,6,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 5,7,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 5,7,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 5,7,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 5,7,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 5,8,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 5,8,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 5,8,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 5,8,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 5,9,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 5,9,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 5,9,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 5,9,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 5,10,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 5,10,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 5,10,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 5,10,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 5,11,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 5,11,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 5,11,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 5,11,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 5,12,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 5,12,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 5,12,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 5,12,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 5,13,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 5,13,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 5,13,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 5,13,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 5,14,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 5,14,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 5,14,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 5,14,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 5,15,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 5,15,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 5,15,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 5,15,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 5,16,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 5,16,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 5,16,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 5,16,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 5,17,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 5,17,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 5,17,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 5,17,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 5,18,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 5,18,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 5,18,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 5,18,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 5,19,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 5,19,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 5,19,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 5,19,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 5,20,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 5,20,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 5,20,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 5,20,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 5,21,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 5,21,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 5,21,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 5,21,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 5,22,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 5,22,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 5,22,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 5,22,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 5,23,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 5,23,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 5,23,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 5,23,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 5,24,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 24 [document, 0, document, 1], how 0
+PASS 5,24,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 24 [document, 0, document, 1], how 1
+PASS 5,24,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 24 [document, 0, document, 1], how 2
+PASS 5,24,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 24 [document, 0, document, 1], how 3
+PASS 5,25,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 25 [document, 0, document, 2], how 0
+PASS 5,25,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 25 [document, 0, document, 2], how 1
+PASS 5,25,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 25 [document, 0, document, 2], how 2
+PASS 5,25,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 25 [document, 0, document, 2], how 3
+PASS 5,26,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 26 [comment, 2, comment, 3], how 0
+PASS 5,26,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 26 [comment, 2, comment, 3], how 1
+PASS 5,26,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 26 [comment, 2, comment, 3], how 2
+PASS 5,26,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 26 [comment, 2, comment, 3], how 3
+PASS 5,27,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 5,27,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 5,27,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 5,27,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 5,28,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 5,28,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 5,28,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 5,28,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 5,29,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 5,29,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 5,29,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 5,29,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 5,30,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 5,30,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 5,30,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 5,30,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 5,31,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 5,31,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 5,31,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 5,31,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 5,32,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 5,32,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 5,32,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 5,32,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 5,33,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 5,33,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 5,33,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 5,33,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 5,34,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 5,34,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 5,34,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 5,34,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 5,35,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 5,35,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 5,35,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 5,35,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 5,36,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 5,36,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 5,36,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 5,36,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 5,37,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 5,37,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 5,37,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 5,37,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 5,38,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 5,38,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 5,38,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 5,38,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 5,39,0: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range same as first range, how 0
+PASS 5,39,1: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range same as first range, how 1
+PASS 5,39,2: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range same as first range, how 2
+PASS 5,39,3: context range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], argument range same as first range, how 3
+FAIL 6,0,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 6,0,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 6,0,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 6,0,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 6,1,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 6,1,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 6,1,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 6,1,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 6,2,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 6,2,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 6,2,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 6,2,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 6,3,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 6,3,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 6,3,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 6,3,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 6,4,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 6,4,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 6,4,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 6,4,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 6,5,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 6,5,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 6,5,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 6,5,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 6,6,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 6,6,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 6,6,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 6,6,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 6,7,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 6,7,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 6,7,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 6,7,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 6,8,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 6,8,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 6,8,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 6,8,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 6,9,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 6,9,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 6,9,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 6,9,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 6,10,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 6,10,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 6,10,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 6,10,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 6,11,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 6,11,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 6,11,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 6,11,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 6,12,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 6,12,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 6,12,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 6,12,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 6,13,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 6,13,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 6,13,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 6,13,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 6,14,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 6,14,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 6,14,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 6,14,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 6,15,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 6,15,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 6,15,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 6,15,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 6,16,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 6,16,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 6,16,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 6,16,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 6,17,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 6,17,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 6,17,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 6,17,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 6,18,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 6,18,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 6,18,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 6,18,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 6,19,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 6,19,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 6,19,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 6,19,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 6,20,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 6,20,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 6,20,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 6,20,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 6,21,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 6,21,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 6,21,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 6,21,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 6,22,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 6,22,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 6,22,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 6,22,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 6,23,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 6,23,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 6,23,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 6,23,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 6,24,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 24 [document, 0, document, 1], how 0
+PASS 6,24,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 24 [document, 0, document, 1], how 1
+PASS 6,24,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 24 [document, 0, document, 1], how 2
+PASS 6,24,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 24 [document, 0, document, 1], how 3
+PASS 6,25,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 25 [document, 0, document, 2], how 0
+PASS 6,25,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 25 [document, 0, document, 2], how 1
+PASS 6,25,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 25 [document, 0, document, 2], how 2
+PASS 6,25,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 25 [document, 0, document, 2], how 3
+PASS 6,26,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 26 [comment, 2, comment, 3], how 0
+PASS 6,26,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 26 [comment, 2, comment, 3], how 1
+PASS 6,26,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 26 [comment, 2, comment, 3], how 2
+PASS 6,26,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 26 [comment, 2, comment, 3], how 3
+PASS 6,27,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 6,27,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 6,27,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 6,27,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 6,28,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 6,28,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 6,28,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 6,28,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 6,29,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 6,29,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 6,29,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 6,29,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 6,30,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 6,30,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 6,30,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 6,30,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 6,31,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 6,31,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 6,31,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 6,31,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 6,32,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 6,32,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 6,32,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 6,32,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 6,33,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 6,33,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 6,33,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 6,33,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 6,34,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 6,34,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 6,34,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 6,34,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 6,35,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 6,35,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 6,35,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 6,35,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 6,36,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 6,36,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 6,36,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 6,36,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 6,37,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 6,37,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 6,37,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 6,37,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 6,38,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 6,38,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 6,38,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 6,38,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 6,39,0: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range same as first range, how 0
+PASS 6,39,1: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range same as first range, how 1
+PASS 6,39,2: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range same as first range, how 2
+PASS 6,39,3: context range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], argument range same as first range, how 3
+FAIL 7,0,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 7,0,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 7,0,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 7,0,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 7,1,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 7,1,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 7,1,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 7,1,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 7,2,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 7,2,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 7,2,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 7,2,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 7,3,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 7,3,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 7,3,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 7,3,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 7,4,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 7,4,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 7,4,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 7,4,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 7,5,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 7,5,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 7,5,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 7,5,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 7,6,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 7,6,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 7,6,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 7,6,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 7,7,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 7,7,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 7,7,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 7,7,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 7,8,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 7,8,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 7,8,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 7,8,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 7,9,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 7,9,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 7,9,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 7,9,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 7,10,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 7,10,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 7,10,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 7,10,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 7,11,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 7,11,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 7,11,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 7,11,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 7,12,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 7,12,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 7,12,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 7,12,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 7,13,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 7,13,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 7,13,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 7,13,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 7,14,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 7,14,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 7,14,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 7,14,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 7,15,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 7,15,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 7,15,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 7,15,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 7,16,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 7,16,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 7,16,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 7,16,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 7,17,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 7,17,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 7,17,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 7,17,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 7,18,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 7,18,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 7,18,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 7,18,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 7,19,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 7,19,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 7,19,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 7,19,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 7,20,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 7,20,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 7,20,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 7,20,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 7,21,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 7,21,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 7,21,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 7,21,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 7,22,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 7,22,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 7,22,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 7,22,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 7,23,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 7,23,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 7,23,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 7,23,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 7,24,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 24 [document, 0, document, 1], how 0
+PASS 7,24,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 24 [document, 0, document, 1], how 1
+PASS 7,24,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 24 [document, 0, document, 1], how 2
+PASS 7,24,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 24 [document, 0, document, 1], how 3
+PASS 7,25,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 25 [document, 0, document, 2], how 0
+PASS 7,25,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 25 [document, 0, document, 2], how 1
+PASS 7,25,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 25 [document, 0, document, 2], how 2
+PASS 7,25,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 25 [document, 0, document, 2], how 3
+PASS 7,26,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 26 [comment, 2, comment, 3], how 0
+PASS 7,26,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 26 [comment, 2, comment, 3], how 1
+PASS 7,26,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 26 [comment, 2, comment, 3], how 2
+PASS 7,26,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 26 [comment, 2, comment, 3], how 3
+PASS 7,27,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 7,27,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 7,27,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 7,27,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 7,28,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 7,28,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 7,28,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 7,28,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 7,29,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 7,29,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 7,29,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 7,29,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 7,30,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 7,30,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 7,30,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 7,30,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 7,31,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 7,31,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 7,31,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 7,31,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 7,32,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 7,32,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 7,32,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 7,32,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 7,33,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 7,33,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 7,33,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 7,33,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 7,34,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 7,34,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 7,34,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 7,34,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 7,35,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 7,35,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 7,35,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 7,35,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 7,36,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 7,36,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 7,36,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 7,36,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 7,37,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 7,37,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 7,37,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 7,37,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 7,38,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 7,38,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 7,38,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 7,38,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 7,39,0: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range same as first range, how 0
+PASS 7,39,1: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range same as first range, how 1
+PASS 7,39,2: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range same as first range, how 2
+PASS 7,39,3: context range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], argument range same as first range, how 3
+FAIL 8,0,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 8,0,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 8,0,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 8,0,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 8,1,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 8,1,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 8,1,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 8,1,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 8,2,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 8,2,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 8,2,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 8,2,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 8,3,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 8,3,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 8,3,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 8,3,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 8,4,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 8,4,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 8,4,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 8,4,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 8,5,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 8,5,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 8,5,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 8,5,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 8,6,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 8,6,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 8,6,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 8,6,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 8,7,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 8,7,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 8,7,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 8,7,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 8,8,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 8,8,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 8,8,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 8,8,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 8,9,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 8,9,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 8,9,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 8,9,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 8,10,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 8,10,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 8,10,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 8,10,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 8,11,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 8,11,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 8,11,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 8,11,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 8,12,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 8,12,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 8,12,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 8,12,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 8,13,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 8,13,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 8,13,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 8,13,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 8,14,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 8,14,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 8,14,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 8,14,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 8,15,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 8,15,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 8,15,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 8,15,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 8,16,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 8,16,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 8,16,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 8,16,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 8,17,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 8,17,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 8,17,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 8,17,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 8,18,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 8,18,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 8,18,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 8,18,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 8,19,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 8,19,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 8,19,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 8,19,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 8,20,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 8,20,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 8,20,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 8,20,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 8,21,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 8,21,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 8,21,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 8,21,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 8,22,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 8,22,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 8,22,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 8,22,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 8,23,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 8,23,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 8,23,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 8,23,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 8,24,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 24 [document, 0, document, 1], how 0
+PASS 8,24,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 24 [document, 0, document, 1], how 1
+PASS 8,24,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 24 [document, 0, document, 1], how 2
+PASS 8,24,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 24 [document, 0, document, 1], how 3
+PASS 8,25,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 25 [document, 0, document, 2], how 0
+PASS 8,25,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 25 [document, 0, document, 2], how 1
+PASS 8,25,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 25 [document, 0, document, 2], how 2
+PASS 8,25,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 25 [document, 0, document, 2], how 3
+PASS 8,26,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 26 [comment, 2, comment, 3], how 0
+PASS 8,26,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 26 [comment, 2, comment, 3], how 1
+PASS 8,26,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 26 [comment, 2, comment, 3], how 2
+PASS 8,26,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 26 [comment, 2, comment, 3], how 3
+PASS 8,27,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 8,27,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 8,27,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 8,27,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 8,28,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 8,28,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 8,28,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 8,28,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 8,29,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 8,29,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 8,29,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 8,29,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 8,30,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 8,30,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 8,30,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 8,30,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 8,31,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 8,31,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 8,31,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 8,31,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 8,32,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 8,32,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 8,32,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 8,32,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 8,33,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 8,33,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 8,33,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 8,33,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 8,34,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 8,34,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 8,34,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 8,34,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 8,35,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 8,35,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 8,35,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 8,35,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 8,36,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 8,36,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 8,36,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 8,36,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 8,37,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 8,37,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 8,37,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 8,37,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 8,38,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 8,38,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 8,38,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 8,38,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 8,39,0: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range same as first range, how 0
+PASS 8,39,1: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range same as first range, how 1
+PASS 8,39,2: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range same as first range, how 2
+PASS 8,39,3: context range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], argument range same as first range, how 3
+FAIL 9,0,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 9,0,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 9,0,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 9,0,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 9,1,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 9,1,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 9,1,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 9,1,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 9,2,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 9,2,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 9,2,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 9,2,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 9,3,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 9,3,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 9,3,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 9,3,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 9,4,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 9,4,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 9,4,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 9,4,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 9,5,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 9,5,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 9,5,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 9,5,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 9,6,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 9,6,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 9,6,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 9,6,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 9,7,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 9,7,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 9,7,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 9,7,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 9,8,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 9,8,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 9,8,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 9,8,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 9,9,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 9,9,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 9,9,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 9,9,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 9,10,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 9,10,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 9,10,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 9,10,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 9,11,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 9,11,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 9,11,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 9,11,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 9,12,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 9,12,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 9,12,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 9,12,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 9,13,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 9,13,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 9,13,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 9,13,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 9,14,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 9,14,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 9,14,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 9,14,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 9,15,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 9,15,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 9,15,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 9,15,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 9,16,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 9,16,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 9,16,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 9,16,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 9,17,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 9,17,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 9,17,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 9,17,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 9,18,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 9,18,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 9,18,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 9,18,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 9,19,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 9,19,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 9,19,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 9,19,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 9,20,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 9,20,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 9,20,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 9,20,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 9,21,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 9,21,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 9,21,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 9,21,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 9,22,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 9,22,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 9,22,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 9,22,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 9,23,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 9,23,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 9,23,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 9,23,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 9,24,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 24 [document, 0, document, 1], how 0
+PASS 9,24,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 24 [document, 0, document, 1], how 1
+PASS 9,24,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 24 [document, 0, document, 1], how 2
+PASS 9,24,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 24 [document, 0, document, 1], how 3
+PASS 9,25,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 25 [document, 0, document, 2], how 0
+PASS 9,25,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 25 [document, 0, document, 2], how 1
+PASS 9,25,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 25 [document, 0, document, 2], how 2
+PASS 9,25,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 25 [document, 0, document, 2], how 3
+PASS 9,26,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 26 [comment, 2, comment, 3], how 0
+PASS 9,26,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 26 [comment, 2, comment, 3], how 1
+PASS 9,26,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 26 [comment, 2, comment, 3], how 2
+PASS 9,26,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 26 [comment, 2, comment, 3], how 3
+PASS 9,27,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 9,27,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 9,27,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 9,27,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 9,28,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 9,28,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 9,28,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 9,28,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 9,29,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 9,29,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 9,29,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 9,29,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 9,30,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 9,30,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 9,30,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 9,30,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 9,31,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 9,31,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 9,31,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 9,31,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 9,32,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 9,32,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 9,32,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 9,32,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 9,33,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 9,33,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 9,33,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 9,33,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 9,34,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 9,34,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 9,34,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 9,34,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 9,35,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 9,35,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 9,35,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 9,35,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 9,36,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 9,36,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 9,36,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 9,36,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 9,37,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 9,37,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 9,37,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 9,37,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 9,38,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 9,38,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 9,38,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 9,38,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 9,39,0: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range same as first range, how 0
+PASS 9,39,1: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range same as first range, how 1
+PASS 9,39,2: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range same as first range, how 2
+PASS 9,39,3: context range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], argument range same as first range, how 3
+FAIL 10,0,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 10,0,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 10,0,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 10,0,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 10,1,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 10,1,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 10,1,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 10,1,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 10,2,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 10,2,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 10,2,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 10,2,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 10,3,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 10,3,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 10,3,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 10,3,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 10,4,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 10,4,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 10,4,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 10,4,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 10,5,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 10,5,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 10,5,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 10,5,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 10,6,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 10,6,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 10,6,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 10,6,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 10,7,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 10,7,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 10,7,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 10,7,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 10,8,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 10,8,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 10,8,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 10,8,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 10,9,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 10,9,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 10,9,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 10,9,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 10,10,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 10,10,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 10,10,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 10,10,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 10,11,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 10,11,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 10,11,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 10,11,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 10,12,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 10,12,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 10,12,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 10,12,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 10,13,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 10,13,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 10,13,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 10,13,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 10,14,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 10,14,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 10,14,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 10,14,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 10,15,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 10,15,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 10,15,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 10,15,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 10,16,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 10,16,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 10,16,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 10,16,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 10,17,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 10,17,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 10,17,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 10,17,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 10,18,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 10,18,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 10,18,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 10,18,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 10,19,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 10,19,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 10,19,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 10,19,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 10,20,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 10,20,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 10,20,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 10,20,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 10,21,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 10,21,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 10,21,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 10,21,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 10,22,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 10,22,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 10,22,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 10,22,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 10,23,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 10,23,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 10,23,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 10,23,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 10,24,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 24 [document, 0, document, 1], how 0
+PASS 10,24,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 24 [document, 0, document, 1], how 1
+PASS 10,24,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 24 [document, 0, document, 1], how 2
+PASS 10,24,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 24 [document, 0, document, 1], how 3
+PASS 10,25,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 25 [document, 0, document, 2], how 0
+PASS 10,25,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 25 [document, 0, document, 2], how 1
+PASS 10,25,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 25 [document, 0, document, 2], how 2
+PASS 10,25,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 25 [document, 0, document, 2], how 3
+PASS 10,26,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 26 [comment, 2, comment, 3], how 0
+PASS 10,26,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 26 [comment, 2, comment, 3], how 1
+PASS 10,26,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 26 [comment, 2, comment, 3], how 2
+PASS 10,26,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 26 [comment, 2, comment, 3], how 3
+PASS 10,27,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 10,27,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 10,27,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 10,27,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 10,28,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 10,28,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 10,28,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 10,28,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 10,29,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 10,29,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 10,29,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 10,29,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 10,30,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 10,30,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 10,30,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 10,30,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 10,31,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 10,31,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 10,31,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 10,31,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 10,32,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 10,32,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 10,32,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 10,32,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 10,33,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 10,33,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 10,33,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 10,33,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 10,34,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 10,34,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 10,34,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 10,34,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 10,35,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 10,35,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 10,35,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 10,35,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 10,36,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 10,36,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 10,36,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 10,36,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 10,37,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 10,37,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 10,37,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 10,37,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 10,38,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 10,38,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 10,38,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 10,38,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 10,39,0: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range same as first range, how 0
+PASS 10,39,1: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range same as first range, how 1
+PASS 10,39,2: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range same as first range, how 2
+PASS 10,39,3: context range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], argument range same as first range, how 3
+FAIL 11,0,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 11,0,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 11,0,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 11,0,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 11,1,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 11,1,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 11,1,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 11,1,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 11,2,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 11,2,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 11,2,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 11,2,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 11,3,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 11,3,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 11,3,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 11,3,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 11,4,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 11,4,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 11,4,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 11,4,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 11,5,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 11,5,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 11,5,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 11,5,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 11,6,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 11,6,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 11,6,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 11,6,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 11,7,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 11,7,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 11,7,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 11,7,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 11,8,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 11,8,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 11,8,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 11,8,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 11,9,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 11,9,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 11,9,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 11,9,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 11,10,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 11,10,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 11,10,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 11,10,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 11,11,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 11,11,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 11,11,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 11,11,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 11,12,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 11,12,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 11,12,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 11,12,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 11,13,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 11,13,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 11,13,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 11,13,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 11,14,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 11,14,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 11,14,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 11,14,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 11,15,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 11,15,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 11,15,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 11,15,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 11,16,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 11,16,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 11,16,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 11,16,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 11,17,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 11,17,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 11,17,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 11,17,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 11,18,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 11,18,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 11,18,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 11,18,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 11,19,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 11,19,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 11,19,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 11,19,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 11,20,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 11,20,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 11,20,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 11,20,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 11,21,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 11,21,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 11,21,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 11,21,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 11,22,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 11,22,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 11,22,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 11,22,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 11,23,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 11,23,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 11,23,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 11,23,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 11,24,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 24 [document, 0, document, 1], how 0
+PASS 11,24,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 24 [document, 0, document, 1], how 1
+PASS 11,24,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 24 [document, 0, document, 1], how 2
+PASS 11,24,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 24 [document, 0, document, 1], how 3
+PASS 11,25,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 25 [document, 0, document, 2], how 0
+PASS 11,25,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 25 [document, 0, document, 2], how 1
+PASS 11,25,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 25 [document, 0, document, 2], how 2
+PASS 11,25,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 25 [document, 0, document, 2], how 3
+PASS 11,26,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 26 [comment, 2, comment, 3], how 0
+PASS 11,26,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 26 [comment, 2, comment, 3], how 1
+PASS 11,26,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 26 [comment, 2, comment, 3], how 2
+PASS 11,26,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 26 [comment, 2, comment, 3], how 3
+PASS 11,27,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 11,27,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 11,27,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 11,27,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 11,28,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 11,28,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 11,28,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 11,28,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 11,29,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 11,29,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 11,29,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 11,29,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 11,30,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 11,30,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 11,30,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 11,30,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 11,31,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 11,31,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 11,31,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 11,31,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 11,32,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 11,32,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 11,32,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 11,32,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 11,33,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 11,33,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 11,33,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 11,33,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 11,34,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 11,34,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 11,34,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 11,34,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 11,35,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 11,35,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 11,35,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 11,35,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 11,36,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 11,36,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 11,36,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 11,36,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 11,37,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 11,37,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 11,37,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 11,37,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 11,38,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 11,38,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 11,38,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 11,38,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 11,39,0: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range same as first range, how 0
+PASS 11,39,1: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range same as first range, how 1
+PASS 11,39,2: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range same as first range, how 2
+PASS 11,39,3: context range 11 [document.documentElement, 0, document.documentElement, 1], argument range same as first range, how 3
+FAIL 12,0,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 12,0,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 12,0,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 12,0,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 12,1,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 12,1,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 12,1,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 12,1,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 12,2,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 12,2,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 12,2,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 12,2,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 12,3,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 12,3,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 12,3,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 12,3,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 12,4,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 12,4,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 12,4,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 12,4,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 12,5,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 12,5,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 12,5,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 12,5,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 12,6,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 12,6,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 12,6,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 12,6,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 12,7,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 12,7,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 12,7,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 12,7,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 12,8,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 12,8,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 12,8,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 12,8,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 12,9,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 12,9,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 12,9,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 12,9,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 12,10,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 12,10,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 12,10,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 12,10,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 12,11,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 12,11,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 12,11,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 12,11,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 12,12,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 12,12,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 12,12,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 12,12,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 12,13,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 12,13,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 12,13,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 12,13,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 12,14,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 12,14,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 12,14,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 12,14,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 12,15,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 12,15,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 12,15,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 12,15,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 12,16,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 12,16,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 12,16,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 12,16,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 12,17,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 12,17,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 12,17,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 12,17,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 12,18,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 12,18,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 12,18,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 12,18,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 12,19,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 12,19,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 12,19,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 12,19,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 12,20,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 12,20,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 12,20,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 12,20,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 12,21,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 12,21,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 12,21,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 12,21,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 12,22,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 12,22,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 12,22,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 12,22,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 12,23,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 12,23,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 12,23,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 12,23,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 12,24,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 24 [document, 0, document, 1], how 0
+PASS 12,24,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 24 [document, 0, document, 1], how 1
+PASS 12,24,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 24 [document, 0, document, 1], how 2
+PASS 12,24,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 24 [document, 0, document, 1], how 3
+PASS 12,25,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 25 [document, 0, document, 2], how 0
+PASS 12,25,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 25 [document, 0, document, 2], how 1
+PASS 12,25,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 25 [document, 0, document, 2], how 2
+PASS 12,25,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 25 [document, 0, document, 2], how 3
+PASS 12,26,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 26 [comment, 2, comment, 3], how 0
+PASS 12,26,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 26 [comment, 2, comment, 3], how 1
+PASS 12,26,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 26 [comment, 2, comment, 3], how 2
+PASS 12,26,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 26 [comment, 2, comment, 3], how 3
+PASS 12,27,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 12,27,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 12,27,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 12,27,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 12,28,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 12,28,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 12,28,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 12,28,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 12,29,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 12,29,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 12,29,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 12,29,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 12,30,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 12,30,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 12,30,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 12,30,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 12,31,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 12,31,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 12,31,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 12,31,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 12,32,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 12,32,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 12,32,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 12,32,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 12,33,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 12,33,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 12,33,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 12,33,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 12,34,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 12,34,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 12,34,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 12,34,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 12,35,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 12,35,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 12,35,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 12,35,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 12,36,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 12,36,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 12,36,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 12,36,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 12,37,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 12,37,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 12,37,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 12,37,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 12,38,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 12,38,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 12,38,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 12,38,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 12,39,0: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range same as first range, how 0
+PASS 12,39,1: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range same as first range, how 1
+PASS 12,39,2: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range same as first range, how 2
+PASS 12,39,3: context range 12 [document.documentElement, 0, document.documentElement, 2], argument range same as first range, how 3
+FAIL 13,0,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 13,0,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 13,0,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 13,0,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 13,1,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 13,1,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 13,1,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 13,1,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 13,2,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 13,2,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 13,2,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 13,2,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 13,3,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 13,3,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 13,3,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 13,3,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 13,4,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 13,4,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 13,4,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 13,4,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 13,5,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 13,5,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 13,5,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 13,5,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 13,6,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 13,6,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 13,6,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 13,6,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 13,7,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 13,7,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 13,7,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 13,7,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 13,8,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 13,8,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 13,8,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 13,8,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 13,9,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 13,9,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 13,9,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 13,9,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 13,10,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 13,10,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 13,10,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 13,10,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 13,11,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 13,11,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 13,11,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 13,11,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 13,12,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 13,12,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 13,12,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 13,12,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 13,13,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 13,13,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 13,13,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 13,13,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 13,14,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 13,14,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 13,14,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 13,14,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 13,15,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 13,15,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 13,15,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 13,15,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 13,16,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 13,16,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 13,16,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 13,16,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 13,17,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 13,17,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 13,17,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 13,17,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 13,18,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 13,18,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 13,18,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 13,18,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 13,19,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 13,19,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 13,19,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 13,19,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 13,20,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 13,20,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 13,20,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 13,20,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 13,21,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 13,21,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 13,21,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 13,21,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 13,22,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 13,22,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 13,22,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 13,22,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 13,23,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 13,23,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 13,23,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 13,23,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 13,24,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 24 [document, 0, document, 1], how 0
+PASS 13,24,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 24 [document, 0, document, 1], how 1
+PASS 13,24,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 24 [document, 0, document, 1], how 2
+PASS 13,24,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 24 [document, 0, document, 1], how 3
+PASS 13,25,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 25 [document, 0, document, 2], how 0
+PASS 13,25,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 25 [document, 0, document, 2], how 1
+PASS 13,25,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 25 [document, 0, document, 2], how 2
+PASS 13,25,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 25 [document, 0, document, 2], how 3
+PASS 13,26,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 26 [comment, 2, comment, 3], how 0
+PASS 13,26,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 26 [comment, 2, comment, 3], how 1
+PASS 13,26,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 26 [comment, 2, comment, 3], how 2
+PASS 13,26,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 26 [comment, 2, comment, 3], how 3
+PASS 13,27,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 13,27,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 13,27,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 13,27,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 13,28,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 13,28,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 13,28,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 13,28,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 13,29,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 13,29,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 13,29,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 13,29,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 13,30,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 13,30,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 13,30,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 13,30,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 13,31,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 13,31,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 13,31,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 13,31,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 13,32,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 13,32,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 13,32,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 13,32,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 13,33,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 13,33,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 13,33,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 13,33,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 13,34,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 13,34,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 13,34,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 13,34,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 13,35,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 13,35,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 13,35,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 13,35,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 13,36,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 13,36,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 13,36,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 13,36,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 13,37,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 13,37,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 13,37,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 13,37,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 13,38,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 13,38,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 13,38,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 13,38,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 13,39,0: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range same as first range, how 0
+PASS 13,39,1: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range same as first range, how 1
+PASS 13,39,2: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range same as first range, how 2
+PASS 13,39,3: context range 13 [document.documentElement, 1, document.documentElement, 2], argument range same as first range, how 3
+FAIL 14,0,0: context range 14 [document.head, 1, document.head, 1], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 14,0,1: context range 14 [document.head, 1, document.head, 1], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 14,0,2: context range 14 [document.head, 1, document.head, 1], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 14,0,3: context range 14 [document.head, 1, document.head, 1], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 14,1,0: context range 14 [document.head, 1, document.head, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 14,1,1: context range 14 [document.head, 1, document.head, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 14,1,2: context range 14 [document.head, 1, document.head, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 14,1,3: context range 14 [document.head, 1, document.head, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 14,2,0: context range 14 [document.head, 1, document.head, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 14,2,1: context range 14 [document.head, 1, document.head, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 14,2,2: context range 14 [document.head, 1, document.head, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 14,2,3: context range 14 [document.head, 1, document.head, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 14,3,0: context range 14 [document.head, 1, document.head, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 14,3,1: context range 14 [document.head, 1, document.head, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 14,3,2: context range 14 [document.head, 1, document.head, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 14,3,3: context range 14 [document.head, 1, document.head, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 14,4,0: context range 14 [document.head, 1, document.head, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 14,4,1: context range 14 [document.head, 1, document.head, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 14,4,2: context range 14 [document.head, 1, document.head, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 14,4,3: context range 14 [document.head, 1, document.head, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 14,5,0: context range 14 [document.head, 1, document.head, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 14,5,1: context range 14 [document.head, 1, document.head, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 14,5,2: context range 14 [document.head, 1, document.head, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 14,5,3: context range 14 [document.head, 1, document.head, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 14,6,0: context range 14 [document.head, 1, document.head, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 14,6,1: context range 14 [document.head, 1, document.head, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 14,6,2: context range 14 [document.head, 1, document.head, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 14,6,3: context range 14 [document.head, 1, document.head, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 14,7,0: context range 14 [document.head, 1, document.head, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 14,7,1: context range 14 [document.head, 1, document.head, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 14,7,2: context range 14 [document.head, 1, document.head, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 14,7,3: context range 14 [document.head, 1, document.head, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 14,8,0: context range 14 [document.head, 1, document.head, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 14,8,1: context range 14 [document.head, 1, document.head, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 14,8,2: context range 14 [document.head, 1, document.head, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 14,8,3: context range 14 [document.head, 1, document.head, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 14,9,0: context range 14 [document.head, 1, document.head, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 14,9,1: context range 14 [document.head, 1, document.head, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 14,9,2: context range 14 [document.head, 1, document.head, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 14,9,3: context range 14 [document.head, 1, document.head, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 14,10,0: context range 14 [document.head, 1, document.head, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 14,10,1: context range 14 [document.head, 1, document.head, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 14,10,2: context range 14 [document.head, 1, document.head, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 14,10,3: context range 14 [document.head, 1, document.head, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 14,11,0: context range 14 [document.head, 1, document.head, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 14,11,1: context range 14 [document.head, 1, document.head, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 14,11,2: context range 14 [document.head, 1, document.head, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 14,11,3: context range 14 [document.head, 1, document.head, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 14,12,0: context range 14 [document.head, 1, document.head, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 14,12,1: context range 14 [document.head, 1, document.head, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 14,12,2: context range 14 [document.head, 1, document.head, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 14,12,3: context range 14 [document.head, 1, document.head, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 14,13,0: context range 14 [document.head, 1, document.head, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 14,13,1: context range 14 [document.head, 1, document.head, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 14,13,2: context range 14 [document.head, 1, document.head, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 14,13,3: context range 14 [document.head, 1, document.head, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 14,14,0: context range 14 [document.head, 1, document.head, 1], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 14,14,1: context range 14 [document.head, 1, document.head, 1], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 14,14,2: context range 14 [document.head, 1, document.head, 1], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 14,14,3: context range 14 [document.head, 1, document.head, 1], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 14,15,0: context range 14 [document.head, 1, document.head, 1], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 14,15,1: context range 14 [document.head, 1, document.head, 1], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 14,15,2: context range 14 [document.head, 1, document.head, 1], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 14,15,3: context range 14 [document.head, 1, document.head, 1], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 14,16,0: context range 14 [document.head, 1, document.head, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 14,16,1: context range 14 [document.head, 1, document.head, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 14,16,2: context range 14 [document.head, 1, document.head, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 14,16,3: context range 14 [document.head, 1, document.head, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 14,17,0: context range 14 [document.head, 1, document.head, 1], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 14,17,1: context range 14 [document.head, 1, document.head, 1], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 14,17,2: context range 14 [document.head, 1, document.head, 1], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 14,17,3: context range 14 [document.head, 1, document.head, 1], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 14,18,0: context range 14 [document.head, 1, document.head, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 14,18,1: context range 14 [document.head, 1, document.head, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 14,18,2: context range 14 [document.head, 1, document.head, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 14,18,3: context range 14 [document.head, 1, document.head, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 14,19,0: context range 14 [document.head, 1, document.head, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 14,19,1: context range 14 [document.head, 1, document.head, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 14,19,2: context range 14 [document.head, 1, document.head, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 14,19,3: context range 14 [document.head, 1, document.head, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 14,20,0: context range 14 [document.head, 1, document.head, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 14,20,1: context range 14 [document.head, 1, document.head, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 14,20,2: context range 14 [document.head, 1, document.head, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 14,20,3: context range 14 [document.head, 1, document.head, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 14,21,0: context range 14 [document.head, 1, document.head, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 14,21,1: context range 14 [document.head, 1, document.head, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 14,21,2: context range 14 [document.head, 1, document.head, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 14,21,3: context range 14 [document.head, 1, document.head, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 14,22,0: context range 14 [document.head, 1, document.head, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 14,22,1: context range 14 [document.head, 1, document.head, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 14,22,2: context range 14 [document.head, 1, document.head, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 14,22,3: context range 14 [document.head, 1, document.head, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 14,23,0: context range 14 [document.head, 1, document.head, 1], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 14,23,1: context range 14 [document.head, 1, document.head, 1], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 14,23,2: context range 14 [document.head, 1, document.head, 1], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 14,23,3: context range 14 [document.head, 1, document.head, 1], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 14,24,0: context range 14 [document.head, 1, document.head, 1], argument range 24 [document, 0, document, 1], how 0
+PASS 14,24,1: context range 14 [document.head, 1, document.head, 1], argument range 24 [document, 0, document, 1], how 1
+PASS 14,24,2: context range 14 [document.head, 1, document.head, 1], argument range 24 [document, 0, document, 1], how 2
+PASS 14,24,3: context range 14 [document.head, 1, document.head, 1], argument range 24 [document, 0, document, 1], how 3
+PASS 14,25,0: context range 14 [document.head, 1, document.head, 1], argument range 25 [document, 0, document, 2], how 0
+PASS 14,25,1: context range 14 [document.head, 1, document.head, 1], argument range 25 [document, 0, document, 2], how 1
+PASS 14,25,2: context range 14 [document.head, 1, document.head, 1], argument range 25 [document, 0, document, 2], how 2
+PASS 14,25,3: context range 14 [document.head, 1, document.head, 1], argument range 25 [document, 0, document, 2], how 3
+PASS 14,26,0: context range 14 [document.head, 1, document.head, 1], argument range 26 [comment, 2, comment, 3], how 0
+PASS 14,26,1: context range 14 [document.head, 1, document.head, 1], argument range 26 [comment, 2, comment, 3], how 1
+PASS 14,26,2: context range 14 [document.head, 1, document.head, 1], argument range 26 [comment, 2, comment, 3], how 2
+PASS 14,26,3: context range 14 [document.head, 1, document.head, 1], argument range 26 [comment, 2, comment, 3], how 3
+PASS 14,27,0: context range 14 [document.head, 1, document.head, 1], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 14,27,1: context range 14 [document.head, 1, document.head, 1], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 14,27,2: context range 14 [document.head, 1, document.head, 1], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 14,27,3: context range 14 [document.head, 1, document.head, 1], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 14,28,0: context range 14 [document.head, 1, document.head, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 14,28,1: context range 14 [document.head, 1, document.head, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 14,28,2: context range 14 [document.head, 1, document.head, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 14,28,3: context range 14 [document.head, 1, document.head, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 14,29,0: context range 14 [document.head, 1, document.head, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 14,29,1: context range 14 [document.head, 1, document.head, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 14,29,2: context range 14 [document.head, 1, document.head, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 14,29,3: context range 14 [document.head, 1, document.head, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 14,30,0: context range 14 [document.head, 1, document.head, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 14,30,1: context range 14 [document.head, 1, document.head, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 14,30,2: context range 14 [document.head, 1, document.head, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 14,30,3: context range 14 [document.head, 1, document.head, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 14,31,0: context range 14 [document.head, 1, document.head, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 14,31,1: context range 14 [document.head, 1, document.head, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 14,31,2: context range 14 [document.head, 1, document.head, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 14,31,3: context range 14 [document.head, 1, document.head, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 14,32,0: context range 14 [document.head, 1, document.head, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 14,32,1: context range 14 [document.head, 1, document.head, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 14,32,2: context range 14 [document.head, 1, document.head, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 14,32,3: context range 14 [document.head, 1, document.head, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 14,33,0: context range 14 [document.head, 1, document.head, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 14,33,1: context range 14 [document.head, 1, document.head, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 14,33,2: context range 14 [document.head, 1, document.head, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 14,33,3: context range 14 [document.head, 1, document.head, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 14,34,0: context range 14 [document.head, 1, document.head, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 14,34,1: context range 14 [document.head, 1, document.head, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 14,34,2: context range 14 [document.head, 1, document.head, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 14,34,3: context range 14 [document.head, 1, document.head, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 14,35,0: context range 14 [document.head, 1, document.head, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 14,35,1: context range 14 [document.head, 1, document.head, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 14,35,2: context range 14 [document.head, 1, document.head, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 14,35,3: context range 14 [document.head, 1, document.head, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 14,36,0: context range 14 [document.head, 1, document.head, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 14,36,1: context range 14 [document.head, 1, document.head, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 14,36,2: context range 14 [document.head, 1, document.head, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 14,36,3: context range 14 [document.head, 1, document.head, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 14,37,0: context range 14 [document.head, 1, document.head, 1], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 14,37,1: context range 14 [document.head, 1, document.head, 1], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 14,37,2: context range 14 [document.head, 1, document.head, 1], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 14,37,3: context range 14 [document.head, 1, document.head, 1], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 14,38,0: context range 14 [document.head, 1, document.head, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 14,38,1: context range 14 [document.head, 1, document.head, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 14,38,2: context range 14 [document.head, 1, document.head, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 14,38,3: context range 14 [document.head, 1, document.head, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 14,39,0: context range 14 [document.head, 1, document.head, 1], argument range same as first range, how 0
+PASS 14,39,1: context range 14 [document.head, 1, document.head, 1], argument range same as first range, how 1
+PASS 14,39,2: context range 14 [document.head, 1, document.head, 1], argument range same as first range, how 2
+PASS 14,39,3: context range 14 [document.head, 1, document.head, 1], argument range same as first range, how 3
+FAIL 15,0,0: context range 15 [document.body, 4, document.body, 5], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 15,0,1: context range 15 [document.body, 4, document.body, 5], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 15,0,2: context range 15 [document.body, 4, document.body, 5], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 15,0,3: context range 15 [document.body, 4, document.body, 5], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 15,1,0: context range 15 [document.body, 4, document.body, 5], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 15,1,1: context range 15 [document.body, 4, document.body, 5], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 15,1,2: context range 15 [document.body, 4, document.body, 5], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 15,1,3: context range 15 [document.body, 4, document.body, 5], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 15,2,0: context range 15 [document.body, 4, document.body, 5], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 15,2,1: context range 15 [document.body, 4, document.body, 5], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 15,2,2: context range 15 [document.body, 4, document.body, 5], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 15,2,3: context range 15 [document.body, 4, document.body, 5], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 15,3,0: context range 15 [document.body, 4, document.body, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 15,3,1: context range 15 [document.body, 4, document.body, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 15,3,2: context range 15 [document.body, 4, document.body, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 15,3,3: context range 15 [document.body, 4, document.body, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 15,4,0: context range 15 [document.body, 4, document.body, 5], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 15,4,1: context range 15 [document.body, 4, document.body, 5], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 15,4,2: context range 15 [document.body, 4, document.body, 5], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 15,4,3: context range 15 [document.body, 4, document.body, 5], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 15,5,0: context range 15 [document.body, 4, document.body, 5], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 15,5,1: context range 15 [document.body, 4, document.body, 5], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 15,5,2: context range 15 [document.body, 4, document.body, 5], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 15,5,3: context range 15 [document.body, 4, document.body, 5], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 15,6,0: context range 15 [document.body, 4, document.body, 5], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 15,6,1: context range 15 [document.body, 4, document.body, 5], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 15,6,2: context range 15 [document.body, 4, document.body, 5], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 15,6,3: context range 15 [document.body, 4, document.body, 5], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 15,7,0: context range 15 [document.body, 4, document.body, 5], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 15,7,1: context range 15 [document.body, 4, document.body, 5], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 15,7,2: context range 15 [document.body, 4, document.body, 5], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 15,7,3: context range 15 [document.body, 4, document.body, 5], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 15,8,0: context range 15 [document.body, 4, document.body, 5], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 15,8,1: context range 15 [document.body, 4, document.body, 5], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 15,8,2: context range 15 [document.body, 4, document.body, 5], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 15,8,3: context range 15 [document.body, 4, document.body, 5], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 15,9,0: context range 15 [document.body, 4, document.body, 5], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 15,9,1: context range 15 [document.body, 4, document.body, 5], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 15,9,2: context range 15 [document.body, 4, document.body, 5], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 15,9,3: context range 15 [document.body, 4, document.body, 5], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 15,10,0: context range 15 [document.body, 4, document.body, 5], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 15,10,1: context range 15 [document.body, 4, document.body, 5], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 15,10,2: context range 15 [document.body, 4, document.body, 5], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 15,10,3: context range 15 [document.body, 4, document.body, 5], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 15,11,0: context range 15 [document.body, 4, document.body, 5], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 15,11,1: context range 15 [document.body, 4, document.body, 5], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 15,11,2: context range 15 [document.body, 4, document.body, 5], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 15,11,3: context range 15 [document.body, 4, document.body, 5], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 15,12,0: context range 15 [document.body, 4, document.body, 5], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 15,12,1: context range 15 [document.body, 4, document.body, 5], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 15,12,2: context range 15 [document.body, 4, document.body, 5], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 15,12,3: context range 15 [document.body, 4, document.body, 5], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 15,13,0: context range 15 [document.body, 4, document.body, 5], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 15,13,1: context range 15 [document.body, 4, document.body, 5], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 15,13,2: context range 15 [document.body, 4, document.body, 5], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 15,13,3: context range 15 [document.body, 4, document.body, 5], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 15,14,0: context range 15 [document.body, 4, document.body, 5], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 15,14,1: context range 15 [document.body, 4, document.body, 5], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 15,14,2: context range 15 [document.body, 4, document.body, 5], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 15,14,3: context range 15 [document.body, 4, document.body, 5], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 15,15,0: context range 15 [document.body, 4, document.body, 5], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 15,15,1: context range 15 [document.body, 4, document.body, 5], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 15,15,2: context range 15 [document.body, 4, document.body, 5], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 15,15,3: context range 15 [document.body, 4, document.body, 5], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 15,16,0: context range 15 [document.body, 4, document.body, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 15,16,1: context range 15 [document.body, 4, document.body, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 15,16,2: context range 15 [document.body, 4, document.body, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 15,16,3: context range 15 [document.body, 4, document.body, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 15,17,0: context range 15 [document.body, 4, document.body, 5], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 15,17,1: context range 15 [document.body, 4, document.body, 5], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 15,17,2: context range 15 [document.body, 4, document.body, 5], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 15,17,3: context range 15 [document.body, 4, document.body, 5], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 15,18,0: context range 15 [document.body, 4, document.body, 5], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 15,18,1: context range 15 [document.body, 4, document.body, 5], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 15,18,2: context range 15 [document.body, 4, document.body, 5], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 15,18,3: context range 15 [document.body, 4, document.body, 5], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 15,19,0: context range 15 [document.body, 4, document.body, 5], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 15,19,1: context range 15 [document.body, 4, document.body, 5], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 15,19,2: context range 15 [document.body, 4, document.body, 5], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 15,19,3: context range 15 [document.body, 4, document.body, 5], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 15,20,0: context range 15 [document.body, 4, document.body, 5], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 15,20,1: context range 15 [document.body, 4, document.body, 5], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 15,20,2: context range 15 [document.body, 4, document.body, 5], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 15,20,3: context range 15 [document.body, 4, document.body, 5], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 15,21,0: context range 15 [document.body, 4, document.body, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 15,21,1: context range 15 [document.body, 4, document.body, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 15,21,2: context range 15 [document.body, 4, document.body, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 15,21,3: context range 15 [document.body, 4, document.body, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 15,22,0: context range 15 [document.body, 4, document.body, 5], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 15,22,1: context range 15 [document.body, 4, document.body, 5], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 15,22,2: context range 15 [document.body, 4, document.body, 5], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 15,22,3: context range 15 [document.body, 4, document.body, 5], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 15,23,0: context range 15 [document.body, 4, document.body, 5], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 15,23,1: context range 15 [document.body, 4, document.body, 5], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 15,23,2: context range 15 [document.body, 4, document.body, 5], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 15,23,3: context range 15 [document.body, 4, document.body, 5], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 15,24,0: context range 15 [document.body, 4, document.body, 5], argument range 24 [document, 0, document, 1], how 0
+PASS 15,24,1: context range 15 [document.body, 4, document.body, 5], argument range 24 [document, 0, document, 1], how 1
+PASS 15,24,2: context range 15 [document.body, 4, document.body, 5], argument range 24 [document, 0, document, 1], how 2
+PASS 15,24,3: context range 15 [document.body, 4, document.body, 5], argument range 24 [document, 0, document, 1], how 3
+PASS 15,25,0: context range 15 [document.body, 4, document.body, 5], argument range 25 [document, 0, document, 2], how 0
+PASS 15,25,1: context range 15 [document.body, 4, document.body, 5], argument range 25 [document, 0, document, 2], how 1
+PASS 15,25,2: context range 15 [document.body, 4, document.body, 5], argument range 25 [document, 0, document, 2], how 2
+PASS 15,25,3: context range 15 [document.body, 4, document.body, 5], argument range 25 [document, 0, document, 2], how 3
+PASS 15,26,0: context range 15 [document.body, 4, document.body, 5], argument range 26 [comment, 2, comment, 3], how 0
+PASS 15,26,1: context range 15 [document.body, 4, document.body, 5], argument range 26 [comment, 2, comment, 3], how 1
+PASS 15,26,2: context range 15 [document.body, 4, document.body, 5], argument range 26 [comment, 2, comment, 3], how 2
+PASS 15,26,3: context range 15 [document.body, 4, document.body, 5], argument range 26 [comment, 2, comment, 3], how 3
+PASS 15,27,0: context range 15 [document.body, 4, document.body, 5], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 15,27,1: context range 15 [document.body, 4, document.body, 5], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 15,27,2: context range 15 [document.body, 4, document.body, 5], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 15,27,3: context range 15 [document.body, 4, document.body, 5], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 15,28,0: context range 15 [document.body, 4, document.body, 5], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 15,28,1: context range 15 [document.body, 4, document.body, 5], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 15,28,2: context range 15 [document.body, 4, document.body, 5], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 15,28,3: context range 15 [document.body, 4, document.body, 5], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 15,29,0: context range 15 [document.body, 4, document.body, 5], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 15,29,1: context range 15 [document.body, 4, document.body, 5], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 15,29,2: context range 15 [document.body, 4, document.body, 5], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 15,29,3: context range 15 [document.body, 4, document.body, 5], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 15,30,0: context range 15 [document.body, 4, document.body, 5], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 15,30,1: context range 15 [document.body, 4, document.body, 5], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 15,30,2: context range 15 [document.body, 4, document.body, 5], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 15,30,3: context range 15 [document.body, 4, document.body, 5], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 15,31,0: context range 15 [document.body, 4, document.body, 5], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 15,31,1: context range 15 [document.body, 4, document.body, 5], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 15,31,2: context range 15 [document.body, 4, document.body, 5], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 15,31,3: context range 15 [document.body, 4, document.body, 5], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 15,32,0: context range 15 [document.body, 4, document.body, 5], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 15,32,1: context range 15 [document.body, 4, document.body, 5], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 15,32,2: context range 15 [document.body, 4, document.body, 5], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 15,32,3: context range 15 [document.body, 4, document.body, 5], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 15,33,0: context range 15 [document.body, 4, document.body, 5], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 15,33,1: context range 15 [document.body, 4, document.body, 5], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 15,33,2: context range 15 [document.body, 4, document.body, 5], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 15,33,3: context range 15 [document.body, 4, document.body, 5], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 15,34,0: context range 15 [document.body, 4, document.body, 5], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 15,34,1: context range 15 [document.body, 4, document.body, 5], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 15,34,2: context range 15 [document.body, 4, document.body, 5], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 15,34,3: context range 15 [document.body, 4, document.body, 5], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 15,35,0: context range 15 [document.body, 4, document.body, 5], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 15,35,1: context range 15 [document.body, 4, document.body, 5], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 15,35,2: context range 15 [document.body, 4, document.body, 5], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 15,35,3: context range 15 [document.body, 4, document.body, 5], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 15,36,0: context range 15 [document.body, 4, document.body, 5], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 15,36,1: context range 15 [document.body, 4, document.body, 5], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 15,36,2: context range 15 [document.body, 4, document.body, 5], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 15,36,3: context range 15 [document.body, 4, document.body, 5], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 15,37,0: context range 15 [document.body, 4, document.body, 5], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 15,37,1: context range 15 [document.body, 4, document.body, 5], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 15,37,2: context range 15 [document.body, 4, document.body, 5], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 15,37,3: context range 15 [document.body, 4, document.body, 5], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 15,38,0: context range 15 [document.body, 4, document.body, 5], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 15,38,1: context range 15 [document.body, 4, document.body, 5], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 15,38,2: context range 15 [document.body, 4, document.body, 5], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 15,38,3: context range 15 [document.body, 4, document.body, 5], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 15,39,0: context range 15 [document.body, 4, document.body, 5], argument range same as first range, how 0
+PASS 15,39,1: context range 15 [document.body, 4, document.body, 5], argument range same as first range, how 1
+PASS 15,39,2: context range 15 [document.body, 4, document.body, 5], argument range same as first range, how 2
+PASS 15,39,3: context range 15 [document.body, 4, document.body, 5], argument range same as first range, how 3
+FAIL 16,0,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 16,0,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 16,0,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 16,0,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 16,0,4: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -1
+PASS 16,0,5: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 4
+PASS 16,0,6: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 5
+FAIL 16,0,7: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how NaN InvalidStateError: DOM Exception 11
+FAIL 16,0,8: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -0 InvalidStateError: DOM Exception 11
+FAIL 16,0,9: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how Infinity InvalidStateError: DOM Exception 11
+FAIL 16,0,10: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -Infinity InvalidStateError: DOM Exception 11
+PASS 16,0,11: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 65535
+FAIL 16,0,12: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 65536 InvalidStateError: DOM Exception 11
+FAIL 16,0,13: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 65537 InvalidStateError: DOM Exception 11
+FAIL 16,0,14: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 65538 InvalidStateError: DOM Exception 11
+FAIL 16,0,15: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 65539 InvalidStateError: DOM Exception 11
+PASS 16,0,16: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 65540
+PASS 16,0,17: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -65537
+FAIL 16,0,18: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -65536 InvalidStateError: DOM Exception 11
+FAIL 16,0,19: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -65535 InvalidStateError: DOM Exception 11
+FAIL 16,0,20: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -65534 InvalidStateError: DOM Exception 11
+FAIL 16,0,21: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -65533 InvalidStateError: DOM Exception 11
+PASS 16,0,22: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -65532
+PASS 16,0,23: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 4294967295
+FAIL 16,0,24: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 4294967296 InvalidStateError: DOM Exception 11
+FAIL 16,0,25: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 4294967297 InvalidStateError: DOM Exception 11
+FAIL 16,0,26: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 4294967298 InvalidStateError: DOM Exception 11
+FAIL 16,0,27: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 4294967299 InvalidStateError: DOM Exception 11
+PASS 16,0,28: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 4294967300
+FAIL 16,0,29: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 16,0,30: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 16,0,31: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 16,0,32: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 16,0,33: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 3.5 InvalidStateError: DOM Exception 11
+PASS 16,0,34: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 4.5
+PASS 16,0,35: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -1.5
+FAIL 16,0,36: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 16,0,37: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 16,0,38: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 16,0,39: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 16,0,40: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how 3.5 InvalidStateError: DOM Exception 11
+PASS 16,0,41: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -73.5
+PASS 16,0,42: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -72.5
+PASS 16,0,43: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -71.5
+PASS 16,0,44: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -70.5
+PASS 16,0,45: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -69.5
+PASS 16,0,46: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how -68.5
+FAIL 16,0,47: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "0" InvalidStateError: DOM Exception 11
+FAIL 16,0,48: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "1" InvalidStateError: DOM Exception 11
+FAIL 16,0,49: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "2" InvalidStateError: DOM Exception 11
+FAIL 16,0,50: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "3" InvalidStateError: DOM Exception 11
+PASS 16,0,51: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-1"
+PASS 16,0,52: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "4"
+PASS 16,0,53: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "5"
+FAIL 16,0,54: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "NaN" InvalidStateError: DOM Exception 11
+FAIL 16,0,55: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "0" InvalidStateError: DOM Exception 11
+FAIL 16,0,56: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "Infinity" InvalidStateError: DOM Exception 11
+FAIL 16,0,57: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-Infinity" InvalidStateError: DOM Exception 11
+PASS 16,0,58: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "65535"
+FAIL 16,0,59: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "65536" InvalidStateError: DOM Exception 11
+FAIL 16,0,60: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "65537" InvalidStateError: DOM Exception 11
+FAIL 16,0,61: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "65538" InvalidStateError: DOM Exception 11
+FAIL 16,0,62: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "65539" InvalidStateError: DOM Exception 11
+PASS 16,0,63: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "65540"
+PASS 16,0,64: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-65537"
+FAIL 16,0,65: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-65536" InvalidStateError: DOM Exception 11
+FAIL 16,0,66: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-65535" InvalidStateError: DOM Exception 11
+FAIL 16,0,67: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-65534" InvalidStateError: DOM Exception 11
+FAIL 16,0,68: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-65533" InvalidStateError: DOM Exception 11
+PASS 16,0,69: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-65532"
+PASS 16,0,70: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "4294967295"
+FAIL 16,0,71: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "4294967296" InvalidStateError: DOM Exception 11
+FAIL 16,0,72: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "4294967297" InvalidStateError: DOM Exception 11
+FAIL 16,0,73: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "4294967298" InvalidStateError: DOM Exception 11
+FAIL 16,0,74: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "4294967299" InvalidStateError: DOM Exception 11
+PASS 16,0,75: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "4294967300"
+FAIL 16,0,76: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 16,0,77: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 16,0,78: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 16,0,79: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 16,0,80: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "3.5" InvalidStateError: DOM Exception 11
+PASS 16,0,81: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "4.5"
+PASS 16,0,82: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-1.5"
+FAIL 16,0,83: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 16,0,84: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 16,0,85: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 16,0,86: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 16,0,87: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "3.5" InvalidStateError: DOM Exception 11
+PASS 16,0,88: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-73.5"
+PASS 16,0,89: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-72.5"
+PASS 16,0,90: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-71.5"
+PASS 16,0,91: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-70.5"
+PASS 16,0,92: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-69.5"
+PASS 16,0,93: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "-68.5"
+FAIL 16,0,94: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "6.5536e4" InvalidStateError: DOM Exception 11
+FAIL 16,0,95: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how null InvalidStateError: DOM Exception 11
+FAIL 16,0,96: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how undefined InvalidStateError: DOM Exception 11
+FAIL 16,0,97: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how true InvalidStateError: DOM Exception 11
+FAIL 16,0,98: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how false InvalidStateError: DOM Exception 11
+FAIL 16,0,99: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "" InvalidStateError: DOM Exception 11
+FAIL 16,0,100: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 0 [detached], how "quasit" InvalidStateError: DOM Exception 11
+PASS 16,1,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 16,1,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 16,1,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 16,1,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 16,2,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 16,2,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 16,2,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 16,2,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 16,3,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 16,3,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 16,3,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 16,3,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 16,3,4: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -1
+PASS 16,3,5: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4
+PASS 16,3,6: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 5
+PASS 16,3,7: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how NaN
+PASS 16,3,8: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -0
+PASS 16,3,9: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how Infinity
+PASS 16,3,10: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -Infinity
+PASS 16,3,11: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65535
+PASS 16,3,12: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65536
+PASS 16,3,13: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65537
+PASS 16,3,14: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65538
+PASS 16,3,15: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65539
+PASS 16,3,16: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65540
+PASS 16,3,17: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65537
+PASS 16,3,18: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65536
+PASS 16,3,19: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65535
+PASS 16,3,20: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65534
+PASS 16,3,21: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65533
+PASS 16,3,22: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65532
+PASS 16,3,23: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967295
+PASS 16,3,24: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967296
+PASS 16,3,25: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967297
+PASS 16,3,26: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967298
+PASS 16,3,27: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967299
+PASS 16,3,28: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967300
+PASS 16,3,29: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -0.5
+PASS 16,3,30: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0.5
+PASS 16,3,31: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1.5
+PASS 16,3,32: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2.5
+PASS 16,3,33: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3.5
+PASS 16,3,34: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4.5
+PASS 16,3,35: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -1.5
+PASS 16,3,36: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -0.5
+PASS 16,3,37: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0.5
+PASS 16,3,38: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1.5
+PASS 16,3,39: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2.5
+PASS 16,3,40: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3.5
+PASS 16,3,41: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -73.5
+PASS 16,3,42: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -72.5
+PASS 16,3,43: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -71.5
+PASS 16,3,44: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -70.5
+PASS 16,3,45: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -69.5
+PASS 16,3,46: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -68.5
+PASS 16,3,47: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0"
+PASS 16,3,48: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "1"
+PASS 16,3,49: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "2"
+PASS 16,3,50: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "3"
+PASS 16,3,51: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-1"
+PASS 16,3,52: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4"
+PASS 16,3,53: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "5"
+PASS 16,3,54: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "NaN"
+PASS 16,3,55: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0"
+PASS 16,3,56: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "Infinity"
+PASS 16,3,57: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-Infinity"
+PASS 16,3,58: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65535"
+PASS 16,3,59: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65536"
+PASS 16,3,60: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65537"
+PASS 16,3,61: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65538"
+PASS 16,3,62: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65539"
+PASS 16,3,63: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65540"
+PASS 16,3,64: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65537"
+PASS 16,3,65: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65536"
+PASS 16,3,66: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65535"
+PASS 16,3,67: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65534"
+PASS 16,3,68: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65533"
+PASS 16,3,69: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65532"
+PASS 16,3,70: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967295"
+PASS 16,3,71: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967296"
+PASS 16,3,72: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967297"
+PASS 16,3,73: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967298"
+PASS 16,3,74: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967299"
+PASS 16,3,75: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967300"
+PASS 16,3,76: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-0.5"
+PASS 16,3,77: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0.5"
+PASS 16,3,78: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "1.5"
+PASS 16,3,79: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "2.5"
+PASS 16,3,80: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "3.5"
+PASS 16,3,81: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4.5"
+PASS 16,3,82: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-1.5"
+PASS 16,3,83: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-0.5"
+PASS 16,3,84: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0.5"
+PASS 16,3,85: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "1.5"
+PASS 16,3,86: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "2.5"
+PASS 16,3,87: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "3.5"
+PASS 16,3,88: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-73.5"
+PASS 16,3,89: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-72.5"
+PASS 16,3,90: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-71.5"
+PASS 16,3,91: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-70.5"
+PASS 16,3,92: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-69.5"
+PASS 16,3,93: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-68.5"
+PASS 16,3,94: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "6.5536e4"
+PASS 16,3,95: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how null
+PASS 16,3,96: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how undefined
+PASS 16,3,97: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how true
+PASS 16,3,98: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how false
+PASS 16,3,99: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how ""
+PASS 16,3,100: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "quasit"
+PASS 16,4,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 16,4,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 16,4,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 16,4,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 16,5,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 16,5,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 16,5,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 16,5,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 16,6,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 16,6,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 16,6,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 16,6,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 16,7,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 16,7,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 16,7,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 16,7,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 16,8,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 16,8,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 16,8,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 16,8,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 16,9,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 16,9,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 16,9,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 16,9,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 16,10,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 16,10,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 16,10,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 16,10,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 16,11,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 16,11,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 16,11,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 16,11,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 16,12,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 16,12,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 16,12,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 16,12,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 16,13,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 16,13,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 16,13,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 16,13,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 16,14,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 16,14,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 16,14,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 16,14,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 16,15,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 16,15,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 16,15,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 16,15,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 16,16,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 16,16,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 16,16,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 16,16,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 16,16,4: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -1
+PASS 16,16,5: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4
+PASS 16,16,6: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 5
+PASS 16,16,7: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how NaN
+PASS 16,16,8: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -0
+PASS 16,16,9: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how Infinity
+PASS 16,16,10: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -Infinity
+PASS 16,16,11: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65535
+PASS 16,16,12: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65536
+PASS 16,16,13: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65537
+PASS 16,16,14: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65538
+PASS 16,16,15: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65539
+PASS 16,16,16: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65540
+PASS 16,16,17: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65537
+PASS 16,16,18: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65536
+PASS 16,16,19: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65535
+PASS 16,16,20: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65534
+PASS 16,16,21: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65533
+PASS 16,16,22: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65532
+PASS 16,16,23: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967295
+PASS 16,16,24: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967296
+PASS 16,16,25: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967297
+PASS 16,16,26: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967298
+PASS 16,16,27: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967299
+PASS 16,16,28: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967300
+PASS 16,16,29: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -0.5
+PASS 16,16,30: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0.5
+PASS 16,16,31: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1.5
+PASS 16,16,32: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2.5
+PASS 16,16,33: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3.5
+PASS 16,16,34: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4.5
+PASS 16,16,35: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -1.5
+PASS 16,16,36: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -0.5
+PASS 16,16,37: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0.5
+PASS 16,16,38: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1.5
+PASS 16,16,39: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2.5
+PASS 16,16,40: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3.5
+PASS 16,16,41: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -73.5
+PASS 16,16,42: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -72.5
+PASS 16,16,43: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -71.5
+PASS 16,16,44: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -70.5
+PASS 16,16,45: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -69.5
+PASS 16,16,46: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -68.5
+PASS 16,16,47: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0"
+PASS 16,16,48: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "1"
+PASS 16,16,49: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "2"
+PASS 16,16,50: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "3"
+PASS 16,16,51: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-1"
+PASS 16,16,52: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4"
+PASS 16,16,53: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "5"
+PASS 16,16,54: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "NaN"
+PASS 16,16,55: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0"
+PASS 16,16,56: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "Infinity"
+PASS 16,16,57: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-Infinity"
+PASS 16,16,58: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65535"
+PASS 16,16,59: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65536"
+PASS 16,16,60: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65537"
+PASS 16,16,61: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65538"
+PASS 16,16,62: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65539"
+PASS 16,16,63: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65540"
+PASS 16,16,64: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65537"
+PASS 16,16,65: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65536"
+PASS 16,16,66: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65535"
+PASS 16,16,67: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65534"
+PASS 16,16,68: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65533"
+PASS 16,16,69: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65532"
+PASS 16,16,70: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967295"
+PASS 16,16,71: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967296"
+PASS 16,16,72: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967297"
+PASS 16,16,73: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967298"
+PASS 16,16,74: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967299"
+PASS 16,16,75: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967300"
+PASS 16,16,76: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-0.5"
+PASS 16,16,77: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0.5"
+PASS 16,16,78: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "1.5"
+PASS 16,16,79: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "2.5"
+PASS 16,16,80: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "3.5"
+PASS 16,16,81: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4.5"
+PASS 16,16,82: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-1.5"
+PASS 16,16,83: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-0.5"
+PASS 16,16,84: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0.5"
+PASS 16,16,85: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "1.5"
+PASS 16,16,86: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "2.5"
+PASS 16,16,87: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "3.5"
+PASS 16,16,88: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-73.5"
+PASS 16,16,89: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-72.5"
+PASS 16,16,90: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-71.5"
+PASS 16,16,91: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-70.5"
+PASS 16,16,92: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-69.5"
+PASS 16,16,93: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-68.5"
+PASS 16,16,94: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "6.5536e4"
+PASS 16,16,95: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how null
+PASS 16,16,96: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how undefined
+PASS 16,16,97: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how true
+PASS 16,16,98: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how false
+PASS 16,16,99: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how ""
+PASS 16,16,100: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "quasit"
+PASS 16,17,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 16,17,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 16,17,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 16,17,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 16,18,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 16,18,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 16,18,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 16,18,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 16,19,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 16,19,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 16,19,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 16,19,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 16,20,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 16,20,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 16,20,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 16,20,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 16,21,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 16,21,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 16,21,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 16,21,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 16,21,4: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -1
+PASS 16,21,5: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4
+PASS 16,21,6: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 5
+PASS 16,21,7: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how NaN
+PASS 16,21,8: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -0
+PASS 16,21,9: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how Infinity
+PASS 16,21,10: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -Infinity
+PASS 16,21,11: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65535
+PASS 16,21,12: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65536
+PASS 16,21,13: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65537
+PASS 16,21,14: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65538
+PASS 16,21,15: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65539
+PASS 16,21,16: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65540
+PASS 16,21,17: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65537
+PASS 16,21,18: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65536
+PASS 16,21,19: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65535
+PASS 16,21,20: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65534
+PASS 16,21,21: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65533
+PASS 16,21,22: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65532
+PASS 16,21,23: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967295
+PASS 16,21,24: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967296
+PASS 16,21,25: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967297
+PASS 16,21,26: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967298
+PASS 16,21,27: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967299
+PASS 16,21,28: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967300
+PASS 16,21,29: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -0.5
+PASS 16,21,30: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0.5
+PASS 16,21,31: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1.5
+PASS 16,21,32: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2.5
+PASS 16,21,33: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3.5
+PASS 16,21,34: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4.5
+PASS 16,21,35: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -1.5
+PASS 16,21,36: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -0.5
+PASS 16,21,37: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0.5
+PASS 16,21,38: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1.5
+PASS 16,21,39: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2.5
+PASS 16,21,40: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3.5
+PASS 16,21,41: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -73.5
+PASS 16,21,42: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -72.5
+PASS 16,21,43: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -71.5
+PASS 16,21,44: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -70.5
+PASS 16,21,45: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -69.5
+PASS 16,21,46: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -68.5
+PASS 16,21,47: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0"
+PASS 16,21,48: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "1"
+PASS 16,21,49: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "2"
+PASS 16,21,50: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "3"
+PASS 16,21,51: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-1"
+PASS 16,21,52: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4"
+PASS 16,21,53: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "5"
+PASS 16,21,54: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "NaN"
+PASS 16,21,55: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0"
+PASS 16,21,56: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "Infinity"
+PASS 16,21,57: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-Infinity"
+PASS 16,21,58: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65535"
+PASS 16,21,59: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65536"
+PASS 16,21,60: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65537"
+PASS 16,21,61: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65538"
+PASS 16,21,62: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65539"
+PASS 16,21,63: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65540"
+PASS 16,21,64: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65537"
+PASS 16,21,65: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65536"
+PASS 16,21,66: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65535"
+PASS 16,21,67: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65534"
+PASS 16,21,68: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65533"
+PASS 16,21,69: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65532"
+PASS 16,21,70: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967295"
+PASS 16,21,71: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967296"
+PASS 16,21,72: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967297"
+PASS 16,21,73: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967298"
+PASS 16,21,74: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967299"
+PASS 16,21,75: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967300"
+PASS 16,21,76: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-0.5"
+PASS 16,21,77: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0.5"
+PASS 16,21,78: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "1.5"
+PASS 16,21,79: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "2.5"
+PASS 16,21,80: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "3.5"
+PASS 16,21,81: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4.5"
+PASS 16,21,82: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-1.5"
+PASS 16,21,83: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-0.5"
+PASS 16,21,84: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0.5"
+PASS 16,21,85: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "1.5"
+PASS 16,21,86: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "2.5"
+PASS 16,21,87: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "3.5"
+PASS 16,21,88: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-73.5"
+PASS 16,21,89: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-72.5"
+PASS 16,21,90: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-71.5"
+PASS 16,21,91: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-70.5"
+PASS 16,21,92: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-69.5"
+PASS 16,21,93: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-68.5"
+PASS 16,21,94: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "6.5536e4"
+PASS 16,21,95: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how null
+PASS 16,21,96: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how undefined
+PASS 16,21,97: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how true
+PASS 16,21,98: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how false
+PASS 16,21,99: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how ""
+PASS 16,21,100: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "quasit"
+PASS 16,22,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 16,22,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 16,22,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 16,22,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 16,23,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 16,23,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 16,23,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 16,23,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 16,24,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 24 [document, 0, document, 1], how 0
+PASS 16,24,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 24 [document, 0, document, 1], how 1
+PASS 16,24,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 24 [document, 0, document, 1], how 2
+PASS 16,24,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 24 [document, 0, document, 1], how 3
+PASS 16,25,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 25 [document, 0, document, 2], how 0
+PASS 16,25,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 25 [document, 0, document, 2], how 1
+PASS 16,25,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 25 [document, 0, document, 2], how 2
+PASS 16,25,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 25 [document, 0, document, 2], how 3
+PASS 16,26,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 26 [comment, 2, comment, 3], how 0
+PASS 16,26,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 26 [comment, 2, comment, 3], how 1
+PASS 16,26,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 26 [comment, 2, comment, 3], how 2
+PASS 16,26,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 26 [comment, 2, comment, 3], how 3
+PASS 16,27,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 16,27,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 16,27,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 16,27,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 16,27,4: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -1
+PASS 16,27,5: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 4
+PASS 16,27,6: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 5
+PASS 16,27,7: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how NaN
+PASS 16,27,8: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -0
+PASS 16,27,9: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how Infinity
+PASS 16,27,10: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -Infinity
+PASS 16,27,11: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 65535
+PASS 16,27,12: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 65536
+PASS 16,27,13: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 65537
+PASS 16,27,14: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 65538
+PASS 16,27,15: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 65539
+PASS 16,27,16: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 65540
+PASS 16,27,17: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -65537
+PASS 16,27,18: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -65536
+PASS 16,27,19: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -65535
+PASS 16,27,20: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -65534
+PASS 16,27,21: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -65533
+PASS 16,27,22: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -65532
+PASS 16,27,23: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 4294967295
+PASS 16,27,24: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 4294967296
+PASS 16,27,25: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 4294967297
+PASS 16,27,26: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 4294967298
+PASS 16,27,27: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 4294967299
+PASS 16,27,28: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 4294967300
+PASS 16,27,29: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -0.5
+PASS 16,27,30: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 0.5
+PASS 16,27,31: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 1.5
+PASS 16,27,32: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 2.5
+PASS 16,27,33: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 3.5
+PASS 16,27,34: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 4.5
+PASS 16,27,35: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -1.5
+PASS 16,27,36: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -0.5
+PASS 16,27,37: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 0.5
+PASS 16,27,38: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 1.5
+PASS 16,27,39: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 2.5
+PASS 16,27,40: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how 3.5
+PASS 16,27,41: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -73.5
+PASS 16,27,42: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -72.5
+PASS 16,27,43: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -71.5
+PASS 16,27,44: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -70.5
+PASS 16,27,45: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -69.5
+PASS 16,27,46: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how -68.5
+PASS 16,27,47: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "0"
+PASS 16,27,48: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "1"
+PASS 16,27,49: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "2"
+PASS 16,27,50: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "3"
+PASS 16,27,51: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-1"
+PASS 16,27,52: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "4"
+PASS 16,27,53: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "5"
+PASS 16,27,54: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "NaN"
+PASS 16,27,55: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "0"
+PASS 16,27,56: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "Infinity"
+PASS 16,27,57: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-Infinity"
+PASS 16,27,58: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "65535"
+PASS 16,27,59: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "65536"
+PASS 16,27,60: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "65537"
+PASS 16,27,61: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "65538"
+PASS 16,27,62: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "65539"
+PASS 16,27,63: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "65540"
+PASS 16,27,64: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-65537"
+PASS 16,27,65: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-65536"
+PASS 16,27,66: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-65535"
+PASS 16,27,67: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-65534"
+PASS 16,27,68: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-65533"
+PASS 16,27,69: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-65532"
+PASS 16,27,70: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "4294967295"
+PASS 16,27,71: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "4294967296"
+PASS 16,27,72: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "4294967297"
+PASS 16,27,73: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "4294967298"
+PASS 16,27,74: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "4294967299"
+PASS 16,27,75: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "4294967300"
+PASS 16,27,76: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-0.5"
+PASS 16,27,77: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "0.5"
+PASS 16,27,78: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "1.5"
+PASS 16,27,79: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "2.5"
+PASS 16,27,80: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "3.5"
+PASS 16,27,81: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "4.5"
+PASS 16,27,82: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-1.5"
+PASS 16,27,83: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-0.5"
+PASS 16,27,84: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "0.5"
+PASS 16,27,85: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "1.5"
+PASS 16,27,86: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "2.5"
+PASS 16,27,87: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "3.5"
+PASS 16,27,88: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-73.5"
+PASS 16,27,89: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-72.5"
+PASS 16,27,90: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-71.5"
+PASS 16,27,91: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-70.5"
+PASS 16,27,92: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-69.5"
+PASS 16,27,93: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "-68.5"
+PASS 16,27,94: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "6.5536e4"
+PASS 16,27,95: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how null
+PASS 16,27,96: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how undefined
+PASS 16,27,97: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how true
+PASS 16,27,98: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how false
+PASS 16,27,99: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how ""
+PASS 16,27,100: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 27 [testDiv, 0, comment, 5], how "quasit"
+PASS 16,28,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 16,28,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 16,28,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 16,28,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 16,29,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 16,29,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 16,29,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 16,29,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 16,30,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 16,30,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 16,30,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 16,30,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 16,31,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 16,31,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 16,31,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 16,31,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 16,32,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 16,32,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 16,32,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 16,32,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 16,33,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 16,33,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 16,33,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 16,33,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 16,34,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 16,34,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 16,34,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 16,34,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 16,35,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 16,35,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 16,35,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 16,35,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 16,36,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 16,36,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 16,36,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 16,36,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 16,37,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 16,37,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 16,37,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 16,37,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 16,38,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 16,38,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 16,38,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 16,38,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 16,39,0: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range same as first range, how 0
+PASS 16,39,1: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range same as first range, how 1
+PASS 16,39,2: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range same as first range, how 2
+PASS 16,39,3: context range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], argument range same as first range, how 3
+FAIL 17,0,0: context range 17 [paras[0], 0, paras[0], 1], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 17,0,1: context range 17 [paras[0], 0, paras[0], 1], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 17,0,2: context range 17 [paras[0], 0, paras[0], 1], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 17,0,3: context range 17 [paras[0], 0, paras[0], 1], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 17,1,0: context range 17 [paras[0], 0, paras[0], 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 17,1,1: context range 17 [paras[0], 0, paras[0], 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 17,1,2: context range 17 [paras[0], 0, paras[0], 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 17,1,3: context range 17 [paras[0], 0, paras[0], 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 17,2,0: context range 17 [paras[0], 0, paras[0], 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 17,2,1: context range 17 [paras[0], 0, paras[0], 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 17,2,2: context range 17 [paras[0], 0, paras[0], 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 17,2,3: context range 17 [paras[0], 0, paras[0], 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 17,3,0: context range 17 [paras[0], 0, paras[0], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 17,3,1: context range 17 [paras[0], 0, paras[0], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 17,3,2: context range 17 [paras[0], 0, paras[0], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 17,3,3: context range 17 [paras[0], 0, paras[0], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 17,4,0: context range 17 [paras[0], 0, paras[0], 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 17,4,1: context range 17 [paras[0], 0, paras[0], 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 17,4,2: context range 17 [paras[0], 0, paras[0], 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 17,4,3: context range 17 [paras[0], 0, paras[0], 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 17,5,0: context range 17 [paras[0], 0, paras[0], 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 17,5,1: context range 17 [paras[0], 0, paras[0], 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 17,5,2: context range 17 [paras[0], 0, paras[0], 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 17,5,3: context range 17 [paras[0], 0, paras[0], 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 17,6,0: context range 17 [paras[0], 0, paras[0], 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 17,6,1: context range 17 [paras[0], 0, paras[0], 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 17,6,2: context range 17 [paras[0], 0, paras[0], 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 17,6,3: context range 17 [paras[0], 0, paras[0], 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 17,7,0: context range 17 [paras[0], 0, paras[0], 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 17,7,1: context range 17 [paras[0], 0, paras[0], 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 17,7,2: context range 17 [paras[0], 0, paras[0], 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 17,7,3: context range 17 [paras[0], 0, paras[0], 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 17,8,0: context range 17 [paras[0], 0, paras[0], 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 17,8,1: context range 17 [paras[0], 0, paras[0], 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 17,8,2: context range 17 [paras[0], 0, paras[0], 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 17,8,3: context range 17 [paras[0], 0, paras[0], 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 17,9,0: context range 17 [paras[0], 0, paras[0], 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 17,9,1: context range 17 [paras[0], 0, paras[0], 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 17,9,2: context range 17 [paras[0], 0, paras[0], 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 17,9,3: context range 17 [paras[0], 0, paras[0], 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 17,10,0: context range 17 [paras[0], 0, paras[0], 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 17,10,1: context range 17 [paras[0], 0, paras[0], 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 17,10,2: context range 17 [paras[0], 0, paras[0], 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 17,10,3: context range 17 [paras[0], 0, paras[0], 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 17,11,0: context range 17 [paras[0], 0, paras[0], 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 17,11,1: context range 17 [paras[0], 0, paras[0], 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 17,11,2: context range 17 [paras[0], 0, paras[0], 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 17,11,3: context range 17 [paras[0], 0, paras[0], 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 17,12,0: context range 17 [paras[0], 0, paras[0], 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 17,12,1: context range 17 [paras[0], 0, paras[0], 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 17,12,2: context range 17 [paras[0], 0, paras[0], 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 17,12,3: context range 17 [paras[0], 0, paras[0], 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 17,13,0: context range 17 [paras[0], 0, paras[0], 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 17,13,1: context range 17 [paras[0], 0, paras[0], 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 17,13,2: context range 17 [paras[0], 0, paras[0], 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 17,13,3: context range 17 [paras[0], 0, paras[0], 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 17,14,0: context range 17 [paras[0], 0, paras[0], 1], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 17,14,1: context range 17 [paras[0], 0, paras[0], 1], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 17,14,2: context range 17 [paras[0], 0, paras[0], 1], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 17,14,3: context range 17 [paras[0], 0, paras[0], 1], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 17,15,0: context range 17 [paras[0], 0, paras[0], 1], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 17,15,1: context range 17 [paras[0], 0, paras[0], 1], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 17,15,2: context range 17 [paras[0], 0, paras[0], 1], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 17,15,3: context range 17 [paras[0], 0, paras[0], 1], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 17,16,0: context range 17 [paras[0], 0, paras[0], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 17,16,1: context range 17 [paras[0], 0, paras[0], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 17,16,2: context range 17 [paras[0], 0, paras[0], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 17,16,3: context range 17 [paras[0], 0, paras[0], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 17,17,0: context range 17 [paras[0], 0, paras[0], 1], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 17,17,1: context range 17 [paras[0], 0, paras[0], 1], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 17,17,2: context range 17 [paras[0], 0, paras[0], 1], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 17,17,3: context range 17 [paras[0], 0, paras[0], 1], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 17,18,0: context range 17 [paras[0], 0, paras[0], 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 17,18,1: context range 17 [paras[0], 0, paras[0], 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 17,18,2: context range 17 [paras[0], 0, paras[0], 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 17,18,3: context range 17 [paras[0], 0, paras[0], 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 17,19,0: context range 17 [paras[0], 0, paras[0], 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 17,19,1: context range 17 [paras[0], 0, paras[0], 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 17,19,2: context range 17 [paras[0], 0, paras[0], 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 17,19,3: context range 17 [paras[0], 0, paras[0], 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 17,20,0: context range 17 [paras[0], 0, paras[0], 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 17,20,1: context range 17 [paras[0], 0, paras[0], 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 17,20,2: context range 17 [paras[0], 0, paras[0], 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 17,20,3: context range 17 [paras[0], 0, paras[0], 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 17,21,0: context range 17 [paras[0], 0, paras[0], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 17,21,1: context range 17 [paras[0], 0, paras[0], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 17,21,2: context range 17 [paras[0], 0, paras[0], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 17,21,3: context range 17 [paras[0], 0, paras[0], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 17,22,0: context range 17 [paras[0], 0, paras[0], 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 17,22,1: context range 17 [paras[0], 0, paras[0], 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 17,22,2: context range 17 [paras[0], 0, paras[0], 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 17,22,3: context range 17 [paras[0], 0, paras[0], 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 17,23,0: context range 17 [paras[0], 0, paras[0], 1], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 17,23,1: context range 17 [paras[0], 0, paras[0], 1], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 17,23,2: context range 17 [paras[0], 0, paras[0], 1], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 17,23,3: context range 17 [paras[0], 0, paras[0], 1], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 17,24,0: context range 17 [paras[0], 0, paras[0], 1], argument range 24 [document, 0, document, 1], how 0
+PASS 17,24,1: context range 17 [paras[0], 0, paras[0], 1], argument range 24 [document, 0, document, 1], how 1
+PASS 17,24,2: context range 17 [paras[0], 0, paras[0], 1], argument range 24 [document, 0, document, 1], how 2
+PASS 17,24,3: context range 17 [paras[0], 0, paras[0], 1], argument range 24 [document, 0, document, 1], how 3
+PASS 17,25,0: context range 17 [paras[0], 0, paras[0], 1], argument range 25 [document, 0, document, 2], how 0
+PASS 17,25,1: context range 17 [paras[0], 0, paras[0], 1], argument range 25 [document, 0, document, 2], how 1
+PASS 17,25,2: context range 17 [paras[0], 0, paras[0], 1], argument range 25 [document, 0, document, 2], how 2
+PASS 17,25,3: context range 17 [paras[0], 0, paras[0], 1], argument range 25 [document, 0, document, 2], how 3
+PASS 17,26,0: context range 17 [paras[0], 0, paras[0], 1], argument range 26 [comment, 2, comment, 3], how 0
+PASS 17,26,1: context range 17 [paras[0], 0, paras[0], 1], argument range 26 [comment, 2, comment, 3], how 1
+PASS 17,26,2: context range 17 [paras[0], 0, paras[0], 1], argument range 26 [comment, 2, comment, 3], how 2
+PASS 17,26,3: context range 17 [paras[0], 0, paras[0], 1], argument range 26 [comment, 2, comment, 3], how 3
+PASS 17,27,0: context range 17 [paras[0], 0, paras[0], 1], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 17,27,1: context range 17 [paras[0], 0, paras[0], 1], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 17,27,2: context range 17 [paras[0], 0, paras[0], 1], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 17,27,3: context range 17 [paras[0], 0, paras[0], 1], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 17,28,0: context range 17 [paras[0], 0, paras[0], 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 17,28,1: context range 17 [paras[0], 0, paras[0], 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 17,28,2: context range 17 [paras[0], 0, paras[0], 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 17,28,3: context range 17 [paras[0], 0, paras[0], 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 17,29,0: context range 17 [paras[0], 0, paras[0], 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 17,29,1: context range 17 [paras[0], 0, paras[0], 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 17,29,2: context range 17 [paras[0], 0, paras[0], 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 17,29,3: context range 17 [paras[0], 0, paras[0], 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 17,30,0: context range 17 [paras[0], 0, paras[0], 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 17,30,1: context range 17 [paras[0], 0, paras[0], 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 17,30,2: context range 17 [paras[0], 0, paras[0], 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 17,30,3: context range 17 [paras[0], 0, paras[0], 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 17,31,0: context range 17 [paras[0], 0, paras[0], 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 17,31,1: context range 17 [paras[0], 0, paras[0], 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 17,31,2: context range 17 [paras[0], 0, paras[0], 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 17,31,3: context range 17 [paras[0], 0, paras[0], 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 17,32,0: context range 17 [paras[0], 0, paras[0], 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 17,32,1: context range 17 [paras[0], 0, paras[0], 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 17,32,2: context range 17 [paras[0], 0, paras[0], 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 17,32,3: context range 17 [paras[0], 0, paras[0], 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 17,33,0: context range 17 [paras[0], 0, paras[0], 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 17,33,1: context range 17 [paras[0], 0, paras[0], 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 17,33,2: context range 17 [paras[0], 0, paras[0], 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 17,33,3: context range 17 [paras[0], 0, paras[0], 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 17,34,0: context range 17 [paras[0], 0, paras[0], 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 17,34,1: context range 17 [paras[0], 0, paras[0], 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 17,34,2: context range 17 [paras[0], 0, paras[0], 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 17,34,3: context range 17 [paras[0], 0, paras[0], 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 17,35,0: context range 17 [paras[0], 0, paras[0], 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 17,35,1: context range 17 [paras[0], 0, paras[0], 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 17,35,2: context range 17 [paras[0], 0, paras[0], 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 17,35,3: context range 17 [paras[0], 0, paras[0], 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 17,36,0: context range 17 [paras[0], 0, paras[0], 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 17,36,1: context range 17 [paras[0], 0, paras[0], 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 17,36,2: context range 17 [paras[0], 0, paras[0], 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 17,36,3: context range 17 [paras[0], 0, paras[0], 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 17,37,0: context range 17 [paras[0], 0, paras[0], 1], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 17,37,1: context range 17 [paras[0], 0, paras[0], 1], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 17,37,2: context range 17 [paras[0], 0, paras[0], 1], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 17,37,3: context range 17 [paras[0], 0, paras[0], 1], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 17,38,0: context range 17 [paras[0], 0, paras[0], 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 17,38,1: context range 17 [paras[0], 0, paras[0], 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 17,38,2: context range 17 [paras[0], 0, paras[0], 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 17,38,3: context range 17 [paras[0], 0, paras[0], 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 17,39,0: context range 17 [paras[0], 0, paras[0], 1], argument range same as first range, how 0
+PASS 17,39,1: context range 17 [paras[0], 0, paras[0], 1], argument range same as first range, how 1
+PASS 17,39,2: context range 17 [paras[0], 0, paras[0], 1], argument range same as first range, how 2
+PASS 17,39,3: context range 17 [paras[0], 0, paras[0], 1], argument range same as first range, how 3
+FAIL 18,0,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 18,0,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 18,0,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 18,0,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 18,1,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 18,1,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 18,1,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 18,1,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 18,2,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 18,2,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 18,2,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 18,2,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 18,3,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 18,3,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 18,3,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 18,3,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 18,4,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 18,4,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 18,4,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 18,4,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 18,5,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 18,5,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 18,5,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 18,5,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 18,6,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 18,6,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 18,6,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 18,6,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 18,7,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 18,7,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 18,7,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 18,7,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 18,8,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 18,8,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 18,8,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 18,8,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 18,9,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 18,9,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 18,9,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 18,9,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 18,10,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 18,10,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 18,10,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 18,10,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 18,11,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 18,11,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 18,11,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 18,11,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 18,12,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 18,12,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 18,12,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 18,12,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 18,13,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 18,13,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 18,13,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 18,13,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 18,14,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 18,14,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 18,14,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 18,14,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 18,15,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 18,15,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 18,15,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 18,15,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 18,16,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 18,16,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 18,16,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 18,16,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 18,17,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 18,17,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 18,17,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 18,17,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 18,18,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 18,18,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 18,18,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 18,18,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 18,19,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 18,19,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 18,19,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 18,19,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 18,20,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 18,20,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 18,20,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 18,20,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 18,21,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 18,21,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 18,21,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 18,21,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 18,22,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 18,22,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 18,22,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 18,22,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 18,23,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 18,23,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 18,23,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 18,23,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 18,24,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 24 [document, 0, document, 1], how 0
+PASS 18,24,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 24 [document, 0, document, 1], how 1
+PASS 18,24,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 24 [document, 0, document, 1], how 2
+PASS 18,24,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 24 [document, 0, document, 1], how 3
+PASS 18,25,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 25 [document, 0, document, 2], how 0
+PASS 18,25,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 25 [document, 0, document, 2], how 1
+PASS 18,25,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 25 [document, 0, document, 2], how 2
+PASS 18,25,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 25 [document, 0, document, 2], how 3
+PASS 18,26,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 26 [comment, 2, comment, 3], how 0
+PASS 18,26,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 26 [comment, 2, comment, 3], how 1
+PASS 18,26,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 26 [comment, 2, comment, 3], how 2
+PASS 18,26,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 26 [comment, 2, comment, 3], how 3
+PASS 18,27,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 18,27,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 18,27,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 18,27,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 18,28,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 18,28,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 18,28,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 18,28,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 18,29,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 18,29,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 18,29,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 18,29,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 18,30,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 18,30,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 18,30,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 18,30,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 18,31,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 18,31,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 18,31,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 18,31,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 18,32,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 18,32,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 18,32,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 18,32,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 18,33,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 18,33,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 18,33,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 18,33,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 18,34,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 18,34,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 18,34,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 18,34,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 18,35,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 18,35,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 18,35,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 18,35,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 18,36,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 18,36,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 18,36,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 18,36,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 18,37,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 18,37,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 18,37,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 18,37,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 18,38,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 18,38,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 18,38,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 18,38,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 18,39,0: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range same as first range, how 0
+PASS 18,39,1: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range same as first range, how 1
+PASS 18,39,2: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range same as first range, how 2
+PASS 18,39,3: context range 18 [detachedPara1, 0, detachedPara1, 1], argument range same as first range, how 3
+FAIL 19,0,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 19,0,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 19,0,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 19,0,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 19,1,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 19,1,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 19,1,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 19,1,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 19,2,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 19,2,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 19,2,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 19,2,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 19,3,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 19,3,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 19,3,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 19,3,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 19,4,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 19,4,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 19,4,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 19,4,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 19,5,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 19,5,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 19,5,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 19,5,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 19,6,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 19,6,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 19,6,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 19,6,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 19,7,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 19,7,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 19,7,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 19,7,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 19,8,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 19,8,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 19,8,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 19,8,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 19,9,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 19,9,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 19,9,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 19,9,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 19,10,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 19,10,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 19,10,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 19,10,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 19,11,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 19,11,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 19,11,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 19,11,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 19,12,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 19,12,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 19,12,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 19,12,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 19,13,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 19,13,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 19,13,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 19,13,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 19,14,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 19,14,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 19,14,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 19,14,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 19,15,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 19,15,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 19,15,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 19,15,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 19,16,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 19,16,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 19,16,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 19,16,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 19,17,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 19,17,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 19,17,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 19,17,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 19,18,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 19,18,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 19,18,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 19,18,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 19,19,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 19,19,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 19,19,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 19,19,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 19,20,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 19,20,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 19,20,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 19,20,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 19,21,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 19,21,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 19,21,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 19,21,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 19,22,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 19,22,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 19,22,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 19,22,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 19,23,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 19,23,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 19,23,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 19,23,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 19,24,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 24 [document, 0, document, 1], how 0
+PASS 19,24,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 24 [document, 0, document, 1], how 1
+PASS 19,24,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 24 [document, 0, document, 1], how 2
+PASS 19,24,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 24 [document, 0, document, 1], how 3
+PASS 19,25,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 25 [document, 0, document, 2], how 0
+PASS 19,25,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 25 [document, 0, document, 2], how 1
+PASS 19,25,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 25 [document, 0, document, 2], how 2
+PASS 19,25,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 25 [document, 0, document, 2], how 3
+PASS 19,26,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 26 [comment, 2, comment, 3], how 0
+PASS 19,26,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 26 [comment, 2, comment, 3], how 1
+PASS 19,26,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 26 [comment, 2, comment, 3], how 2
+PASS 19,26,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 26 [comment, 2, comment, 3], how 3
+PASS 19,27,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 19,27,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 19,27,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 19,27,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 19,28,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 19,28,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 19,28,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 19,28,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 19,29,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 19,29,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 19,29,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 19,29,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 19,30,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 19,30,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 19,30,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 19,30,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 19,31,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 19,31,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 19,31,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 19,31,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 19,32,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 19,32,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 19,32,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 19,32,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 19,33,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 19,33,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 19,33,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 19,33,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 19,34,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 19,34,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 19,34,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 19,34,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 19,35,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 19,35,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 19,35,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 19,35,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 19,36,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 19,36,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 19,36,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 19,36,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 19,37,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 19,37,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 19,37,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 19,37,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 19,38,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 19,38,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 19,38,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 19,38,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 19,39,0: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range same as first range, how 0
+PASS 19,39,1: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range same as first range, how 1
+PASS 19,39,2: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range same as first range, how 2
+PASS 19,39,3: context range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], argument range same as first range, how 3
+FAIL 20,0,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 20,0,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 20,0,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 20,0,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 20,1,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 20,1,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 20,1,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 20,1,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 20,2,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 20,2,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 20,2,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 20,2,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 20,3,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 20,3,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 20,3,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 20,3,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 20,4,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 20,4,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 20,4,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 20,4,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 20,5,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 20,5,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 20,5,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 20,5,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 20,6,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 20,6,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 20,6,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 20,6,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 20,7,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 20,7,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 20,7,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 20,7,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 20,8,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 20,8,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 20,8,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 20,8,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 20,9,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 20,9,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 20,9,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 20,9,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 20,10,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 20,10,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 20,10,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 20,10,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 20,11,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 20,11,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 20,11,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 20,11,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 20,12,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 20,12,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 20,12,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 20,12,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 20,13,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 20,13,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 20,13,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 20,13,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 20,14,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 20,14,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 20,14,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 20,14,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 20,15,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 20,15,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 20,15,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 20,15,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 20,16,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 20,16,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 20,16,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 20,16,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 20,17,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 20,17,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 20,17,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 20,17,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 20,18,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 20,18,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 20,18,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 20,18,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 20,19,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 20,19,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 20,19,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 20,19,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 20,20,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 20,20,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 20,20,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 20,20,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 20,21,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 20,21,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 20,21,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 20,21,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 20,22,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 20,22,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 20,22,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 20,22,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 20,23,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 20,23,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 20,23,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 20,23,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 20,24,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 24 [document, 0, document, 1], how 0
+PASS 20,24,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 24 [document, 0, document, 1], how 1
+PASS 20,24,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 24 [document, 0, document, 1], how 2
+PASS 20,24,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 24 [document, 0, document, 1], how 3
+PASS 20,25,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 25 [document, 0, document, 2], how 0
+PASS 20,25,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 25 [document, 0, document, 2], how 1
+PASS 20,25,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 25 [document, 0, document, 2], how 2
+PASS 20,25,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 25 [document, 0, document, 2], how 3
+PASS 20,26,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 26 [comment, 2, comment, 3], how 0
+PASS 20,26,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 26 [comment, 2, comment, 3], how 1
+PASS 20,26,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 26 [comment, 2, comment, 3], how 2
+PASS 20,26,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 26 [comment, 2, comment, 3], how 3
+PASS 20,27,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 20,27,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 20,27,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 20,27,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 20,28,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 20,28,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 20,28,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 20,28,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 20,29,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 20,29,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 20,29,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 20,29,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 20,30,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 20,30,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 20,30,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 20,30,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 20,31,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 20,31,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 20,31,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 20,31,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 20,32,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 20,32,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 20,32,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 20,32,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 20,33,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 20,33,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 20,33,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 20,33,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 20,34,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 20,34,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 20,34,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 20,34,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 20,35,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 20,35,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 20,35,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 20,35,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 20,36,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 20,36,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 20,36,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 20,36,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 20,37,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 20,37,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 20,37,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 20,37,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 20,38,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 20,38,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 20,38,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 20,38,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 20,39,0: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range same as first range, how 0
+PASS 20,39,1: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range same as first range, how 1
+PASS 20,39,2: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range same as first range, how 2
+PASS 20,39,3: context range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], argument range same as first range, how 3
+FAIL 21,0,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 21,0,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 21,0,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 21,0,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 21,0,4: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -1
+PASS 21,0,5: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 4
+PASS 21,0,6: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 5
+FAIL 21,0,7: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how NaN InvalidStateError: DOM Exception 11
+FAIL 21,0,8: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -0 InvalidStateError: DOM Exception 11
+FAIL 21,0,9: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how Infinity InvalidStateError: DOM Exception 11
+FAIL 21,0,10: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -Infinity InvalidStateError: DOM Exception 11
+PASS 21,0,11: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 65535
+FAIL 21,0,12: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 65536 InvalidStateError: DOM Exception 11
+FAIL 21,0,13: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 65537 InvalidStateError: DOM Exception 11
+FAIL 21,0,14: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 65538 InvalidStateError: DOM Exception 11
+FAIL 21,0,15: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 65539 InvalidStateError: DOM Exception 11
+PASS 21,0,16: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 65540
+PASS 21,0,17: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -65537
+FAIL 21,0,18: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -65536 InvalidStateError: DOM Exception 11
+FAIL 21,0,19: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -65535 InvalidStateError: DOM Exception 11
+FAIL 21,0,20: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -65534 InvalidStateError: DOM Exception 11
+FAIL 21,0,21: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -65533 InvalidStateError: DOM Exception 11
+PASS 21,0,22: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -65532
+PASS 21,0,23: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 4294967295
+FAIL 21,0,24: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 4294967296 InvalidStateError: DOM Exception 11
+FAIL 21,0,25: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 4294967297 InvalidStateError: DOM Exception 11
+FAIL 21,0,26: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 4294967298 InvalidStateError: DOM Exception 11
+FAIL 21,0,27: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 4294967299 InvalidStateError: DOM Exception 11
+PASS 21,0,28: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 4294967300
+FAIL 21,0,29: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 21,0,30: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 21,0,31: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 21,0,32: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 21,0,33: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 3.5 InvalidStateError: DOM Exception 11
+PASS 21,0,34: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 4.5
+PASS 21,0,35: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -1.5
+FAIL 21,0,36: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 21,0,37: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 21,0,38: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 21,0,39: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 21,0,40: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how 3.5 InvalidStateError: DOM Exception 11
+PASS 21,0,41: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -73.5
+PASS 21,0,42: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -72.5
+PASS 21,0,43: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -71.5
+PASS 21,0,44: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -70.5
+PASS 21,0,45: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -69.5
+PASS 21,0,46: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how -68.5
+FAIL 21,0,47: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "0" InvalidStateError: DOM Exception 11
+FAIL 21,0,48: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "1" InvalidStateError: DOM Exception 11
+FAIL 21,0,49: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "2" InvalidStateError: DOM Exception 11
+FAIL 21,0,50: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "3" InvalidStateError: DOM Exception 11
+PASS 21,0,51: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-1"
+PASS 21,0,52: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "4"
+PASS 21,0,53: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "5"
+FAIL 21,0,54: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "NaN" InvalidStateError: DOM Exception 11
+FAIL 21,0,55: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "0" InvalidStateError: DOM Exception 11
+FAIL 21,0,56: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "Infinity" InvalidStateError: DOM Exception 11
+FAIL 21,0,57: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-Infinity" InvalidStateError: DOM Exception 11
+PASS 21,0,58: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "65535"
+FAIL 21,0,59: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "65536" InvalidStateError: DOM Exception 11
+FAIL 21,0,60: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "65537" InvalidStateError: DOM Exception 11
+FAIL 21,0,61: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "65538" InvalidStateError: DOM Exception 11
+FAIL 21,0,62: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "65539" InvalidStateError: DOM Exception 11
+PASS 21,0,63: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "65540"
+PASS 21,0,64: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-65537"
+FAIL 21,0,65: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-65536" InvalidStateError: DOM Exception 11
+FAIL 21,0,66: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-65535" InvalidStateError: DOM Exception 11
+FAIL 21,0,67: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-65534" InvalidStateError: DOM Exception 11
+FAIL 21,0,68: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-65533" InvalidStateError: DOM Exception 11
+PASS 21,0,69: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-65532"
+PASS 21,0,70: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "4294967295"
+FAIL 21,0,71: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "4294967296" InvalidStateError: DOM Exception 11
+FAIL 21,0,72: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "4294967297" InvalidStateError: DOM Exception 11
+FAIL 21,0,73: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "4294967298" InvalidStateError: DOM Exception 11
+FAIL 21,0,74: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "4294967299" InvalidStateError: DOM Exception 11
+PASS 21,0,75: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "4294967300"
+FAIL 21,0,76: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 21,0,77: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 21,0,78: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 21,0,79: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 21,0,80: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "3.5" InvalidStateError: DOM Exception 11
+PASS 21,0,81: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "4.5"
+PASS 21,0,82: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-1.5"
+FAIL 21,0,83: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 21,0,84: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 21,0,85: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 21,0,86: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 21,0,87: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "3.5" InvalidStateError: DOM Exception 11
+PASS 21,0,88: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-73.5"
+PASS 21,0,89: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-72.5"
+PASS 21,0,90: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-71.5"
+PASS 21,0,91: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-70.5"
+PASS 21,0,92: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-69.5"
+PASS 21,0,93: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "-68.5"
+FAIL 21,0,94: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "6.5536e4" InvalidStateError: DOM Exception 11
+FAIL 21,0,95: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how null InvalidStateError: DOM Exception 11
+FAIL 21,0,96: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how undefined InvalidStateError: DOM Exception 11
+FAIL 21,0,97: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how true InvalidStateError: DOM Exception 11
+FAIL 21,0,98: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how false InvalidStateError: DOM Exception 11
+FAIL 21,0,99: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "" InvalidStateError: DOM Exception 11
+FAIL 21,0,100: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 0 [detached], how "quasit" InvalidStateError: DOM Exception 11
+PASS 21,1,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 21,1,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 21,1,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 21,1,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 21,2,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 21,2,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 21,2,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 21,2,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 21,3,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 21,3,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 21,3,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 21,3,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 21,3,4: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -1
+PASS 21,3,5: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4
+PASS 21,3,6: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 5
+PASS 21,3,7: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how NaN
+PASS 21,3,8: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -0
+PASS 21,3,9: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how Infinity
+PASS 21,3,10: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -Infinity
+PASS 21,3,11: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65535
+PASS 21,3,12: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65536
+PASS 21,3,13: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65537
+PASS 21,3,14: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65538
+PASS 21,3,15: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65539
+PASS 21,3,16: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65540
+PASS 21,3,17: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65537
+PASS 21,3,18: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65536
+PASS 21,3,19: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65535
+PASS 21,3,20: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65534
+PASS 21,3,21: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65533
+PASS 21,3,22: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65532
+PASS 21,3,23: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967295
+PASS 21,3,24: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967296
+PASS 21,3,25: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967297
+PASS 21,3,26: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967298
+PASS 21,3,27: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967299
+PASS 21,3,28: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967300
+PASS 21,3,29: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -0.5
+PASS 21,3,30: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0.5
+PASS 21,3,31: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1.5
+PASS 21,3,32: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2.5
+PASS 21,3,33: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3.5
+PASS 21,3,34: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4.5
+PASS 21,3,35: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -1.5
+PASS 21,3,36: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -0.5
+PASS 21,3,37: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0.5
+PASS 21,3,38: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1.5
+PASS 21,3,39: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2.5
+PASS 21,3,40: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3.5
+PASS 21,3,41: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -73.5
+PASS 21,3,42: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -72.5
+PASS 21,3,43: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -71.5
+PASS 21,3,44: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -70.5
+PASS 21,3,45: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -69.5
+PASS 21,3,46: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -68.5
+PASS 21,3,47: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0"
+PASS 21,3,48: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "1"
+PASS 21,3,49: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "2"
+PASS 21,3,50: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "3"
+PASS 21,3,51: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-1"
+PASS 21,3,52: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4"
+PASS 21,3,53: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "5"
+PASS 21,3,54: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "NaN"
+PASS 21,3,55: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0"
+PASS 21,3,56: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "Infinity"
+PASS 21,3,57: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-Infinity"
+PASS 21,3,58: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65535"
+PASS 21,3,59: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65536"
+PASS 21,3,60: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65537"
+PASS 21,3,61: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65538"
+PASS 21,3,62: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65539"
+PASS 21,3,63: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65540"
+PASS 21,3,64: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65537"
+PASS 21,3,65: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65536"
+PASS 21,3,66: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65535"
+PASS 21,3,67: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65534"
+PASS 21,3,68: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65533"
+PASS 21,3,69: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65532"
+PASS 21,3,70: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967295"
+PASS 21,3,71: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967296"
+PASS 21,3,72: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967297"
+PASS 21,3,73: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967298"
+PASS 21,3,74: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967299"
+PASS 21,3,75: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967300"
+PASS 21,3,76: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-0.5"
+PASS 21,3,77: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0.5"
+PASS 21,3,78: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "1.5"
+PASS 21,3,79: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "2.5"
+PASS 21,3,80: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "3.5"
+PASS 21,3,81: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4.5"
+PASS 21,3,82: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-1.5"
+PASS 21,3,83: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-0.5"
+PASS 21,3,84: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0.5"
+PASS 21,3,85: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "1.5"
+PASS 21,3,86: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "2.5"
+PASS 21,3,87: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "3.5"
+PASS 21,3,88: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-73.5"
+PASS 21,3,89: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-72.5"
+PASS 21,3,90: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-71.5"
+PASS 21,3,91: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-70.5"
+PASS 21,3,92: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-69.5"
+PASS 21,3,93: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-68.5"
+PASS 21,3,94: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "6.5536e4"
+PASS 21,3,95: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how null
+PASS 21,3,96: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how undefined
+PASS 21,3,97: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how true
+PASS 21,3,98: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how false
+PASS 21,3,99: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how ""
+PASS 21,3,100: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "quasit"
+PASS 21,4,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 21,4,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 21,4,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 21,4,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 21,5,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 21,5,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 21,5,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 21,5,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 21,6,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 21,6,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 21,6,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 21,6,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 21,7,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 21,7,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 21,7,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 21,7,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 21,8,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 21,8,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 21,8,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 21,8,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 21,9,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 21,9,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 21,9,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 21,9,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 21,10,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 21,10,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 21,10,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 21,10,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 21,11,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 21,11,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 21,11,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 21,11,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 21,12,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 21,12,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 21,12,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 21,12,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 21,13,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 21,13,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 21,13,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 21,13,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 21,14,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 21,14,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 21,14,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 21,14,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 21,15,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 21,15,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 21,15,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 21,15,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 21,16,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 21,16,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 21,16,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 21,16,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 21,16,4: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -1
+PASS 21,16,5: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4
+PASS 21,16,6: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 5
+PASS 21,16,7: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how NaN
+PASS 21,16,8: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -0
+PASS 21,16,9: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how Infinity
+PASS 21,16,10: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -Infinity
+PASS 21,16,11: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65535
+PASS 21,16,12: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65536
+PASS 21,16,13: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65537
+PASS 21,16,14: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65538
+PASS 21,16,15: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65539
+PASS 21,16,16: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65540
+PASS 21,16,17: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65537
+PASS 21,16,18: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65536
+PASS 21,16,19: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65535
+PASS 21,16,20: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65534
+PASS 21,16,21: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65533
+PASS 21,16,22: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65532
+PASS 21,16,23: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967295
+PASS 21,16,24: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967296
+PASS 21,16,25: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967297
+PASS 21,16,26: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967298
+PASS 21,16,27: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967299
+PASS 21,16,28: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967300
+PASS 21,16,29: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -0.5
+PASS 21,16,30: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0.5
+PASS 21,16,31: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1.5
+PASS 21,16,32: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2.5
+PASS 21,16,33: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3.5
+PASS 21,16,34: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4.5
+PASS 21,16,35: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -1.5
+PASS 21,16,36: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -0.5
+PASS 21,16,37: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0.5
+PASS 21,16,38: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1.5
+PASS 21,16,39: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2.5
+PASS 21,16,40: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3.5
+PASS 21,16,41: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -73.5
+PASS 21,16,42: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -72.5
+PASS 21,16,43: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -71.5
+PASS 21,16,44: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -70.5
+PASS 21,16,45: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -69.5
+PASS 21,16,46: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -68.5
+PASS 21,16,47: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0"
+PASS 21,16,48: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "1"
+PASS 21,16,49: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "2"
+PASS 21,16,50: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "3"
+PASS 21,16,51: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-1"
+PASS 21,16,52: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4"
+PASS 21,16,53: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "5"
+PASS 21,16,54: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "NaN"
+PASS 21,16,55: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0"
+PASS 21,16,56: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "Infinity"
+PASS 21,16,57: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-Infinity"
+PASS 21,16,58: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65535"
+PASS 21,16,59: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65536"
+PASS 21,16,60: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65537"
+PASS 21,16,61: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65538"
+PASS 21,16,62: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65539"
+PASS 21,16,63: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65540"
+PASS 21,16,64: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65537"
+PASS 21,16,65: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65536"
+PASS 21,16,66: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65535"
+PASS 21,16,67: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65534"
+PASS 21,16,68: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65533"
+PASS 21,16,69: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65532"
+PASS 21,16,70: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967295"
+PASS 21,16,71: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967296"
+PASS 21,16,72: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967297"
+PASS 21,16,73: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967298"
+PASS 21,16,74: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967299"
+PASS 21,16,75: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967300"
+PASS 21,16,76: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-0.5"
+PASS 21,16,77: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0.5"
+PASS 21,16,78: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "1.5"
+PASS 21,16,79: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "2.5"
+PASS 21,16,80: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "3.5"
+PASS 21,16,81: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4.5"
+PASS 21,16,82: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-1.5"
+PASS 21,16,83: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-0.5"
+PASS 21,16,84: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0.5"
+PASS 21,16,85: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "1.5"
+PASS 21,16,86: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "2.5"
+PASS 21,16,87: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "3.5"
+PASS 21,16,88: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-73.5"
+PASS 21,16,89: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-72.5"
+PASS 21,16,90: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-71.5"
+PASS 21,16,91: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-70.5"
+PASS 21,16,92: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-69.5"
+PASS 21,16,93: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-68.5"
+PASS 21,16,94: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "6.5536e4"
+PASS 21,16,95: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how null
+PASS 21,16,96: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how undefined
+PASS 21,16,97: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how true
+PASS 21,16,98: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how false
+PASS 21,16,99: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how ""
+PASS 21,16,100: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "quasit"
+PASS 21,17,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 21,17,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 21,17,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 21,17,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 21,18,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 21,18,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 21,18,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 21,18,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 21,19,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 21,19,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 21,19,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 21,19,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 21,20,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 21,20,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 21,20,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 21,20,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 21,21,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 21,21,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 21,21,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 21,21,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 21,21,4: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -1
+PASS 21,21,5: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4
+PASS 21,21,6: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 5
+PASS 21,21,7: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how NaN
+PASS 21,21,8: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -0
+PASS 21,21,9: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how Infinity
+PASS 21,21,10: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -Infinity
+PASS 21,21,11: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65535
+PASS 21,21,12: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65536
+PASS 21,21,13: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65537
+PASS 21,21,14: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65538
+PASS 21,21,15: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65539
+PASS 21,21,16: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65540
+PASS 21,21,17: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65537
+PASS 21,21,18: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65536
+PASS 21,21,19: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65535
+PASS 21,21,20: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65534
+PASS 21,21,21: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65533
+PASS 21,21,22: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65532
+PASS 21,21,23: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967295
+PASS 21,21,24: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967296
+PASS 21,21,25: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967297
+PASS 21,21,26: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967298
+PASS 21,21,27: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967299
+PASS 21,21,28: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967300
+PASS 21,21,29: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -0.5
+PASS 21,21,30: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0.5
+PASS 21,21,31: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1.5
+PASS 21,21,32: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2.5
+PASS 21,21,33: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3.5
+PASS 21,21,34: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4.5
+PASS 21,21,35: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -1.5
+PASS 21,21,36: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -0.5
+PASS 21,21,37: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0.5
+PASS 21,21,38: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1.5
+PASS 21,21,39: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2.5
+PASS 21,21,40: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3.5
+PASS 21,21,41: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -73.5
+PASS 21,21,42: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -72.5
+PASS 21,21,43: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -71.5
+PASS 21,21,44: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -70.5
+PASS 21,21,45: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -69.5
+PASS 21,21,46: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -68.5
+PASS 21,21,47: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0"
+PASS 21,21,48: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "1"
+PASS 21,21,49: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "2"
+PASS 21,21,50: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "3"
+PASS 21,21,51: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-1"
+PASS 21,21,52: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4"
+PASS 21,21,53: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "5"
+PASS 21,21,54: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "NaN"
+PASS 21,21,55: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0"
+PASS 21,21,56: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "Infinity"
+PASS 21,21,57: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-Infinity"
+PASS 21,21,58: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65535"
+PASS 21,21,59: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65536"
+PASS 21,21,60: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65537"
+PASS 21,21,61: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65538"
+PASS 21,21,62: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65539"
+PASS 21,21,63: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65540"
+PASS 21,21,64: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65537"
+PASS 21,21,65: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65536"
+PASS 21,21,66: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65535"
+PASS 21,21,67: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65534"
+PASS 21,21,68: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65533"
+PASS 21,21,69: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65532"
+PASS 21,21,70: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967295"
+PASS 21,21,71: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967296"
+PASS 21,21,72: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967297"
+PASS 21,21,73: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967298"
+PASS 21,21,74: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967299"
+PASS 21,21,75: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967300"
+PASS 21,21,76: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-0.5"
+PASS 21,21,77: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0.5"
+PASS 21,21,78: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "1.5"
+PASS 21,21,79: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "2.5"
+PASS 21,21,80: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "3.5"
+PASS 21,21,81: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4.5"
+PASS 21,21,82: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-1.5"
+PASS 21,21,83: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-0.5"
+PASS 21,21,84: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0.5"
+PASS 21,21,85: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "1.5"
+PASS 21,21,86: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "2.5"
+PASS 21,21,87: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "3.5"
+PASS 21,21,88: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-73.5"
+PASS 21,21,89: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-72.5"
+PASS 21,21,90: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-71.5"
+PASS 21,21,91: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-70.5"
+PASS 21,21,92: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-69.5"
+PASS 21,21,93: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-68.5"
+PASS 21,21,94: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "6.5536e4"
+PASS 21,21,95: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how null
+PASS 21,21,96: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how undefined
+PASS 21,21,97: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how true
+PASS 21,21,98: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how false
+PASS 21,21,99: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how ""
+PASS 21,21,100: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "quasit"
+PASS 21,22,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 21,22,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 21,22,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 21,22,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 21,23,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 21,23,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 21,23,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 21,23,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 21,24,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 24 [document, 0, document, 1], how 0
+PASS 21,24,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 24 [document, 0, document, 1], how 1
+PASS 21,24,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 24 [document, 0, document, 1], how 2
+PASS 21,24,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 24 [document, 0, document, 1], how 3
+PASS 21,25,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 25 [document, 0, document, 2], how 0
+PASS 21,25,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 25 [document, 0, document, 2], how 1
+PASS 21,25,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 25 [document, 0, document, 2], how 2
+PASS 21,25,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 25 [document, 0, document, 2], how 3
+PASS 21,26,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 26 [comment, 2, comment, 3], how 0
+PASS 21,26,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 26 [comment, 2, comment, 3], how 1
+PASS 21,26,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 26 [comment, 2, comment, 3], how 2
+PASS 21,26,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 26 [comment, 2, comment, 3], how 3
+PASS 21,27,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 21,27,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 21,27,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 21,27,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 21,27,4: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -1
+PASS 21,27,5: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 4
+PASS 21,27,6: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 5
+PASS 21,27,7: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how NaN
+PASS 21,27,8: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -0
+PASS 21,27,9: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how Infinity
+PASS 21,27,10: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -Infinity
+PASS 21,27,11: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 65535
+PASS 21,27,12: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 65536
+PASS 21,27,13: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 65537
+PASS 21,27,14: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 65538
+PASS 21,27,15: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 65539
+PASS 21,27,16: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 65540
+PASS 21,27,17: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -65537
+PASS 21,27,18: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -65536
+PASS 21,27,19: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -65535
+PASS 21,27,20: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -65534
+PASS 21,27,21: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -65533
+PASS 21,27,22: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -65532
+PASS 21,27,23: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 4294967295
+PASS 21,27,24: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 4294967296
+PASS 21,27,25: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 4294967297
+PASS 21,27,26: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 4294967298
+PASS 21,27,27: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 4294967299
+PASS 21,27,28: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 4294967300
+PASS 21,27,29: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -0.5
+PASS 21,27,30: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 0.5
+PASS 21,27,31: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 1.5
+PASS 21,27,32: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 2.5
+PASS 21,27,33: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 3.5
+PASS 21,27,34: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 4.5
+PASS 21,27,35: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -1.5
+PASS 21,27,36: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -0.5
+PASS 21,27,37: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 0.5
+PASS 21,27,38: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 1.5
+PASS 21,27,39: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 2.5
+PASS 21,27,40: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how 3.5
+PASS 21,27,41: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -73.5
+PASS 21,27,42: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -72.5
+PASS 21,27,43: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -71.5
+PASS 21,27,44: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -70.5
+PASS 21,27,45: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -69.5
+PASS 21,27,46: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how -68.5
+PASS 21,27,47: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "0"
+PASS 21,27,48: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "1"
+PASS 21,27,49: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "2"
+PASS 21,27,50: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "3"
+PASS 21,27,51: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-1"
+PASS 21,27,52: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "4"
+PASS 21,27,53: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "5"
+PASS 21,27,54: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "NaN"
+PASS 21,27,55: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "0"
+PASS 21,27,56: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "Infinity"
+PASS 21,27,57: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-Infinity"
+PASS 21,27,58: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "65535"
+PASS 21,27,59: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "65536"
+PASS 21,27,60: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "65537"
+PASS 21,27,61: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "65538"
+PASS 21,27,62: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "65539"
+PASS 21,27,63: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "65540"
+PASS 21,27,64: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-65537"
+PASS 21,27,65: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-65536"
+PASS 21,27,66: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-65535"
+PASS 21,27,67: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-65534"
+PASS 21,27,68: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-65533"
+PASS 21,27,69: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-65532"
+PASS 21,27,70: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "4294967295"
+PASS 21,27,71: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "4294967296"
+PASS 21,27,72: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "4294967297"
+PASS 21,27,73: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "4294967298"
+PASS 21,27,74: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "4294967299"
+PASS 21,27,75: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "4294967300"
+PASS 21,27,76: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-0.5"
+PASS 21,27,77: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "0.5"
+PASS 21,27,78: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "1.5"
+PASS 21,27,79: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "2.5"
+PASS 21,27,80: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "3.5"
+PASS 21,27,81: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "4.5"
+PASS 21,27,82: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-1.5"
+PASS 21,27,83: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-0.5"
+PASS 21,27,84: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "0.5"
+PASS 21,27,85: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "1.5"
+PASS 21,27,86: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "2.5"
+PASS 21,27,87: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "3.5"
+PASS 21,27,88: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-73.5"
+PASS 21,27,89: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-72.5"
+PASS 21,27,90: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-71.5"
+PASS 21,27,91: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-70.5"
+PASS 21,27,92: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-69.5"
+PASS 21,27,93: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "-68.5"
+PASS 21,27,94: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "6.5536e4"
+PASS 21,27,95: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how null
+PASS 21,27,96: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how undefined
+PASS 21,27,97: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how true
+PASS 21,27,98: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how false
+PASS 21,27,99: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how ""
+PASS 21,27,100: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 27 [testDiv, 0, comment, 5], how "quasit"
+PASS 21,28,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 21,28,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 21,28,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 21,28,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 21,29,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 21,29,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 21,29,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 21,29,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 21,30,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 21,30,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 21,30,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 21,30,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 21,31,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 21,31,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 21,31,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 21,31,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 21,32,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 21,32,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 21,32,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 21,32,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 21,33,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 21,33,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 21,33,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 21,33,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 21,34,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 21,34,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 21,34,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 21,34,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 21,35,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 21,35,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 21,35,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 21,35,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 21,36,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 21,36,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 21,36,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 21,36,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 21,37,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 21,37,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 21,37,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 21,37,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 21,38,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 21,38,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 21,38,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 21,38,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 21,39,0: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range same as first range, how 0
+PASS 21,39,1: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range same as first range, how 1
+PASS 21,39,2: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range same as first range, how 2
+PASS 21,39,3: context range 21 [paras[0].firstChild, 3, paras[3], 1], argument range same as first range, how 3
+FAIL 22,0,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 22,0,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 22,0,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 22,0,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 22,1,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 22,1,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 22,1,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 22,1,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 22,2,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 22,2,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 22,2,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 22,2,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 22,3,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 22,3,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 22,3,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 22,3,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 22,4,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 22,4,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 22,4,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 22,4,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 22,5,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 22,5,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 22,5,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 22,5,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 22,6,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 22,6,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 22,6,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 22,6,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 22,7,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 22,7,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 22,7,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 22,7,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 22,8,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 22,8,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 22,8,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 22,8,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 22,9,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 22,9,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 22,9,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 22,9,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 22,10,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 22,10,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 22,10,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 22,10,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 22,11,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 22,11,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 22,11,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 22,11,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 22,12,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 22,12,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 22,12,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 22,12,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 22,13,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 22,13,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 22,13,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 22,13,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 22,14,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 22,14,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 22,14,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 22,14,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 22,15,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 22,15,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 22,15,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 22,15,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 22,16,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 22,16,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 22,16,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 22,16,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 22,17,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 22,17,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 22,17,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 22,17,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 22,18,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 22,18,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 22,18,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 22,18,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 22,19,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 22,19,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 22,19,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 22,19,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 22,20,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 22,20,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 22,20,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 22,20,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 22,21,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 22,21,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 22,21,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 22,21,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 22,22,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 22,22,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 22,22,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 22,22,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 22,23,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 22,23,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 22,23,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 22,23,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 22,24,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 24 [document, 0, document, 1], how 0
+PASS 22,24,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 24 [document, 0, document, 1], how 1
+PASS 22,24,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 24 [document, 0, document, 1], how 2
+PASS 22,24,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 24 [document, 0, document, 1], how 3
+PASS 22,25,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 25 [document, 0, document, 2], how 0
+PASS 22,25,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 25 [document, 0, document, 2], how 1
+PASS 22,25,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 25 [document, 0, document, 2], how 2
+PASS 22,25,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 25 [document, 0, document, 2], how 3
+PASS 22,26,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 26 [comment, 2, comment, 3], how 0
+PASS 22,26,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 26 [comment, 2, comment, 3], how 1
+PASS 22,26,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 26 [comment, 2, comment, 3], how 2
+PASS 22,26,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 26 [comment, 2, comment, 3], how 3
+PASS 22,27,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 22,27,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 22,27,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 22,27,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 22,28,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 22,28,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 22,28,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 22,28,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 22,29,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 22,29,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 22,29,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 22,29,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 22,30,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 22,30,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 22,30,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 22,30,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 22,31,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 22,31,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 22,31,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 22,31,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 22,32,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 22,32,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 22,32,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 22,32,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 22,33,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 22,33,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 22,33,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 22,33,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 22,34,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 22,34,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 22,34,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 22,34,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 22,35,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 22,35,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 22,35,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 22,35,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 22,36,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 22,36,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 22,36,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 22,36,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 22,37,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 22,37,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 22,37,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 22,37,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 22,38,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 22,38,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 22,38,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 22,38,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 22,39,0: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range same as first range, how 0
+PASS 22,39,1: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range same as first range, how 1
+PASS 22,39,2: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range same as first range, how 2
+PASS 22,39,3: context range 22 [paras[0], 0, paras[0].firstChild, 7], argument range same as first range, how 3
+FAIL 23,0,0: context range 23 [testDiv, 2, paras[4], 1], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 23,0,1: context range 23 [testDiv, 2, paras[4], 1], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 23,0,2: context range 23 [testDiv, 2, paras[4], 1], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 23,0,3: context range 23 [testDiv, 2, paras[4], 1], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 23,1,0: context range 23 [testDiv, 2, paras[4], 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 23,1,1: context range 23 [testDiv, 2, paras[4], 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 23,1,2: context range 23 [testDiv, 2, paras[4], 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 23,1,3: context range 23 [testDiv, 2, paras[4], 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 23,2,0: context range 23 [testDiv, 2, paras[4], 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 23,2,1: context range 23 [testDiv, 2, paras[4], 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 23,2,2: context range 23 [testDiv, 2, paras[4], 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 23,2,3: context range 23 [testDiv, 2, paras[4], 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 23,3,0: context range 23 [testDiv, 2, paras[4], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 23,3,1: context range 23 [testDiv, 2, paras[4], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 23,3,2: context range 23 [testDiv, 2, paras[4], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 23,3,3: context range 23 [testDiv, 2, paras[4], 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 23,4,0: context range 23 [testDiv, 2, paras[4], 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 23,4,1: context range 23 [testDiv, 2, paras[4], 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 23,4,2: context range 23 [testDiv, 2, paras[4], 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 23,4,3: context range 23 [testDiv, 2, paras[4], 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 23,5,0: context range 23 [testDiv, 2, paras[4], 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 23,5,1: context range 23 [testDiv, 2, paras[4], 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 23,5,2: context range 23 [testDiv, 2, paras[4], 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 23,5,3: context range 23 [testDiv, 2, paras[4], 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 23,6,0: context range 23 [testDiv, 2, paras[4], 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 23,6,1: context range 23 [testDiv, 2, paras[4], 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 23,6,2: context range 23 [testDiv, 2, paras[4], 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 23,6,3: context range 23 [testDiv, 2, paras[4], 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 23,7,0: context range 23 [testDiv, 2, paras[4], 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 23,7,1: context range 23 [testDiv, 2, paras[4], 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 23,7,2: context range 23 [testDiv, 2, paras[4], 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 23,7,3: context range 23 [testDiv, 2, paras[4], 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 23,8,0: context range 23 [testDiv, 2, paras[4], 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 23,8,1: context range 23 [testDiv, 2, paras[4], 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 23,8,2: context range 23 [testDiv, 2, paras[4], 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 23,8,3: context range 23 [testDiv, 2, paras[4], 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 23,9,0: context range 23 [testDiv, 2, paras[4], 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 23,9,1: context range 23 [testDiv, 2, paras[4], 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 23,9,2: context range 23 [testDiv, 2, paras[4], 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 23,9,3: context range 23 [testDiv, 2, paras[4], 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 23,10,0: context range 23 [testDiv, 2, paras[4], 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 23,10,1: context range 23 [testDiv, 2, paras[4], 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 23,10,2: context range 23 [testDiv, 2, paras[4], 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 23,10,3: context range 23 [testDiv, 2, paras[4], 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 23,11,0: context range 23 [testDiv, 2, paras[4], 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 23,11,1: context range 23 [testDiv, 2, paras[4], 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 23,11,2: context range 23 [testDiv, 2, paras[4], 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 23,11,3: context range 23 [testDiv, 2, paras[4], 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 23,12,0: context range 23 [testDiv, 2, paras[4], 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 23,12,1: context range 23 [testDiv, 2, paras[4], 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 23,12,2: context range 23 [testDiv, 2, paras[4], 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 23,12,3: context range 23 [testDiv, 2, paras[4], 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 23,13,0: context range 23 [testDiv, 2, paras[4], 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 23,13,1: context range 23 [testDiv, 2, paras[4], 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 23,13,2: context range 23 [testDiv, 2, paras[4], 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 23,13,3: context range 23 [testDiv, 2, paras[4], 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 23,14,0: context range 23 [testDiv, 2, paras[4], 1], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 23,14,1: context range 23 [testDiv, 2, paras[4], 1], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 23,14,2: context range 23 [testDiv, 2, paras[4], 1], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 23,14,3: context range 23 [testDiv, 2, paras[4], 1], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 23,15,0: context range 23 [testDiv, 2, paras[4], 1], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 23,15,1: context range 23 [testDiv, 2, paras[4], 1], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 23,15,2: context range 23 [testDiv, 2, paras[4], 1], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 23,15,3: context range 23 [testDiv, 2, paras[4], 1], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 23,16,0: context range 23 [testDiv, 2, paras[4], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 23,16,1: context range 23 [testDiv, 2, paras[4], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 23,16,2: context range 23 [testDiv, 2, paras[4], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 23,16,3: context range 23 [testDiv, 2, paras[4], 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 23,17,0: context range 23 [testDiv, 2, paras[4], 1], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 23,17,1: context range 23 [testDiv, 2, paras[4], 1], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 23,17,2: context range 23 [testDiv, 2, paras[4], 1], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 23,17,3: context range 23 [testDiv, 2, paras[4], 1], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 23,18,0: context range 23 [testDiv, 2, paras[4], 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 23,18,1: context range 23 [testDiv, 2, paras[4], 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 23,18,2: context range 23 [testDiv, 2, paras[4], 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 23,18,3: context range 23 [testDiv, 2, paras[4], 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 23,19,0: context range 23 [testDiv, 2, paras[4], 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 23,19,1: context range 23 [testDiv, 2, paras[4], 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 23,19,2: context range 23 [testDiv, 2, paras[4], 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 23,19,3: context range 23 [testDiv, 2, paras[4], 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 23,20,0: context range 23 [testDiv, 2, paras[4], 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 23,20,1: context range 23 [testDiv, 2, paras[4], 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 23,20,2: context range 23 [testDiv, 2, paras[4], 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 23,20,3: context range 23 [testDiv, 2, paras[4], 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 23,21,0: context range 23 [testDiv, 2, paras[4], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 23,21,1: context range 23 [testDiv, 2, paras[4], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 23,21,2: context range 23 [testDiv, 2, paras[4], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 23,21,3: context range 23 [testDiv, 2, paras[4], 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 23,22,0: context range 23 [testDiv, 2, paras[4], 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 23,22,1: context range 23 [testDiv, 2, paras[4], 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 23,22,2: context range 23 [testDiv, 2, paras[4], 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 23,22,3: context range 23 [testDiv, 2, paras[4], 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 23,23,0: context range 23 [testDiv, 2, paras[4], 1], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 23,23,1: context range 23 [testDiv, 2, paras[4], 1], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 23,23,2: context range 23 [testDiv, 2, paras[4], 1], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 23,23,3: context range 23 [testDiv, 2, paras[4], 1], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 23,24,0: context range 23 [testDiv, 2, paras[4], 1], argument range 24 [document, 0, document, 1], how 0
+PASS 23,24,1: context range 23 [testDiv, 2, paras[4], 1], argument range 24 [document, 0, document, 1], how 1
+PASS 23,24,2: context range 23 [testDiv, 2, paras[4], 1], argument range 24 [document, 0, document, 1], how 2
+PASS 23,24,3: context range 23 [testDiv, 2, paras[4], 1], argument range 24 [document, 0, document, 1], how 3
+PASS 23,25,0: context range 23 [testDiv, 2, paras[4], 1], argument range 25 [document, 0, document, 2], how 0
+PASS 23,25,1: context range 23 [testDiv, 2, paras[4], 1], argument range 25 [document, 0, document, 2], how 1
+PASS 23,25,2: context range 23 [testDiv, 2, paras[4], 1], argument range 25 [document, 0, document, 2], how 2
+PASS 23,25,3: context range 23 [testDiv, 2, paras[4], 1], argument range 25 [document, 0, document, 2], how 3
+PASS 23,26,0: context range 23 [testDiv, 2, paras[4], 1], argument range 26 [comment, 2, comment, 3], how 0
+PASS 23,26,1: context range 23 [testDiv, 2, paras[4], 1], argument range 26 [comment, 2, comment, 3], how 1
+PASS 23,26,2: context range 23 [testDiv, 2, paras[4], 1], argument range 26 [comment, 2, comment, 3], how 2
+PASS 23,26,3: context range 23 [testDiv, 2, paras[4], 1], argument range 26 [comment, 2, comment, 3], how 3
+PASS 23,27,0: context range 23 [testDiv, 2, paras[4], 1], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 23,27,1: context range 23 [testDiv, 2, paras[4], 1], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 23,27,2: context range 23 [testDiv, 2, paras[4], 1], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 23,27,3: context range 23 [testDiv, 2, paras[4], 1], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 23,28,0: context range 23 [testDiv, 2, paras[4], 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 23,28,1: context range 23 [testDiv, 2, paras[4], 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 23,28,2: context range 23 [testDiv, 2, paras[4], 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 23,28,3: context range 23 [testDiv, 2, paras[4], 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 23,29,0: context range 23 [testDiv, 2, paras[4], 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 23,29,1: context range 23 [testDiv, 2, paras[4], 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 23,29,2: context range 23 [testDiv, 2, paras[4], 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 23,29,3: context range 23 [testDiv, 2, paras[4], 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 23,30,0: context range 23 [testDiv, 2, paras[4], 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 23,30,1: context range 23 [testDiv, 2, paras[4], 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 23,30,2: context range 23 [testDiv, 2, paras[4], 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 23,30,3: context range 23 [testDiv, 2, paras[4], 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 23,31,0: context range 23 [testDiv, 2, paras[4], 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 23,31,1: context range 23 [testDiv, 2, paras[4], 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 23,31,2: context range 23 [testDiv, 2, paras[4], 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 23,31,3: context range 23 [testDiv, 2, paras[4], 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 23,32,0: context range 23 [testDiv, 2, paras[4], 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 23,32,1: context range 23 [testDiv, 2, paras[4], 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 23,32,2: context range 23 [testDiv, 2, paras[4], 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 23,32,3: context range 23 [testDiv, 2, paras[4], 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 23,33,0: context range 23 [testDiv, 2, paras[4], 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 23,33,1: context range 23 [testDiv, 2, paras[4], 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 23,33,2: context range 23 [testDiv, 2, paras[4], 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 23,33,3: context range 23 [testDiv, 2, paras[4], 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 23,34,0: context range 23 [testDiv, 2, paras[4], 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 23,34,1: context range 23 [testDiv, 2, paras[4], 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 23,34,2: context range 23 [testDiv, 2, paras[4], 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 23,34,3: context range 23 [testDiv, 2, paras[4], 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 23,35,0: context range 23 [testDiv, 2, paras[4], 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 23,35,1: context range 23 [testDiv, 2, paras[4], 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 23,35,2: context range 23 [testDiv, 2, paras[4], 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 23,35,3: context range 23 [testDiv, 2, paras[4], 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 23,36,0: context range 23 [testDiv, 2, paras[4], 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 23,36,1: context range 23 [testDiv, 2, paras[4], 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 23,36,2: context range 23 [testDiv, 2, paras[4], 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 23,36,3: context range 23 [testDiv, 2, paras[4], 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 23,37,0: context range 23 [testDiv, 2, paras[4], 1], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 23,37,1: context range 23 [testDiv, 2, paras[4], 1], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 23,37,2: context range 23 [testDiv, 2, paras[4], 1], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 23,37,3: context range 23 [testDiv, 2, paras[4], 1], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 23,38,0: context range 23 [testDiv, 2, paras[4], 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 23,38,1: context range 23 [testDiv, 2, paras[4], 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 23,38,2: context range 23 [testDiv, 2, paras[4], 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 23,38,3: context range 23 [testDiv, 2, paras[4], 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 23,39,0: context range 23 [testDiv, 2, paras[4], 1], argument range same as first range, how 0
+PASS 23,39,1: context range 23 [testDiv, 2, paras[4], 1], argument range same as first range, how 1
+PASS 23,39,2: context range 23 [testDiv, 2, paras[4], 1], argument range same as first range, how 2
+PASS 23,39,3: context range 23 [testDiv, 2, paras[4], 1], argument range same as first range, how 3
+FAIL 24,0,0: context range 24 [document, 0, document, 1], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 24,0,1: context range 24 [document, 0, document, 1], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 24,0,2: context range 24 [document, 0, document, 1], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 24,0,3: context range 24 [document, 0, document, 1], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 24,1,0: context range 24 [document, 0, document, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 24,1,1: context range 24 [document, 0, document, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 24,1,2: context range 24 [document, 0, document, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 24,1,3: context range 24 [document, 0, document, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 24,2,0: context range 24 [document, 0, document, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 24,2,1: context range 24 [document, 0, document, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 24,2,2: context range 24 [document, 0, document, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 24,2,3: context range 24 [document, 0, document, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 24,3,0: context range 24 [document, 0, document, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 24,3,1: context range 24 [document, 0, document, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 24,3,2: context range 24 [document, 0, document, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 24,3,3: context range 24 [document, 0, document, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 24,4,0: context range 24 [document, 0, document, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 24,4,1: context range 24 [document, 0, document, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 24,4,2: context range 24 [document, 0, document, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 24,4,3: context range 24 [document, 0, document, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 24,5,0: context range 24 [document, 0, document, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 24,5,1: context range 24 [document, 0, document, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 24,5,2: context range 24 [document, 0, document, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 24,5,3: context range 24 [document, 0, document, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 24,6,0: context range 24 [document, 0, document, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 24,6,1: context range 24 [document, 0, document, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 24,6,2: context range 24 [document, 0, document, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 24,6,3: context range 24 [document, 0, document, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 24,7,0: context range 24 [document, 0, document, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 24,7,1: context range 24 [document, 0, document, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 24,7,2: context range 24 [document, 0, document, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 24,7,3: context range 24 [document, 0, document, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 24,8,0: context range 24 [document, 0, document, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 24,8,1: context range 24 [document, 0, document, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 24,8,2: context range 24 [document, 0, document, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 24,8,3: context range 24 [document, 0, document, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 24,9,0: context range 24 [document, 0, document, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 24,9,1: context range 24 [document, 0, document, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 24,9,2: context range 24 [document, 0, document, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 24,9,3: context range 24 [document, 0, document, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 24,10,0: context range 24 [document, 0, document, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 24,10,1: context range 24 [document, 0, document, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 24,10,2: context range 24 [document, 0, document, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 24,10,3: context range 24 [document, 0, document, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 24,11,0: context range 24 [document, 0, document, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 24,11,1: context range 24 [document, 0, document, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 24,11,2: context range 24 [document, 0, document, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 24,11,3: context range 24 [document, 0, document, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 24,12,0: context range 24 [document, 0, document, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 24,12,1: context range 24 [document, 0, document, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 24,12,2: context range 24 [document, 0, document, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 24,12,3: context range 24 [document, 0, document, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 24,13,0: context range 24 [document, 0, document, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 24,13,1: context range 24 [document, 0, document, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 24,13,2: context range 24 [document, 0, document, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 24,13,3: context range 24 [document, 0, document, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 24,14,0: context range 24 [document, 0, document, 1], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 24,14,1: context range 24 [document, 0, document, 1], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 24,14,2: context range 24 [document, 0, document, 1], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 24,14,3: context range 24 [document, 0, document, 1], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 24,15,0: context range 24 [document, 0, document, 1], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 24,15,1: context range 24 [document, 0, document, 1], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 24,15,2: context range 24 [document, 0, document, 1], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 24,15,3: context range 24 [document, 0, document, 1], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 24,16,0: context range 24 [document, 0, document, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 24,16,1: context range 24 [document, 0, document, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 24,16,2: context range 24 [document, 0, document, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 24,16,3: context range 24 [document, 0, document, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 24,17,0: context range 24 [document, 0, document, 1], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 24,17,1: context range 24 [document, 0, document, 1], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 24,17,2: context range 24 [document, 0, document, 1], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 24,17,3: context range 24 [document, 0, document, 1], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 24,18,0: context range 24 [document, 0, document, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 24,18,1: context range 24 [document, 0, document, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 24,18,2: context range 24 [document, 0, document, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 24,18,3: context range 24 [document, 0, document, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 24,19,0: context range 24 [document, 0, document, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 24,19,1: context range 24 [document, 0, document, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 24,19,2: context range 24 [document, 0, document, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 24,19,3: context range 24 [document, 0, document, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 24,20,0: context range 24 [document, 0, document, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 24,20,1: context range 24 [document, 0, document, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 24,20,2: context range 24 [document, 0, document, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 24,20,3: context range 24 [document, 0, document, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 24,21,0: context range 24 [document, 0, document, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 24,21,1: context range 24 [document, 0, document, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 24,21,2: context range 24 [document, 0, document, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 24,21,3: context range 24 [document, 0, document, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 24,22,0: context range 24 [document, 0, document, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 24,22,1: context range 24 [document, 0, document, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 24,22,2: context range 24 [document, 0, document, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 24,22,3: context range 24 [document, 0, document, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 24,23,0: context range 24 [document, 0, document, 1], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 24,23,1: context range 24 [document, 0, document, 1], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 24,23,2: context range 24 [document, 0, document, 1], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 24,23,3: context range 24 [document, 0, document, 1], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 24,24,0: context range 24 [document, 0, document, 1], argument range 24 [document, 0, document, 1], how 0
+PASS 24,24,1: context range 24 [document, 0, document, 1], argument range 24 [document, 0, document, 1], how 1
+PASS 24,24,2: context range 24 [document, 0, document, 1], argument range 24 [document, 0, document, 1], how 2
+PASS 24,24,3: context range 24 [document, 0, document, 1], argument range 24 [document, 0, document, 1], how 3
+PASS 24,25,0: context range 24 [document, 0, document, 1], argument range 25 [document, 0, document, 2], how 0
+PASS 24,25,1: context range 24 [document, 0, document, 1], argument range 25 [document, 0, document, 2], how 1
+PASS 24,25,2: context range 24 [document, 0, document, 1], argument range 25 [document, 0, document, 2], how 2
+PASS 24,25,3: context range 24 [document, 0, document, 1], argument range 25 [document, 0, document, 2], how 3
+PASS 24,26,0: context range 24 [document, 0, document, 1], argument range 26 [comment, 2, comment, 3], how 0
+PASS 24,26,1: context range 24 [document, 0, document, 1], argument range 26 [comment, 2, comment, 3], how 1
+PASS 24,26,2: context range 24 [document, 0, document, 1], argument range 26 [comment, 2, comment, 3], how 2
+PASS 24,26,3: context range 24 [document, 0, document, 1], argument range 26 [comment, 2, comment, 3], how 3
+PASS 24,27,0: context range 24 [document, 0, document, 1], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 24,27,1: context range 24 [document, 0, document, 1], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 24,27,2: context range 24 [document, 0, document, 1], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 24,27,3: context range 24 [document, 0, document, 1], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 24,28,0: context range 24 [document, 0, document, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 24,28,1: context range 24 [document, 0, document, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 24,28,2: context range 24 [document, 0, document, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 24,28,3: context range 24 [document, 0, document, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 24,29,0: context range 24 [document, 0, document, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 24,29,1: context range 24 [document, 0, document, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 24,29,2: context range 24 [document, 0, document, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 24,29,3: context range 24 [document, 0, document, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 24,30,0: context range 24 [document, 0, document, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 24,30,1: context range 24 [document, 0, document, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 24,30,2: context range 24 [document, 0, document, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 24,30,3: context range 24 [document, 0, document, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 24,31,0: context range 24 [document, 0, document, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 24,31,1: context range 24 [document, 0, document, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 24,31,2: context range 24 [document, 0, document, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 24,31,3: context range 24 [document, 0, document, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 24,32,0: context range 24 [document, 0, document, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 24,32,1: context range 24 [document, 0, document, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 24,32,2: context range 24 [document, 0, document, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 24,32,3: context range 24 [document, 0, document, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 24,33,0: context range 24 [document, 0, document, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 24,33,1: context range 24 [document, 0, document, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 24,33,2: context range 24 [document, 0, document, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 24,33,3: context range 24 [document, 0, document, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 24,34,0: context range 24 [document, 0, document, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 24,34,1: context range 24 [document, 0, document, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 24,34,2: context range 24 [document, 0, document, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 24,34,3: context range 24 [document, 0, document, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 24,35,0: context range 24 [document, 0, document, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 24,35,1: context range 24 [document, 0, document, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 24,35,2: context range 24 [document, 0, document, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 24,35,3: context range 24 [document, 0, document, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 24,36,0: context range 24 [document, 0, document, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 24,36,1: context range 24 [document, 0, document, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 24,36,2: context range 24 [document, 0, document, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 24,36,3: context range 24 [document, 0, document, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 24,37,0: context range 24 [document, 0, document, 1], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 24,37,1: context range 24 [document, 0, document, 1], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 24,37,2: context range 24 [document, 0, document, 1], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 24,37,3: context range 24 [document, 0, document, 1], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 24,38,0: context range 24 [document, 0, document, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 24,38,1: context range 24 [document, 0, document, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 24,38,2: context range 24 [document, 0, document, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 24,38,3: context range 24 [document, 0, document, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 24,39,0: context range 24 [document, 0, document, 1], argument range same as first range, how 0
+PASS 24,39,1: context range 24 [document, 0, document, 1], argument range same as first range, how 1
+PASS 24,39,2: context range 24 [document, 0, document, 1], argument range same as first range, how 2
+PASS 24,39,3: context range 24 [document, 0, document, 1], argument range same as first range, how 3
+FAIL 25,0,0: context range 25 [document, 0, document, 2], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 25,0,1: context range 25 [document, 0, document, 2], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 25,0,2: context range 25 [document, 0, document, 2], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 25,0,3: context range 25 [document, 0, document, 2], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 25,1,0: context range 25 [document, 0, document, 2], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 25,1,1: context range 25 [document, 0, document, 2], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 25,1,2: context range 25 [document, 0, document, 2], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 25,1,3: context range 25 [document, 0, document, 2], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 25,2,0: context range 25 [document, 0, document, 2], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 25,2,1: context range 25 [document, 0, document, 2], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 25,2,2: context range 25 [document, 0, document, 2], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 25,2,3: context range 25 [document, 0, document, 2], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 25,3,0: context range 25 [document, 0, document, 2], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 25,3,1: context range 25 [document, 0, document, 2], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 25,3,2: context range 25 [document, 0, document, 2], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 25,3,3: context range 25 [document, 0, document, 2], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 25,4,0: context range 25 [document, 0, document, 2], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 25,4,1: context range 25 [document, 0, document, 2], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 25,4,2: context range 25 [document, 0, document, 2], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 25,4,3: context range 25 [document, 0, document, 2], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 25,5,0: context range 25 [document, 0, document, 2], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 25,5,1: context range 25 [document, 0, document, 2], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 25,5,2: context range 25 [document, 0, document, 2], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 25,5,3: context range 25 [document, 0, document, 2], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 25,6,0: context range 25 [document, 0, document, 2], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 25,6,1: context range 25 [document, 0, document, 2], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 25,6,2: context range 25 [document, 0, document, 2], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 25,6,3: context range 25 [document, 0, document, 2], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 25,7,0: context range 25 [document, 0, document, 2], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 25,7,1: context range 25 [document, 0, document, 2], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 25,7,2: context range 25 [document, 0, document, 2], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 25,7,3: context range 25 [document, 0, document, 2], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 25,8,0: context range 25 [document, 0, document, 2], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 25,8,1: context range 25 [document, 0, document, 2], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 25,8,2: context range 25 [document, 0, document, 2], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 25,8,3: context range 25 [document, 0, document, 2], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 25,9,0: context range 25 [document, 0, document, 2], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 25,9,1: context range 25 [document, 0, document, 2], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 25,9,2: context range 25 [document, 0, document, 2], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 25,9,3: context range 25 [document, 0, document, 2], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 25,10,0: context range 25 [document, 0, document, 2], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 25,10,1: context range 25 [document, 0, document, 2], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 25,10,2: context range 25 [document, 0, document, 2], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 25,10,3: context range 25 [document, 0, document, 2], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 25,11,0: context range 25 [document, 0, document, 2], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 25,11,1: context range 25 [document, 0, document, 2], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 25,11,2: context range 25 [document, 0, document, 2], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 25,11,3: context range 25 [document, 0, document, 2], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 25,12,0: context range 25 [document, 0, document, 2], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 25,12,1: context range 25 [document, 0, document, 2], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 25,12,2: context range 25 [document, 0, document, 2], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 25,12,3: context range 25 [document, 0, document, 2], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 25,13,0: context range 25 [document, 0, document, 2], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 25,13,1: context range 25 [document, 0, document, 2], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 25,13,2: context range 25 [document, 0, document, 2], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 25,13,3: context range 25 [document, 0, document, 2], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 25,14,0: context range 25 [document, 0, document, 2], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 25,14,1: context range 25 [document, 0, document, 2], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 25,14,2: context range 25 [document, 0, document, 2], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 25,14,3: context range 25 [document, 0, document, 2], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 25,15,0: context range 25 [document, 0, document, 2], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 25,15,1: context range 25 [document, 0, document, 2], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 25,15,2: context range 25 [document, 0, document, 2], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 25,15,3: context range 25 [document, 0, document, 2], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 25,16,0: context range 25 [document, 0, document, 2], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 25,16,1: context range 25 [document, 0, document, 2], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 25,16,2: context range 25 [document, 0, document, 2], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 25,16,3: context range 25 [document, 0, document, 2], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 25,17,0: context range 25 [document, 0, document, 2], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 25,17,1: context range 25 [document, 0, document, 2], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 25,17,2: context range 25 [document, 0, document, 2], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 25,17,3: context range 25 [document, 0, document, 2], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 25,18,0: context range 25 [document, 0, document, 2], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 25,18,1: context range 25 [document, 0, document, 2], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 25,18,2: context range 25 [document, 0, document, 2], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 25,18,3: context range 25 [document, 0, document, 2], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 25,19,0: context range 25 [document, 0, document, 2], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 25,19,1: context range 25 [document, 0, document, 2], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 25,19,2: context range 25 [document, 0, document, 2], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 25,19,3: context range 25 [document, 0, document, 2], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 25,20,0: context range 25 [document, 0, document, 2], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 25,20,1: context range 25 [document, 0, document, 2], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 25,20,2: context range 25 [document, 0, document, 2], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 25,20,3: context range 25 [document, 0, document, 2], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 25,21,0: context range 25 [document, 0, document, 2], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 25,21,1: context range 25 [document, 0, document, 2], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 25,21,2: context range 25 [document, 0, document, 2], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 25,21,3: context range 25 [document, 0, document, 2], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 25,22,0: context range 25 [document, 0, document, 2], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 25,22,1: context range 25 [document, 0, document, 2], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 25,22,2: context range 25 [document, 0, document, 2], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 25,22,3: context range 25 [document, 0, document, 2], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 25,23,0: context range 25 [document, 0, document, 2], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 25,23,1: context range 25 [document, 0, document, 2], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 25,23,2: context range 25 [document, 0, document, 2], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 25,23,3: context range 25 [document, 0, document, 2], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 25,24,0: context range 25 [document, 0, document, 2], argument range 24 [document, 0, document, 1], how 0
+PASS 25,24,1: context range 25 [document, 0, document, 2], argument range 24 [document, 0, document, 1], how 1
+PASS 25,24,2: context range 25 [document, 0, document, 2], argument range 24 [document, 0, document, 1], how 2
+PASS 25,24,3: context range 25 [document, 0, document, 2], argument range 24 [document, 0, document, 1], how 3
+PASS 25,25,0: context range 25 [document, 0, document, 2], argument range 25 [document, 0, document, 2], how 0
+PASS 25,25,1: context range 25 [document, 0, document, 2], argument range 25 [document, 0, document, 2], how 1
+PASS 25,25,2: context range 25 [document, 0, document, 2], argument range 25 [document, 0, document, 2], how 2
+PASS 25,25,3: context range 25 [document, 0, document, 2], argument range 25 [document, 0, document, 2], how 3
+PASS 25,26,0: context range 25 [document, 0, document, 2], argument range 26 [comment, 2, comment, 3], how 0
+PASS 25,26,1: context range 25 [document, 0, document, 2], argument range 26 [comment, 2, comment, 3], how 1
+PASS 25,26,2: context range 25 [document, 0, document, 2], argument range 26 [comment, 2, comment, 3], how 2
+PASS 25,26,3: context range 25 [document, 0, document, 2], argument range 26 [comment, 2, comment, 3], how 3
+PASS 25,27,0: context range 25 [document, 0, document, 2], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 25,27,1: context range 25 [document, 0, document, 2], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 25,27,2: context range 25 [document, 0, document, 2], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 25,27,3: context range 25 [document, 0, document, 2], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 25,28,0: context range 25 [document, 0, document, 2], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 25,28,1: context range 25 [document, 0, document, 2], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 25,28,2: context range 25 [document, 0, document, 2], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 25,28,3: context range 25 [document, 0, document, 2], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 25,29,0: context range 25 [document, 0, document, 2], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 25,29,1: context range 25 [document, 0, document, 2], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 25,29,2: context range 25 [document, 0, document, 2], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 25,29,3: context range 25 [document, 0, document, 2], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 25,30,0: context range 25 [document, 0, document, 2], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 25,30,1: context range 25 [document, 0, document, 2], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 25,30,2: context range 25 [document, 0, document, 2], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 25,30,3: context range 25 [document, 0, document, 2], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 25,31,0: context range 25 [document, 0, document, 2], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 25,31,1: context range 25 [document, 0, document, 2], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 25,31,2: context range 25 [document, 0, document, 2], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 25,31,3: context range 25 [document, 0, document, 2], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 25,32,0: context range 25 [document, 0, document, 2], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 25,32,1: context range 25 [document, 0, document, 2], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 25,32,2: context range 25 [document, 0, document, 2], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 25,32,3: context range 25 [document, 0, document, 2], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 25,33,0: context range 25 [document, 0, document, 2], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 25,33,1: context range 25 [document, 0, document, 2], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 25,33,2: context range 25 [document, 0, document, 2], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 25,33,3: context range 25 [document, 0, document, 2], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 25,34,0: context range 25 [document, 0, document, 2], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 25,34,1: context range 25 [document, 0, document, 2], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 25,34,2: context range 25 [document, 0, document, 2], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 25,34,3: context range 25 [document, 0, document, 2], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 25,35,0: context range 25 [document, 0, document, 2], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 25,35,1: context range 25 [document, 0, document, 2], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 25,35,2: context range 25 [document, 0, document, 2], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 25,35,3: context range 25 [document, 0, document, 2], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 25,36,0: context range 25 [document, 0, document, 2], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 25,36,1: context range 25 [document, 0, document, 2], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 25,36,2: context range 25 [document, 0, document, 2], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 25,36,3: context range 25 [document, 0, document, 2], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 25,37,0: context range 25 [document, 0, document, 2], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 25,37,1: context range 25 [document, 0, document, 2], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 25,37,2: context range 25 [document, 0, document, 2], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 25,37,3: context range 25 [document, 0, document, 2], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 25,38,0: context range 25 [document, 0, document, 2], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 25,38,1: context range 25 [document, 0, document, 2], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 25,38,2: context range 25 [document, 0, document, 2], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 25,38,3: context range 25 [document, 0, document, 2], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 25,39,0: context range 25 [document, 0, document, 2], argument range same as first range, how 0
+PASS 25,39,1: context range 25 [document, 0, document, 2], argument range same as first range, how 1
+PASS 25,39,2: context range 25 [document, 0, document, 2], argument range same as first range, how 2
+PASS 25,39,3: context range 25 [document, 0, document, 2], argument range same as first range, how 3
+FAIL 26,0,0: context range 26 [comment, 2, comment, 3], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 26,0,1: context range 26 [comment, 2, comment, 3], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 26,0,2: context range 26 [comment, 2, comment, 3], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 26,0,3: context range 26 [comment, 2, comment, 3], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 26,1,0: context range 26 [comment, 2, comment, 3], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 26,1,1: context range 26 [comment, 2, comment, 3], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 26,1,2: context range 26 [comment, 2, comment, 3], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 26,1,3: context range 26 [comment, 2, comment, 3], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 26,2,0: context range 26 [comment, 2, comment, 3], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 26,2,1: context range 26 [comment, 2, comment, 3], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 26,2,2: context range 26 [comment, 2, comment, 3], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 26,2,3: context range 26 [comment, 2, comment, 3], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 26,3,0: context range 26 [comment, 2, comment, 3], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 26,3,1: context range 26 [comment, 2, comment, 3], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 26,3,2: context range 26 [comment, 2, comment, 3], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 26,3,3: context range 26 [comment, 2, comment, 3], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 26,4,0: context range 26 [comment, 2, comment, 3], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 26,4,1: context range 26 [comment, 2, comment, 3], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 26,4,2: context range 26 [comment, 2, comment, 3], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 26,4,3: context range 26 [comment, 2, comment, 3], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 26,5,0: context range 26 [comment, 2, comment, 3], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 26,5,1: context range 26 [comment, 2, comment, 3], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 26,5,2: context range 26 [comment, 2, comment, 3], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 26,5,3: context range 26 [comment, 2, comment, 3], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 26,6,0: context range 26 [comment, 2, comment, 3], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 26,6,1: context range 26 [comment, 2, comment, 3], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 26,6,2: context range 26 [comment, 2, comment, 3], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 26,6,3: context range 26 [comment, 2, comment, 3], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 26,7,0: context range 26 [comment, 2, comment, 3], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 26,7,1: context range 26 [comment, 2, comment, 3], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 26,7,2: context range 26 [comment, 2, comment, 3], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 26,7,3: context range 26 [comment, 2, comment, 3], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 26,8,0: context range 26 [comment, 2, comment, 3], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 26,8,1: context range 26 [comment, 2, comment, 3], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 26,8,2: context range 26 [comment, 2, comment, 3], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 26,8,3: context range 26 [comment, 2, comment, 3], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 26,9,0: context range 26 [comment, 2, comment, 3], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 26,9,1: context range 26 [comment, 2, comment, 3], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 26,9,2: context range 26 [comment, 2, comment, 3], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 26,9,3: context range 26 [comment, 2, comment, 3], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 26,10,0: context range 26 [comment, 2, comment, 3], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 26,10,1: context range 26 [comment, 2, comment, 3], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 26,10,2: context range 26 [comment, 2, comment, 3], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 26,10,3: context range 26 [comment, 2, comment, 3], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 26,11,0: context range 26 [comment, 2, comment, 3], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 26,11,1: context range 26 [comment, 2, comment, 3], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 26,11,2: context range 26 [comment, 2, comment, 3], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 26,11,3: context range 26 [comment, 2, comment, 3], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 26,12,0: context range 26 [comment, 2, comment, 3], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 26,12,1: context range 26 [comment, 2, comment, 3], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 26,12,2: context range 26 [comment, 2, comment, 3], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 26,12,3: context range 26 [comment, 2, comment, 3], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 26,13,0: context range 26 [comment, 2, comment, 3], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 26,13,1: context range 26 [comment, 2, comment, 3], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 26,13,2: context range 26 [comment, 2, comment, 3], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 26,13,3: context range 26 [comment, 2, comment, 3], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 26,14,0: context range 26 [comment, 2, comment, 3], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 26,14,1: context range 26 [comment, 2, comment, 3], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 26,14,2: context range 26 [comment, 2, comment, 3], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 26,14,3: context range 26 [comment, 2, comment, 3], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 26,15,0: context range 26 [comment, 2, comment, 3], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 26,15,1: context range 26 [comment, 2, comment, 3], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 26,15,2: context range 26 [comment, 2, comment, 3], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 26,15,3: context range 26 [comment, 2, comment, 3], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 26,16,0: context range 26 [comment, 2, comment, 3], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 26,16,1: context range 26 [comment, 2, comment, 3], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 26,16,2: context range 26 [comment, 2, comment, 3], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 26,16,3: context range 26 [comment, 2, comment, 3], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 26,17,0: context range 26 [comment, 2, comment, 3], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 26,17,1: context range 26 [comment, 2, comment, 3], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 26,17,2: context range 26 [comment, 2, comment, 3], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 26,17,3: context range 26 [comment, 2, comment, 3], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 26,18,0: context range 26 [comment, 2, comment, 3], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 26,18,1: context range 26 [comment, 2, comment, 3], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 26,18,2: context range 26 [comment, 2, comment, 3], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 26,18,3: context range 26 [comment, 2, comment, 3], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 26,19,0: context range 26 [comment, 2, comment, 3], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 26,19,1: context range 26 [comment, 2, comment, 3], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 26,19,2: context range 26 [comment, 2, comment, 3], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 26,19,3: context range 26 [comment, 2, comment, 3], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 26,20,0: context range 26 [comment, 2, comment, 3], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 26,20,1: context range 26 [comment, 2, comment, 3], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 26,20,2: context range 26 [comment, 2, comment, 3], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 26,20,3: context range 26 [comment, 2, comment, 3], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 26,21,0: context range 26 [comment, 2, comment, 3], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 26,21,1: context range 26 [comment, 2, comment, 3], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 26,21,2: context range 26 [comment, 2, comment, 3], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 26,21,3: context range 26 [comment, 2, comment, 3], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 26,22,0: context range 26 [comment, 2, comment, 3], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 26,22,1: context range 26 [comment, 2, comment, 3], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 26,22,2: context range 26 [comment, 2, comment, 3], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 26,22,3: context range 26 [comment, 2, comment, 3], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 26,23,0: context range 26 [comment, 2, comment, 3], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 26,23,1: context range 26 [comment, 2, comment, 3], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 26,23,2: context range 26 [comment, 2, comment, 3], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 26,23,3: context range 26 [comment, 2, comment, 3], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 26,24,0: context range 26 [comment, 2, comment, 3], argument range 24 [document, 0, document, 1], how 0
+PASS 26,24,1: context range 26 [comment, 2, comment, 3], argument range 24 [document, 0, document, 1], how 1
+PASS 26,24,2: context range 26 [comment, 2, comment, 3], argument range 24 [document, 0, document, 1], how 2
+PASS 26,24,3: context range 26 [comment, 2, comment, 3], argument range 24 [document, 0, document, 1], how 3
+PASS 26,25,0: context range 26 [comment, 2, comment, 3], argument range 25 [document, 0, document, 2], how 0
+PASS 26,25,1: context range 26 [comment, 2, comment, 3], argument range 25 [document, 0, document, 2], how 1
+PASS 26,25,2: context range 26 [comment, 2, comment, 3], argument range 25 [document, 0, document, 2], how 2
+PASS 26,25,3: context range 26 [comment, 2, comment, 3], argument range 25 [document, 0, document, 2], how 3
+PASS 26,26,0: context range 26 [comment, 2, comment, 3], argument range 26 [comment, 2, comment, 3], how 0
+PASS 26,26,1: context range 26 [comment, 2, comment, 3], argument range 26 [comment, 2, comment, 3], how 1
+PASS 26,26,2: context range 26 [comment, 2, comment, 3], argument range 26 [comment, 2, comment, 3], how 2
+PASS 26,26,3: context range 26 [comment, 2, comment, 3], argument range 26 [comment, 2, comment, 3], how 3
+PASS 26,27,0: context range 26 [comment, 2, comment, 3], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 26,27,1: context range 26 [comment, 2, comment, 3], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 26,27,2: context range 26 [comment, 2, comment, 3], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 26,27,3: context range 26 [comment, 2, comment, 3], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 26,28,0: context range 26 [comment, 2, comment, 3], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 26,28,1: context range 26 [comment, 2, comment, 3], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 26,28,2: context range 26 [comment, 2, comment, 3], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 26,28,3: context range 26 [comment, 2, comment, 3], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 26,29,0: context range 26 [comment, 2, comment, 3], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 26,29,1: context range 26 [comment, 2, comment, 3], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 26,29,2: context range 26 [comment, 2, comment, 3], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 26,29,3: context range 26 [comment, 2, comment, 3], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 26,30,0: context range 26 [comment, 2, comment, 3], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 26,30,1: context range 26 [comment, 2, comment, 3], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 26,30,2: context range 26 [comment, 2, comment, 3], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 26,30,3: context range 26 [comment, 2, comment, 3], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 26,31,0: context range 26 [comment, 2, comment, 3], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 26,31,1: context range 26 [comment, 2, comment, 3], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 26,31,2: context range 26 [comment, 2, comment, 3], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 26,31,3: context range 26 [comment, 2, comment, 3], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 26,32,0: context range 26 [comment, 2, comment, 3], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 26,32,1: context range 26 [comment, 2, comment, 3], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 26,32,2: context range 26 [comment, 2, comment, 3], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 26,32,3: context range 26 [comment, 2, comment, 3], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 26,33,0: context range 26 [comment, 2, comment, 3], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 26,33,1: context range 26 [comment, 2, comment, 3], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 26,33,2: context range 26 [comment, 2, comment, 3], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 26,33,3: context range 26 [comment, 2, comment, 3], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 26,34,0: context range 26 [comment, 2, comment, 3], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 26,34,1: context range 26 [comment, 2, comment, 3], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 26,34,2: context range 26 [comment, 2, comment, 3], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 26,34,3: context range 26 [comment, 2, comment, 3], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 26,35,0: context range 26 [comment, 2, comment, 3], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 26,35,1: context range 26 [comment, 2, comment, 3], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 26,35,2: context range 26 [comment, 2, comment, 3], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 26,35,3: context range 26 [comment, 2, comment, 3], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 26,36,0: context range 26 [comment, 2, comment, 3], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 26,36,1: context range 26 [comment, 2, comment, 3], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 26,36,2: context range 26 [comment, 2, comment, 3], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 26,36,3: context range 26 [comment, 2, comment, 3], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 26,37,0: context range 26 [comment, 2, comment, 3], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 26,37,1: context range 26 [comment, 2, comment, 3], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 26,37,2: context range 26 [comment, 2, comment, 3], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 26,37,3: context range 26 [comment, 2, comment, 3], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 26,38,0: context range 26 [comment, 2, comment, 3], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 26,38,1: context range 26 [comment, 2, comment, 3], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 26,38,2: context range 26 [comment, 2, comment, 3], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 26,38,3: context range 26 [comment, 2, comment, 3], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 26,39,0: context range 26 [comment, 2, comment, 3], argument range same as first range, how 0
+PASS 26,39,1: context range 26 [comment, 2, comment, 3], argument range same as first range, how 1
+PASS 26,39,2: context range 26 [comment, 2, comment, 3], argument range same as first range, how 2
+PASS 26,39,3: context range 26 [comment, 2, comment, 3], argument range same as first range, how 3
+FAIL 27,0,0: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 27,0,1: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 27,0,2: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 27,0,3: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 27,0,4: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -1
+PASS 27,0,5: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 4
+PASS 27,0,6: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 5
+FAIL 27,0,7: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how NaN InvalidStateError: DOM Exception 11
+FAIL 27,0,8: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -0 InvalidStateError: DOM Exception 11
+FAIL 27,0,9: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how Infinity InvalidStateError: DOM Exception 11
+FAIL 27,0,10: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -Infinity InvalidStateError: DOM Exception 11
+PASS 27,0,11: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 65535
+FAIL 27,0,12: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 65536 InvalidStateError: DOM Exception 11
+FAIL 27,0,13: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 65537 InvalidStateError: DOM Exception 11
+FAIL 27,0,14: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 65538 InvalidStateError: DOM Exception 11
+FAIL 27,0,15: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 65539 InvalidStateError: DOM Exception 11
+PASS 27,0,16: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 65540
+PASS 27,0,17: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -65537
+FAIL 27,0,18: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -65536 InvalidStateError: DOM Exception 11
+FAIL 27,0,19: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -65535 InvalidStateError: DOM Exception 11
+FAIL 27,0,20: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -65534 InvalidStateError: DOM Exception 11
+FAIL 27,0,21: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -65533 InvalidStateError: DOM Exception 11
+PASS 27,0,22: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -65532
+PASS 27,0,23: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 4294967295
+FAIL 27,0,24: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 4294967296 InvalidStateError: DOM Exception 11
+FAIL 27,0,25: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 4294967297 InvalidStateError: DOM Exception 11
+FAIL 27,0,26: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 4294967298 InvalidStateError: DOM Exception 11
+FAIL 27,0,27: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 4294967299 InvalidStateError: DOM Exception 11
+PASS 27,0,28: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 4294967300
+FAIL 27,0,29: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 27,0,30: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 27,0,31: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 27,0,32: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 27,0,33: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 3.5 InvalidStateError: DOM Exception 11
+PASS 27,0,34: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 4.5
+PASS 27,0,35: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -1.5
+FAIL 27,0,36: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -0.5 InvalidStateError: DOM Exception 11
+FAIL 27,0,37: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 0.5 InvalidStateError: DOM Exception 11
+FAIL 27,0,38: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 1.5 InvalidStateError: DOM Exception 11
+FAIL 27,0,39: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 2.5 InvalidStateError: DOM Exception 11
+FAIL 27,0,40: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how 3.5 InvalidStateError: DOM Exception 11
+PASS 27,0,41: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -73.5
+PASS 27,0,42: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -72.5
+PASS 27,0,43: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -71.5
+PASS 27,0,44: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -70.5
+PASS 27,0,45: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -69.5
+PASS 27,0,46: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how -68.5
+FAIL 27,0,47: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "0" InvalidStateError: DOM Exception 11
+FAIL 27,0,48: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "1" InvalidStateError: DOM Exception 11
+FAIL 27,0,49: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "2" InvalidStateError: DOM Exception 11
+FAIL 27,0,50: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "3" InvalidStateError: DOM Exception 11
+PASS 27,0,51: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-1"
+PASS 27,0,52: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "4"
+PASS 27,0,53: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "5"
+FAIL 27,0,54: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "NaN" InvalidStateError: DOM Exception 11
+FAIL 27,0,55: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "0" InvalidStateError: DOM Exception 11
+FAIL 27,0,56: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "Infinity" InvalidStateError: DOM Exception 11
+FAIL 27,0,57: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-Infinity" InvalidStateError: DOM Exception 11
+PASS 27,0,58: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "65535"
+FAIL 27,0,59: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "65536" InvalidStateError: DOM Exception 11
+FAIL 27,0,60: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "65537" InvalidStateError: DOM Exception 11
+FAIL 27,0,61: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "65538" InvalidStateError: DOM Exception 11
+FAIL 27,0,62: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "65539" InvalidStateError: DOM Exception 11
+PASS 27,0,63: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "65540"
+PASS 27,0,64: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-65537"
+FAIL 27,0,65: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-65536" InvalidStateError: DOM Exception 11
+FAIL 27,0,66: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-65535" InvalidStateError: DOM Exception 11
+FAIL 27,0,67: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-65534" InvalidStateError: DOM Exception 11
+FAIL 27,0,68: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-65533" InvalidStateError: DOM Exception 11
+PASS 27,0,69: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-65532"
+PASS 27,0,70: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "4294967295"
+FAIL 27,0,71: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "4294967296" InvalidStateError: DOM Exception 11
+FAIL 27,0,72: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "4294967297" InvalidStateError: DOM Exception 11
+FAIL 27,0,73: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "4294967298" InvalidStateError: DOM Exception 11
+FAIL 27,0,74: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "4294967299" InvalidStateError: DOM Exception 11
+PASS 27,0,75: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "4294967300"
+FAIL 27,0,76: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 27,0,77: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 27,0,78: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 27,0,79: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 27,0,80: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "3.5" InvalidStateError: DOM Exception 11
+PASS 27,0,81: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "4.5"
+PASS 27,0,82: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-1.5"
+FAIL 27,0,83: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-0.5" InvalidStateError: DOM Exception 11
+FAIL 27,0,84: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "0.5" InvalidStateError: DOM Exception 11
+FAIL 27,0,85: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "1.5" InvalidStateError: DOM Exception 11
+FAIL 27,0,86: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "2.5" InvalidStateError: DOM Exception 11
+FAIL 27,0,87: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "3.5" InvalidStateError: DOM Exception 11
+PASS 27,0,88: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-73.5"
+PASS 27,0,89: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-72.5"
+PASS 27,0,90: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-71.5"
+PASS 27,0,91: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-70.5"
+PASS 27,0,92: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-69.5"
+PASS 27,0,93: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "-68.5"
+FAIL 27,0,94: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "6.5536e4" InvalidStateError: DOM Exception 11
+FAIL 27,0,95: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how null InvalidStateError: DOM Exception 11
+FAIL 27,0,96: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how undefined InvalidStateError: DOM Exception 11
+FAIL 27,0,97: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how true InvalidStateError: DOM Exception 11
+FAIL 27,0,98: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how false InvalidStateError: DOM Exception 11
+FAIL 27,0,99: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "" InvalidStateError: DOM Exception 11
+FAIL 27,0,100: context range 27 [testDiv, 0, comment, 5], argument range 0 [detached], how "quasit" InvalidStateError: DOM Exception 11
+PASS 27,1,0: context range 27 [testDiv, 0, comment, 5], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 27,1,1: context range 27 [testDiv, 0, comment, 5], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 27,1,2: context range 27 [testDiv, 0, comment, 5], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 27,1,3: context range 27 [testDiv, 0, comment, 5], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 27,2,0: context range 27 [testDiv, 0, comment, 5], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 27,2,1: context range 27 [testDiv, 0, comment, 5], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 27,2,2: context range 27 [testDiv, 0, comment, 5], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 27,2,3: context range 27 [testDiv, 0, comment, 5], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 27,3,0: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 27,3,1: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 27,3,2: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 27,3,3: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 27,3,4: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -1
+PASS 27,3,5: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4
+PASS 27,3,6: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 5
+PASS 27,3,7: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how NaN
+PASS 27,3,8: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -0
+PASS 27,3,9: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how Infinity
+PASS 27,3,10: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -Infinity
+PASS 27,3,11: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65535
+PASS 27,3,12: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65536
+PASS 27,3,13: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65537
+PASS 27,3,14: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65538
+PASS 27,3,15: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65539
+PASS 27,3,16: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 65540
+PASS 27,3,17: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65537
+PASS 27,3,18: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65536
+PASS 27,3,19: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65535
+PASS 27,3,20: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65534
+PASS 27,3,21: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65533
+PASS 27,3,22: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -65532
+PASS 27,3,23: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967295
+PASS 27,3,24: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967296
+PASS 27,3,25: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967297
+PASS 27,3,26: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967298
+PASS 27,3,27: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967299
+PASS 27,3,28: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4294967300
+PASS 27,3,29: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -0.5
+PASS 27,3,30: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0.5
+PASS 27,3,31: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1.5
+PASS 27,3,32: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2.5
+PASS 27,3,33: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3.5
+PASS 27,3,34: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 4.5
+PASS 27,3,35: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -1.5
+PASS 27,3,36: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -0.5
+PASS 27,3,37: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0.5
+PASS 27,3,38: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1.5
+PASS 27,3,39: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2.5
+PASS 27,3,40: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3.5
+PASS 27,3,41: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -73.5
+PASS 27,3,42: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -72.5
+PASS 27,3,43: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -71.5
+PASS 27,3,44: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -70.5
+PASS 27,3,45: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -69.5
+PASS 27,3,46: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how -68.5
+PASS 27,3,47: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0"
+PASS 27,3,48: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "1"
+PASS 27,3,49: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "2"
+PASS 27,3,50: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "3"
+PASS 27,3,51: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-1"
+PASS 27,3,52: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4"
+PASS 27,3,53: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "5"
+PASS 27,3,54: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "NaN"
+PASS 27,3,55: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0"
+PASS 27,3,56: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "Infinity"
+PASS 27,3,57: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-Infinity"
+PASS 27,3,58: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65535"
+PASS 27,3,59: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65536"
+PASS 27,3,60: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65537"
+PASS 27,3,61: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65538"
+PASS 27,3,62: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65539"
+PASS 27,3,63: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "65540"
+PASS 27,3,64: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65537"
+PASS 27,3,65: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65536"
+PASS 27,3,66: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65535"
+PASS 27,3,67: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65534"
+PASS 27,3,68: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65533"
+PASS 27,3,69: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-65532"
+PASS 27,3,70: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967295"
+PASS 27,3,71: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967296"
+PASS 27,3,72: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967297"
+PASS 27,3,73: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967298"
+PASS 27,3,74: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967299"
+PASS 27,3,75: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4294967300"
+PASS 27,3,76: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-0.5"
+PASS 27,3,77: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0.5"
+PASS 27,3,78: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "1.5"
+PASS 27,3,79: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "2.5"
+PASS 27,3,80: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "3.5"
+PASS 27,3,81: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "4.5"
+PASS 27,3,82: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-1.5"
+PASS 27,3,83: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-0.5"
+PASS 27,3,84: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "0.5"
+PASS 27,3,85: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "1.5"
+PASS 27,3,86: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "2.5"
+PASS 27,3,87: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "3.5"
+PASS 27,3,88: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-73.5"
+PASS 27,3,89: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-72.5"
+PASS 27,3,90: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-71.5"
+PASS 27,3,91: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-70.5"
+PASS 27,3,92: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-69.5"
+PASS 27,3,93: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "-68.5"
+PASS 27,3,94: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "6.5536e4"
+PASS 27,3,95: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how null
+PASS 27,3,96: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how undefined
+PASS 27,3,97: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how true
+PASS 27,3,98: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how false
+PASS 27,3,99: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how ""
+PASS 27,3,100: context range 27 [testDiv, 0, comment, 5], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how "quasit"
+PASS 27,4,0: context range 27 [testDiv, 0, comment, 5], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 27,4,1: context range 27 [testDiv, 0, comment, 5], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 27,4,2: context range 27 [testDiv, 0, comment, 5], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 27,4,3: context range 27 [testDiv, 0, comment, 5], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 27,5,0: context range 27 [testDiv, 0, comment, 5], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 27,5,1: context range 27 [testDiv, 0, comment, 5], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 27,5,2: context range 27 [testDiv, 0, comment, 5], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 27,5,3: context range 27 [testDiv, 0, comment, 5], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 27,6,0: context range 27 [testDiv, 0, comment, 5], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 27,6,1: context range 27 [testDiv, 0, comment, 5], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 27,6,2: context range 27 [testDiv, 0, comment, 5], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 27,6,3: context range 27 [testDiv, 0, comment, 5], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 27,7,0: context range 27 [testDiv, 0, comment, 5], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 27,7,1: context range 27 [testDiv, 0, comment, 5], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 27,7,2: context range 27 [testDiv, 0, comment, 5], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 27,7,3: context range 27 [testDiv, 0, comment, 5], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 27,8,0: context range 27 [testDiv, 0, comment, 5], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 27,8,1: context range 27 [testDiv, 0, comment, 5], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 27,8,2: context range 27 [testDiv, 0, comment, 5], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 27,8,3: context range 27 [testDiv, 0, comment, 5], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 27,9,0: context range 27 [testDiv, 0, comment, 5], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 27,9,1: context range 27 [testDiv, 0, comment, 5], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 27,9,2: context range 27 [testDiv, 0, comment, 5], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 27,9,3: context range 27 [testDiv, 0, comment, 5], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 27,10,0: context range 27 [testDiv, 0, comment, 5], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 27,10,1: context range 27 [testDiv, 0, comment, 5], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 27,10,2: context range 27 [testDiv, 0, comment, 5], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 27,10,3: context range 27 [testDiv, 0, comment, 5], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 27,11,0: context range 27 [testDiv, 0, comment, 5], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 27,11,1: context range 27 [testDiv, 0, comment, 5], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 27,11,2: context range 27 [testDiv, 0, comment, 5], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 27,11,3: context range 27 [testDiv, 0, comment, 5], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 27,12,0: context range 27 [testDiv, 0, comment, 5], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 27,12,1: context range 27 [testDiv, 0, comment, 5], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 27,12,2: context range 27 [testDiv, 0, comment, 5], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 27,12,3: context range 27 [testDiv, 0, comment, 5], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 27,13,0: context range 27 [testDiv, 0, comment, 5], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 27,13,1: context range 27 [testDiv, 0, comment, 5], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 27,13,2: context range 27 [testDiv, 0, comment, 5], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 27,13,3: context range 27 [testDiv, 0, comment, 5], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 27,14,0: context range 27 [testDiv, 0, comment, 5], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 27,14,1: context range 27 [testDiv, 0, comment, 5], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 27,14,2: context range 27 [testDiv, 0, comment, 5], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 27,14,3: context range 27 [testDiv, 0, comment, 5], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 27,15,0: context range 27 [testDiv, 0, comment, 5], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 27,15,1: context range 27 [testDiv, 0, comment, 5], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 27,15,2: context range 27 [testDiv, 0, comment, 5], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 27,15,3: context range 27 [testDiv, 0, comment, 5], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 27,16,0: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 27,16,1: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 27,16,2: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 27,16,3: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 27,16,4: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -1
+PASS 27,16,5: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4
+PASS 27,16,6: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 5
+PASS 27,16,7: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how NaN
+PASS 27,16,8: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -0
+PASS 27,16,9: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how Infinity
+PASS 27,16,10: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -Infinity
+PASS 27,16,11: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65535
+PASS 27,16,12: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65536
+PASS 27,16,13: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65537
+PASS 27,16,14: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65538
+PASS 27,16,15: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65539
+PASS 27,16,16: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 65540
+PASS 27,16,17: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65537
+PASS 27,16,18: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65536
+PASS 27,16,19: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65535
+PASS 27,16,20: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65534
+PASS 27,16,21: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65533
+PASS 27,16,22: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -65532
+PASS 27,16,23: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967295
+PASS 27,16,24: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967296
+PASS 27,16,25: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967297
+PASS 27,16,26: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967298
+PASS 27,16,27: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967299
+PASS 27,16,28: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4294967300
+PASS 27,16,29: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -0.5
+PASS 27,16,30: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0.5
+PASS 27,16,31: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1.5
+PASS 27,16,32: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2.5
+PASS 27,16,33: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3.5
+PASS 27,16,34: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 4.5
+PASS 27,16,35: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -1.5
+PASS 27,16,36: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -0.5
+PASS 27,16,37: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0.5
+PASS 27,16,38: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1.5
+PASS 27,16,39: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2.5
+PASS 27,16,40: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3.5
+PASS 27,16,41: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -73.5
+PASS 27,16,42: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -72.5
+PASS 27,16,43: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -71.5
+PASS 27,16,44: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -70.5
+PASS 27,16,45: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -69.5
+PASS 27,16,46: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how -68.5
+PASS 27,16,47: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0"
+PASS 27,16,48: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "1"
+PASS 27,16,49: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "2"
+PASS 27,16,50: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "3"
+PASS 27,16,51: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-1"
+PASS 27,16,52: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4"
+PASS 27,16,53: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "5"
+PASS 27,16,54: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "NaN"
+PASS 27,16,55: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0"
+PASS 27,16,56: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "Infinity"
+PASS 27,16,57: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-Infinity"
+PASS 27,16,58: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65535"
+PASS 27,16,59: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65536"
+PASS 27,16,60: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65537"
+PASS 27,16,61: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65538"
+PASS 27,16,62: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65539"
+PASS 27,16,63: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "65540"
+PASS 27,16,64: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65537"
+PASS 27,16,65: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65536"
+PASS 27,16,66: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65535"
+PASS 27,16,67: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65534"
+PASS 27,16,68: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65533"
+PASS 27,16,69: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-65532"
+PASS 27,16,70: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967295"
+PASS 27,16,71: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967296"
+PASS 27,16,72: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967297"
+PASS 27,16,73: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967298"
+PASS 27,16,74: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967299"
+PASS 27,16,75: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4294967300"
+PASS 27,16,76: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-0.5"
+PASS 27,16,77: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0.5"
+PASS 27,16,78: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "1.5"
+PASS 27,16,79: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "2.5"
+PASS 27,16,80: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "3.5"
+PASS 27,16,81: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "4.5"
+PASS 27,16,82: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-1.5"
+PASS 27,16,83: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-0.5"
+PASS 27,16,84: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "0.5"
+PASS 27,16,85: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "1.5"
+PASS 27,16,86: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "2.5"
+PASS 27,16,87: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "3.5"
+PASS 27,16,88: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-73.5"
+PASS 27,16,89: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-72.5"
+PASS 27,16,90: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-71.5"
+PASS 27,16,91: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-70.5"
+PASS 27,16,92: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-69.5"
+PASS 27,16,93: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "-68.5"
+PASS 27,16,94: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "6.5536e4"
+PASS 27,16,95: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how null
+PASS 27,16,96: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how undefined
+PASS 27,16,97: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how true
+PASS 27,16,98: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how false
+PASS 27,16,99: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how ""
+PASS 27,16,100: context range 27 [testDiv, 0, comment, 5], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how "quasit"
+PASS 27,17,0: context range 27 [testDiv, 0, comment, 5], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 27,17,1: context range 27 [testDiv, 0, comment, 5], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 27,17,2: context range 27 [testDiv, 0, comment, 5], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 27,17,3: context range 27 [testDiv, 0, comment, 5], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 27,18,0: context range 27 [testDiv, 0, comment, 5], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 27,18,1: context range 27 [testDiv, 0, comment, 5], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 27,18,2: context range 27 [testDiv, 0, comment, 5], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 27,18,3: context range 27 [testDiv, 0, comment, 5], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 27,19,0: context range 27 [testDiv, 0, comment, 5], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 27,19,1: context range 27 [testDiv, 0, comment, 5], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 27,19,2: context range 27 [testDiv, 0, comment, 5], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 27,19,3: context range 27 [testDiv, 0, comment, 5], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 27,20,0: context range 27 [testDiv, 0, comment, 5], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 27,20,1: context range 27 [testDiv, 0, comment, 5], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 27,20,2: context range 27 [testDiv, 0, comment, 5], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 27,20,3: context range 27 [testDiv, 0, comment, 5], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 27,21,0: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 27,21,1: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 27,21,2: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 27,21,3: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 27,21,4: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -1
+PASS 27,21,5: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4
+PASS 27,21,6: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 5
+PASS 27,21,7: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how NaN
+PASS 27,21,8: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -0
+PASS 27,21,9: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how Infinity
+PASS 27,21,10: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -Infinity
+PASS 27,21,11: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65535
+PASS 27,21,12: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65536
+PASS 27,21,13: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65537
+PASS 27,21,14: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65538
+PASS 27,21,15: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65539
+PASS 27,21,16: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 65540
+PASS 27,21,17: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65537
+PASS 27,21,18: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65536
+PASS 27,21,19: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65535
+PASS 27,21,20: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65534
+PASS 27,21,21: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65533
+PASS 27,21,22: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -65532
+PASS 27,21,23: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967295
+PASS 27,21,24: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967296
+PASS 27,21,25: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967297
+PASS 27,21,26: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967298
+PASS 27,21,27: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967299
+PASS 27,21,28: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4294967300
+PASS 27,21,29: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -0.5
+PASS 27,21,30: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0.5
+PASS 27,21,31: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1.5
+PASS 27,21,32: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2.5
+PASS 27,21,33: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3.5
+PASS 27,21,34: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 4.5
+PASS 27,21,35: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -1.5
+PASS 27,21,36: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -0.5
+PASS 27,21,37: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0.5
+PASS 27,21,38: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1.5
+PASS 27,21,39: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2.5
+PASS 27,21,40: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3.5
+PASS 27,21,41: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -73.5
+PASS 27,21,42: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -72.5
+PASS 27,21,43: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -71.5
+PASS 27,21,44: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -70.5
+PASS 27,21,45: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -69.5
+PASS 27,21,46: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how -68.5
+PASS 27,21,47: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0"
+PASS 27,21,48: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "1"
+PASS 27,21,49: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "2"
+PASS 27,21,50: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "3"
+PASS 27,21,51: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-1"
+PASS 27,21,52: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4"
+PASS 27,21,53: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "5"
+PASS 27,21,54: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "NaN"
+PASS 27,21,55: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0"
+PASS 27,21,56: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "Infinity"
+PASS 27,21,57: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-Infinity"
+PASS 27,21,58: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65535"
+PASS 27,21,59: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65536"
+PASS 27,21,60: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65537"
+PASS 27,21,61: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65538"
+PASS 27,21,62: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65539"
+PASS 27,21,63: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "65540"
+PASS 27,21,64: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65537"
+PASS 27,21,65: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65536"
+PASS 27,21,66: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65535"
+PASS 27,21,67: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65534"
+PASS 27,21,68: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65533"
+PASS 27,21,69: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-65532"
+PASS 27,21,70: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967295"
+PASS 27,21,71: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967296"
+PASS 27,21,72: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967297"
+PASS 27,21,73: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967298"
+PASS 27,21,74: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967299"
+PASS 27,21,75: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4294967300"
+PASS 27,21,76: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-0.5"
+PASS 27,21,77: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0.5"
+PASS 27,21,78: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "1.5"
+PASS 27,21,79: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "2.5"
+PASS 27,21,80: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "3.5"
+PASS 27,21,81: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "4.5"
+PASS 27,21,82: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-1.5"
+PASS 27,21,83: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-0.5"
+PASS 27,21,84: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "0.5"
+PASS 27,21,85: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "1.5"
+PASS 27,21,86: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "2.5"
+PASS 27,21,87: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "3.5"
+PASS 27,21,88: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-73.5"
+PASS 27,21,89: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-72.5"
+PASS 27,21,90: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-71.5"
+PASS 27,21,91: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-70.5"
+PASS 27,21,92: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-69.5"
+PASS 27,21,93: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "-68.5"
+PASS 27,21,94: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "6.5536e4"
+PASS 27,21,95: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how null
+PASS 27,21,96: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how undefined
+PASS 27,21,97: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how true
+PASS 27,21,98: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how false
+PASS 27,21,99: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how ""
+PASS 27,21,100: context range 27 [testDiv, 0, comment, 5], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how "quasit"
+PASS 27,22,0: context range 27 [testDiv, 0, comment, 5], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 27,22,1: context range 27 [testDiv, 0, comment, 5], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 27,22,2: context range 27 [testDiv, 0, comment, 5], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 27,22,3: context range 27 [testDiv, 0, comment, 5], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 27,23,0: context range 27 [testDiv, 0, comment, 5], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 27,23,1: context range 27 [testDiv, 0, comment, 5], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 27,23,2: context range 27 [testDiv, 0, comment, 5], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 27,23,3: context range 27 [testDiv, 0, comment, 5], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 27,24,0: context range 27 [testDiv, 0, comment, 5], argument range 24 [document, 0, document, 1], how 0
+PASS 27,24,1: context range 27 [testDiv, 0, comment, 5], argument range 24 [document, 0, document, 1], how 1
+PASS 27,24,2: context range 27 [testDiv, 0, comment, 5], argument range 24 [document, 0, document, 1], how 2
+PASS 27,24,3: context range 27 [testDiv, 0, comment, 5], argument range 24 [document, 0, document, 1], how 3
+PASS 27,25,0: context range 27 [testDiv, 0, comment, 5], argument range 25 [document, 0, document, 2], how 0
+PASS 27,25,1: context range 27 [testDiv, 0, comment, 5], argument range 25 [document, 0, document, 2], how 1
+PASS 27,25,2: context range 27 [testDiv, 0, comment, 5], argument range 25 [document, 0, document, 2], how 2
+PASS 27,25,3: context range 27 [testDiv, 0, comment, 5], argument range 25 [document, 0, document, 2], how 3
+PASS 27,26,0: context range 27 [testDiv, 0, comment, 5], argument range 26 [comment, 2, comment, 3], how 0
+PASS 27,26,1: context range 27 [testDiv, 0, comment, 5], argument range 26 [comment, 2, comment, 3], how 1
+PASS 27,26,2: context range 27 [testDiv, 0, comment, 5], argument range 26 [comment, 2, comment, 3], how 2
+PASS 27,26,3: context range 27 [testDiv, 0, comment, 5], argument range 26 [comment, 2, comment, 3], how 3
+PASS 27,27,0: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 27,27,1: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 27,27,2: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 27,27,3: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 27,27,4: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -1
+PASS 27,27,5: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 4
+PASS 27,27,6: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 5
+PASS 27,27,7: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how NaN
+PASS 27,27,8: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -0
+PASS 27,27,9: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how Infinity
+PASS 27,27,10: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -Infinity
+PASS 27,27,11: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 65535
+PASS 27,27,12: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 65536
+PASS 27,27,13: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 65537
+PASS 27,27,14: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 65538
+PASS 27,27,15: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 65539
+PASS 27,27,16: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 65540
+PASS 27,27,17: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -65537
+PASS 27,27,18: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -65536
+PASS 27,27,19: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -65535
+PASS 27,27,20: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -65534
+PASS 27,27,21: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -65533
+PASS 27,27,22: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -65532
+PASS 27,27,23: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 4294967295
+PASS 27,27,24: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 4294967296
+PASS 27,27,25: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 4294967297
+PASS 27,27,26: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 4294967298
+PASS 27,27,27: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 4294967299
+PASS 27,27,28: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 4294967300
+PASS 27,27,29: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -0.5
+PASS 27,27,30: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 0.5
+PASS 27,27,31: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 1.5
+PASS 27,27,32: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 2.5
+PASS 27,27,33: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 3.5
+PASS 27,27,34: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 4.5
+PASS 27,27,35: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -1.5
+PASS 27,27,36: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -0.5
+PASS 27,27,37: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 0.5
+PASS 27,27,38: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 1.5
+PASS 27,27,39: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 2.5
+PASS 27,27,40: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how 3.5
+PASS 27,27,41: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -73.5
+PASS 27,27,42: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -72.5
+PASS 27,27,43: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -71.5
+PASS 27,27,44: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -70.5
+PASS 27,27,45: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -69.5
+PASS 27,27,46: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how -68.5
+PASS 27,27,47: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "0"
+PASS 27,27,48: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "1"
+PASS 27,27,49: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "2"
+PASS 27,27,50: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "3"
+PASS 27,27,51: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-1"
+PASS 27,27,52: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "4"
+PASS 27,27,53: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "5"
+PASS 27,27,54: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "NaN"
+PASS 27,27,55: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "0"
+PASS 27,27,56: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "Infinity"
+PASS 27,27,57: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-Infinity"
+PASS 27,27,58: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "65535"
+PASS 27,27,59: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "65536"
+PASS 27,27,60: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "65537"
+PASS 27,27,61: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "65538"
+PASS 27,27,62: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "65539"
+PASS 27,27,63: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "65540"
+PASS 27,27,64: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-65537"
+PASS 27,27,65: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-65536"
+PASS 27,27,66: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-65535"
+PASS 27,27,67: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-65534"
+PASS 27,27,68: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-65533"
+PASS 27,27,69: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-65532"
+PASS 27,27,70: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "4294967295"
+PASS 27,27,71: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "4294967296"
+PASS 27,27,72: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "4294967297"
+PASS 27,27,73: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "4294967298"
+PASS 27,27,74: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "4294967299"
+PASS 27,27,75: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "4294967300"
+PASS 27,27,76: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-0.5"
+PASS 27,27,77: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "0.5"
+PASS 27,27,78: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "1.5"
+PASS 27,27,79: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "2.5"
+PASS 27,27,80: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "3.5"
+PASS 27,27,81: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "4.5"
+PASS 27,27,82: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-1.5"
+PASS 27,27,83: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-0.5"
+PASS 27,27,84: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "0.5"
+PASS 27,27,85: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "1.5"
+PASS 27,27,86: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "2.5"
+PASS 27,27,87: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "3.5"
+PASS 27,27,88: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-73.5"
+PASS 27,27,89: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-72.5"
+PASS 27,27,90: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-71.5"
+PASS 27,27,91: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-70.5"
+PASS 27,27,92: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-69.5"
+PASS 27,27,93: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "-68.5"
+PASS 27,27,94: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "6.5536e4"
+PASS 27,27,95: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how null
+PASS 27,27,96: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how undefined
+PASS 27,27,97: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how true
+PASS 27,27,98: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how false
+PASS 27,27,99: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how ""
+PASS 27,27,100: context range 27 [testDiv, 0, comment, 5], argument range 27 [testDiv, 0, comment, 5], how "quasit"
+PASS 27,28,0: context range 27 [testDiv, 0, comment, 5], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 27,28,1: context range 27 [testDiv, 0, comment, 5], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 27,28,2: context range 27 [testDiv, 0, comment, 5], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 27,28,3: context range 27 [testDiv, 0, comment, 5], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 27,29,0: context range 27 [testDiv, 0, comment, 5], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 27,29,1: context range 27 [testDiv, 0, comment, 5], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 27,29,2: context range 27 [testDiv, 0, comment, 5], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 27,29,3: context range 27 [testDiv, 0, comment, 5], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 27,30,0: context range 27 [testDiv, 0, comment, 5], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 27,30,1: context range 27 [testDiv, 0, comment, 5], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 27,30,2: context range 27 [testDiv, 0, comment, 5], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 27,30,3: context range 27 [testDiv, 0, comment, 5], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 27,31,0: context range 27 [testDiv, 0, comment, 5], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 27,31,1: context range 27 [testDiv, 0, comment, 5], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 27,31,2: context range 27 [testDiv, 0, comment, 5], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 27,31,3: context range 27 [testDiv, 0, comment, 5], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 27,32,0: context range 27 [testDiv, 0, comment, 5], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 27,32,1: context range 27 [testDiv, 0, comment, 5], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 27,32,2: context range 27 [testDiv, 0, comment, 5], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 27,32,3: context range 27 [testDiv, 0, comment, 5], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 27,33,0: context range 27 [testDiv, 0, comment, 5], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 27,33,1: context range 27 [testDiv, 0, comment, 5], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 27,33,2: context range 27 [testDiv, 0, comment, 5], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 27,33,3: context range 27 [testDiv, 0, comment, 5], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 27,34,0: context range 27 [testDiv, 0, comment, 5], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 27,34,1: context range 27 [testDiv, 0, comment, 5], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 27,34,2: context range 27 [testDiv, 0, comment, 5], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 27,34,3: context range 27 [testDiv, 0, comment, 5], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 27,35,0: context range 27 [testDiv, 0, comment, 5], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 27,35,1: context range 27 [testDiv, 0, comment, 5], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 27,35,2: context range 27 [testDiv, 0, comment, 5], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 27,35,3: context range 27 [testDiv, 0, comment, 5], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 27,36,0: context range 27 [testDiv, 0, comment, 5], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 27,36,1: context range 27 [testDiv, 0, comment, 5], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 27,36,2: context range 27 [testDiv, 0, comment, 5], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 27,36,3: context range 27 [testDiv, 0, comment, 5], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 27,37,0: context range 27 [testDiv, 0, comment, 5], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 27,37,1: context range 27 [testDiv, 0, comment, 5], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 27,37,2: context range 27 [testDiv, 0, comment, 5], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 27,37,3: context range 27 [testDiv, 0, comment, 5], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 27,38,0: context range 27 [testDiv, 0, comment, 5], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 27,38,1: context range 27 [testDiv, 0, comment, 5], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 27,38,2: context range 27 [testDiv, 0, comment, 5], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 27,38,3: context range 27 [testDiv, 0, comment, 5], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 27,39,0: context range 27 [testDiv, 0, comment, 5], argument range same as first range, how 0
+PASS 27,39,1: context range 27 [testDiv, 0, comment, 5], argument range same as first range, how 1
+PASS 27,39,2: context range 27 [testDiv, 0, comment, 5], argument range same as first range, how 2
+PASS 27,39,3: context range 27 [testDiv, 0, comment, 5], argument range same as first range, how 3
+FAIL 28,0,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 28,0,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 28,0,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 28,0,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 28,1,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 28,1,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 28,1,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 28,1,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 28,2,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 28,2,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 28,2,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 28,2,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 28,3,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 28,3,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 28,3,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 28,3,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 28,4,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 28,4,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 28,4,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 28,4,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 28,5,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 28,5,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 28,5,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 28,5,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 28,6,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 28,6,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 28,6,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 28,6,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 28,7,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 28,7,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 28,7,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 28,7,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 28,8,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 28,8,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 28,8,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 28,8,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 28,9,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 28,9,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 28,9,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 28,9,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 28,10,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 28,10,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 28,10,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 28,10,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 28,11,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 28,11,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 28,11,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 28,11,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 28,12,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 28,12,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 28,12,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 28,12,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 28,13,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 28,13,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 28,13,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 28,13,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 28,14,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 28,14,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 28,14,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 28,14,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 28,15,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 28,15,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 28,15,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 28,15,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 28,16,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 28,16,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 28,16,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 28,16,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 28,17,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 28,17,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 28,17,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 28,17,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 28,18,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 28,18,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 28,18,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 28,18,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 28,19,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 28,19,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 28,19,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 28,19,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 28,20,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 28,20,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 28,20,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 28,20,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 28,21,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 28,21,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 28,21,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 28,21,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 28,22,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 28,22,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 28,22,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 28,22,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 28,23,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 28,23,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 28,23,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 28,23,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 28,24,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 24 [document, 0, document, 1], how 0
+PASS 28,24,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 24 [document, 0, document, 1], how 1
+PASS 28,24,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 24 [document, 0, document, 1], how 2
+PASS 28,24,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 24 [document, 0, document, 1], how 3
+PASS 28,25,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 25 [document, 0, document, 2], how 0
+PASS 28,25,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 25 [document, 0, document, 2], how 1
+PASS 28,25,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 25 [document, 0, document, 2], how 2
+PASS 28,25,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 25 [document, 0, document, 2], how 3
+PASS 28,26,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 26 [comment, 2, comment, 3], how 0
+PASS 28,26,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 26 [comment, 2, comment, 3], how 1
+PASS 28,26,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 26 [comment, 2, comment, 3], how 2
+PASS 28,26,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 26 [comment, 2, comment, 3], how 3
+PASS 28,27,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 28,27,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 28,27,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 28,27,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 28,28,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 28,28,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 28,28,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 28,28,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 28,29,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 28,29,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 28,29,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 28,29,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 28,30,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 28,30,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 28,30,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 28,30,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 28,31,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 28,31,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 28,31,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 28,31,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 28,32,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 28,32,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 28,32,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 28,32,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 28,33,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 28,33,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 28,33,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 28,33,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 28,34,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 28,34,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 28,34,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 28,34,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 28,35,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 28,35,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 28,35,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 28,35,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 28,36,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 28,36,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 28,36,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 28,36,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 28,37,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 28,37,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 28,37,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 28,37,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 28,38,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 28,38,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 28,38,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 28,38,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 28,39,0: context range 28 [foreignDoc, 1, foreignComment, 2], argument range same as first range, how 0
+PASS 28,39,1: context range 28 [foreignDoc, 1, foreignComment, 2], argument range same as first range, how 1
+PASS 28,39,2: context range 28 [foreignDoc, 1, foreignComment, 2], argument range same as first range, how 2
+PASS 28,39,3: context range 28 [foreignDoc, 1, foreignComment, 2], argument range same as first range, how 3
+FAIL 29,0,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 29,0,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 29,0,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 29,0,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 29,1,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 29,1,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 29,1,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 29,1,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 29,2,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 29,2,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 29,2,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 29,2,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 29,3,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 29,3,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 29,3,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 29,3,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 29,4,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 29,4,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 29,4,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 29,4,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 29,5,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 29,5,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 29,5,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 29,5,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 29,6,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 29,6,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 29,6,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 29,6,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 29,7,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 29,7,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 29,7,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 29,7,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 29,8,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 29,8,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 29,8,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 29,8,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 29,9,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 29,9,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 29,9,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 29,9,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 29,10,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 29,10,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 29,10,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 29,10,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 29,11,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 29,11,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 29,11,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 29,11,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 29,12,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 29,12,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 29,12,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 29,12,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 29,13,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 29,13,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 29,13,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 29,13,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 29,14,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 29,14,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 29,14,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 29,14,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 29,15,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 29,15,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 29,15,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 29,15,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 29,16,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 29,16,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 29,16,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 29,16,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 29,17,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 29,17,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 29,17,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 29,17,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 29,18,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 29,18,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 29,18,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 29,18,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 29,19,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 29,19,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 29,19,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 29,19,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 29,20,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 29,20,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 29,20,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 29,20,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 29,21,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 29,21,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 29,21,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 29,21,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 29,22,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 29,22,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 29,22,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 29,22,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 29,23,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 29,23,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 29,23,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 29,23,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 29,24,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 24 [document, 0, document, 1], how 0
+PASS 29,24,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 24 [document, 0, document, 1], how 1
+PASS 29,24,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 24 [document, 0, document, 1], how 2
+PASS 29,24,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 24 [document, 0, document, 1], how 3
+PASS 29,25,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 25 [document, 0, document, 2], how 0
+PASS 29,25,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 25 [document, 0, document, 2], how 1
+PASS 29,25,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 25 [document, 0, document, 2], how 2
+PASS 29,25,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 25 [document, 0, document, 2], how 3
+PASS 29,26,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 26 [comment, 2, comment, 3], how 0
+PASS 29,26,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 26 [comment, 2, comment, 3], how 1
+PASS 29,26,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 26 [comment, 2, comment, 3], how 2
+PASS 29,26,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 26 [comment, 2, comment, 3], how 3
+PASS 29,27,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 29,27,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 29,27,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 29,27,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 29,28,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 29,28,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 29,28,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 29,28,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 29,29,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 29,29,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 29,29,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 29,29,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 29,30,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 29,30,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 29,30,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 29,30,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 29,31,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 29,31,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 29,31,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 29,31,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 29,32,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 29,32,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 29,32,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 29,32,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 29,33,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 29,33,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 29,33,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 29,33,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 29,34,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 29,34,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 29,34,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 29,34,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 29,35,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 29,35,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 29,35,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 29,35,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 29,36,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 29,36,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 29,36,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 29,36,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 29,37,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 29,37,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 29,37,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 29,37,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 29,38,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 29,38,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 29,38,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 29,38,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 29,39,0: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range same as first range, how 0
+PASS 29,39,1: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range same as first range, how 1
+PASS 29,39,2: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range same as first range, how 2
+PASS 29,39,3: context range 29 [foreignDoc.body, 0, foreignTextNode, 36], argument range same as first range, how 3
+FAIL 30,0,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 30,0,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 30,0,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 30,0,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 30,1,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 30,1,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 30,1,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 30,1,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 30,2,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 30,2,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 30,2,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 30,2,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 30,3,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 30,3,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 30,3,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 30,3,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 30,4,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 30,4,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 30,4,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 30,4,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 30,5,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 30,5,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 30,5,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 30,5,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 30,6,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 30,6,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 30,6,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 30,6,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 30,7,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 30,7,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 30,7,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 30,7,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 30,8,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 30,8,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 30,8,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 30,8,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 30,9,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 30,9,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 30,9,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 30,9,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 30,10,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 30,10,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 30,10,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 30,10,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 30,11,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 30,11,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 30,11,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 30,11,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 30,12,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 30,12,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 30,12,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 30,12,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 30,13,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 30,13,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 30,13,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 30,13,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 30,14,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 30,14,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 30,14,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 30,14,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 30,15,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 30,15,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 30,15,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 30,15,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 30,16,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 30,16,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 30,16,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 30,16,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 30,17,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 30,17,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 30,17,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 30,17,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 30,18,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 30,18,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 30,18,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 30,18,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 30,19,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 30,19,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 30,19,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 30,19,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 30,20,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 30,20,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 30,20,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 30,20,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 30,21,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 30,21,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 30,21,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 30,21,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 30,22,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 30,22,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 30,22,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 30,22,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 30,23,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 30,23,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 30,23,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 30,23,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 30,24,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 24 [document, 0, document, 1], how 0
+PASS 30,24,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 24 [document, 0, document, 1], how 1
+PASS 30,24,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 24 [document, 0, document, 1], how 2
+PASS 30,24,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 24 [document, 0, document, 1], how 3
+PASS 30,25,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 25 [document, 0, document, 2], how 0
+PASS 30,25,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 25 [document, 0, document, 2], how 1
+PASS 30,25,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 25 [document, 0, document, 2], how 2
+PASS 30,25,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 25 [document, 0, document, 2], how 3
+PASS 30,26,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 26 [comment, 2, comment, 3], how 0
+PASS 30,26,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 26 [comment, 2, comment, 3], how 1
+PASS 30,26,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 26 [comment, 2, comment, 3], how 2
+PASS 30,26,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 26 [comment, 2, comment, 3], how 3
+PASS 30,27,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 30,27,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 30,27,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 30,27,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 30,28,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 30,28,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 30,28,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 30,28,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 30,29,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 30,29,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 30,29,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 30,29,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 30,30,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 30,30,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 30,30,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 30,30,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 30,31,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 30,31,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 30,31,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 30,31,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 30,32,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 30,32,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 30,32,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 30,32,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 30,33,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 30,33,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 30,33,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 30,33,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 30,34,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 30,34,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 30,34,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 30,34,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 30,35,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 30,35,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 30,35,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 30,35,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 30,36,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 30,36,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 30,36,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 30,36,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 30,37,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 30,37,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 30,37,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 30,37,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 30,38,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 30,38,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 30,38,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 30,38,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 30,39,0: context range 30 [xmlDoc, 1, xmlComment, 0], argument range same as first range, how 0
+PASS 30,39,1: context range 30 [xmlDoc, 1, xmlComment, 0], argument range same as first range, how 1
+PASS 30,39,2: context range 30 [xmlDoc, 1, xmlComment, 0], argument range same as first range, how 2
+PASS 30,39,3: context range 30 [xmlDoc, 1, xmlComment, 0], argument range same as first range, how 3
+FAIL 31,0,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 31,0,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 31,0,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 31,0,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 31,1,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 31,1,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 31,1,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 31,1,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 31,2,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 31,2,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 31,2,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 31,2,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 31,3,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 31,3,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 31,3,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 31,3,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 31,4,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 31,4,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 31,4,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 31,4,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 31,5,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 31,5,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 31,5,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 31,5,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 31,6,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 31,6,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 31,6,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 31,6,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 31,7,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 31,7,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 31,7,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 31,7,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 31,8,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 31,8,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 31,8,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 31,8,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 31,9,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 31,9,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 31,9,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 31,9,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 31,10,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 31,10,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 31,10,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 31,10,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 31,11,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 31,11,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 31,11,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 31,11,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 31,12,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 31,12,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 31,12,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 31,12,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 31,13,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 31,13,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 31,13,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 31,13,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 31,14,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 31,14,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 31,14,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 31,14,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 31,15,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 31,15,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 31,15,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 31,15,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 31,16,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 31,16,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 31,16,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 31,16,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 31,17,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 31,17,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 31,17,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 31,17,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 31,18,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 31,18,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 31,18,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 31,18,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 31,19,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 31,19,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 31,19,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 31,19,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 31,20,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 31,20,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 31,20,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 31,20,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 31,21,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 31,21,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 31,21,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 31,21,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 31,22,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 31,22,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 31,22,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 31,22,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 31,23,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 31,23,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 31,23,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 31,23,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 31,24,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 24 [document, 0, document, 1], how 0
+PASS 31,24,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 24 [document, 0, document, 1], how 1
+PASS 31,24,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 24 [document, 0, document, 1], how 2
+PASS 31,24,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 24 [document, 0, document, 1], how 3
+PASS 31,25,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 25 [document, 0, document, 2], how 0
+PASS 31,25,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 25 [document, 0, document, 2], how 1
+PASS 31,25,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 25 [document, 0, document, 2], how 2
+PASS 31,25,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 25 [document, 0, document, 2], how 3
+PASS 31,26,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 26 [comment, 2, comment, 3], how 0
+PASS 31,26,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 26 [comment, 2, comment, 3], how 1
+PASS 31,26,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 26 [comment, 2, comment, 3], how 2
+PASS 31,26,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 26 [comment, 2, comment, 3], how 3
+PASS 31,27,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 31,27,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 31,27,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 31,27,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 31,28,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 31,28,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 31,28,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 31,28,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 31,29,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 31,29,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 31,29,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 31,29,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 31,30,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 31,30,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 31,30,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 31,30,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 31,31,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 31,31,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 31,31,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 31,31,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 31,32,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 31,32,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 31,32,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 31,32,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 31,33,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 31,33,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 31,33,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 31,33,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 31,34,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 31,34,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 31,34,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 31,34,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 31,35,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 31,35,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 31,35,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 31,35,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 31,36,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 31,36,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 31,36,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 31,36,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 31,37,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 31,37,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 31,37,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 31,37,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 31,38,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 31,38,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 31,38,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 31,38,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 31,39,0: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range same as first range, how 0
+PASS 31,39,1: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range same as first range, how 1
+PASS 31,39,2: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range same as first range, how 2
+PASS 31,39,3: context range 31 [detachedTextNode, 0, detachedTextNode, 8], argument range same as first range, how 3
+FAIL 32,0,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 32,0,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 32,0,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 32,0,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 32,1,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 32,1,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 32,1,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 32,1,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 32,2,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 32,2,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 32,2,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 32,2,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 32,3,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 32,3,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 32,3,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 32,3,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 32,4,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 32,4,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 32,4,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 32,4,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 32,5,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 32,5,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 32,5,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 32,5,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 32,6,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 32,6,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 32,6,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 32,6,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 32,7,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 32,7,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 32,7,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 32,7,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 32,8,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 32,8,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 32,8,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 32,8,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 32,9,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 32,9,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 32,9,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 32,9,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 32,10,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 32,10,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 32,10,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 32,10,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 32,11,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 32,11,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 32,11,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 32,11,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 32,12,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 32,12,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 32,12,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 32,12,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 32,13,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 32,13,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 32,13,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 32,13,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 32,14,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 32,14,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 32,14,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 32,14,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 32,15,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 32,15,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 32,15,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 32,15,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 32,16,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 32,16,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 32,16,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 32,16,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 32,17,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 32,17,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 32,17,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 32,17,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 32,18,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 32,18,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 32,18,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 32,18,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 32,19,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 32,19,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 32,19,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 32,19,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 32,20,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 32,20,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 32,20,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 32,20,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 32,21,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 32,21,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 32,21,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 32,21,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 32,22,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 32,22,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 32,22,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 32,22,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 32,23,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 32,23,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 32,23,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 32,23,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 32,24,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 24 [document, 0, document, 1], how 0
+PASS 32,24,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 24 [document, 0, document, 1], how 1
+PASS 32,24,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 24 [document, 0, document, 1], how 2
+PASS 32,24,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 24 [document, 0, document, 1], how 3
+PASS 32,25,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 25 [document, 0, document, 2], how 0
+PASS 32,25,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 25 [document, 0, document, 2], how 1
+PASS 32,25,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 25 [document, 0, document, 2], how 2
+PASS 32,25,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 25 [document, 0, document, 2], how 3
+PASS 32,26,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 26 [comment, 2, comment, 3], how 0
+PASS 32,26,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 26 [comment, 2, comment, 3], how 1
+PASS 32,26,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 26 [comment, 2, comment, 3], how 2
+PASS 32,26,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 26 [comment, 2, comment, 3], how 3
+PASS 32,27,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 32,27,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 32,27,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 32,27,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 32,28,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 32,28,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 32,28,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 32,28,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 32,29,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 32,29,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 32,29,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 32,29,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 32,30,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 32,30,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 32,30,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 32,30,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 32,31,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 32,31,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 32,31,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 32,31,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 32,32,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 32,32,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 32,32,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 32,32,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 32,33,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 32,33,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 32,33,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 32,33,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 32,34,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 32,34,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 32,34,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 32,34,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 32,35,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 32,35,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 32,35,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 32,35,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 32,36,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 32,36,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 32,36,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 32,36,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 32,37,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 32,37,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 32,37,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 32,37,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 32,38,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 32,38,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 32,38,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 32,38,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 32,39,0: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range same as first range, how 0
+PASS 32,39,1: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range same as first range, how 1
+PASS 32,39,2: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range same as first range, how 2
+PASS 32,39,3: context range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], argument range same as first range, how 3
+FAIL 33,0,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 33,0,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 33,0,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 33,0,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 33,1,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 33,1,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 33,1,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 33,1,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 33,2,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 33,2,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 33,2,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 33,2,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 33,3,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 33,3,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 33,3,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 33,3,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 33,4,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 33,4,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 33,4,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 33,4,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 33,5,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 33,5,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 33,5,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 33,5,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 33,6,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 33,6,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 33,6,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 33,6,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 33,7,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 33,7,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 33,7,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 33,7,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 33,8,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 33,8,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 33,8,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 33,8,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 33,9,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 33,9,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 33,9,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 33,9,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 33,10,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 33,10,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 33,10,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 33,10,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 33,11,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 33,11,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 33,11,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 33,11,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 33,12,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 33,12,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 33,12,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 33,12,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 33,13,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 33,13,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 33,13,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 33,13,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 33,14,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 33,14,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 33,14,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 33,14,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 33,15,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 33,15,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 33,15,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 33,15,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 33,16,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 33,16,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 33,16,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 33,16,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 33,17,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 33,17,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 33,17,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 33,17,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 33,18,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 33,18,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 33,18,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 33,18,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 33,19,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 33,19,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 33,19,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 33,19,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 33,20,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 33,20,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 33,20,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 33,20,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 33,21,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 33,21,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 33,21,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 33,21,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 33,22,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 33,22,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 33,22,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 33,22,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 33,23,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 33,23,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 33,23,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 33,23,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 33,24,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 24 [document, 0, document, 1], how 0
+PASS 33,24,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 24 [document, 0, document, 1], how 1
+PASS 33,24,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 24 [document, 0, document, 1], how 2
+PASS 33,24,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 24 [document, 0, document, 1], how 3
+PASS 33,25,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 25 [document, 0, document, 2], how 0
+PASS 33,25,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 25 [document, 0, document, 2], how 1
+PASS 33,25,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 25 [document, 0, document, 2], how 2
+PASS 33,25,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 25 [document, 0, document, 2], how 3
+PASS 33,26,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 26 [comment, 2, comment, 3], how 0
+PASS 33,26,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 26 [comment, 2, comment, 3], how 1
+PASS 33,26,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 26 [comment, 2, comment, 3], how 2
+PASS 33,26,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 26 [comment, 2, comment, 3], how 3
+PASS 33,27,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 33,27,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 33,27,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 33,27,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 33,28,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 33,28,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 33,28,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 33,28,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 33,29,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 33,29,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 33,29,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 33,29,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 33,30,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 33,30,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 33,30,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 33,30,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 33,31,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 33,31,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 33,31,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 33,31,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 33,32,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 33,32,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 33,32,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 33,32,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 33,33,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 33,33,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 33,33,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 33,33,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 33,34,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 33,34,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 33,34,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 33,34,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 33,35,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 33,35,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 33,35,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 33,35,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 33,36,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 33,36,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 33,36,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 33,36,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 33,37,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 33,37,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 33,37,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 33,37,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 33,38,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 33,38,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 33,38,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 33,38,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 33,39,0: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range same as first range, how 0
+PASS 33,39,1: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range same as first range, how 1
+PASS 33,39,2: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range same as first range, how 2
+PASS 33,39,3: context range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], argument range same as first range, how 3
+FAIL 34,0,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 34,0,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 34,0,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 34,0,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 34,1,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 34,1,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 34,1,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 34,1,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 34,2,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 34,2,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 34,2,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 34,2,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 34,3,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 34,3,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 34,3,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 34,3,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 34,4,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 34,4,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 34,4,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 34,4,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 34,5,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 34,5,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 34,5,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 34,5,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 34,6,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 34,6,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 34,6,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 34,6,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 34,7,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 34,7,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 34,7,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 34,7,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 34,8,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 34,8,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 34,8,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 34,8,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 34,9,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 34,9,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 34,9,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 34,9,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 34,10,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 34,10,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 34,10,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 34,10,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 34,11,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 34,11,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 34,11,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 34,11,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 34,12,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 34,12,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 34,12,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 34,12,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 34,13,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 34,13,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 34,13,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 34,13,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 34,14,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 34,14,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 34,14,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 34,14,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 34,15,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 34,15,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 34,15,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 34,15,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 34,16,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 34,16,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 34,16,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 34,16,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 34,17,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 34,17,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 34,17,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 34,17,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 34,18,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 34,18,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 34,18,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 34,18,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 34,19,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 34,19,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 34,19,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 34,19,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 34,20,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 34,20,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 34,20,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 34,20,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 34,21,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 34,21,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 34,21,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 34,21,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 34,22,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 34,22,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 34,22,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 34,22,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 34,23,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 34,23,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 34,23,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 34,23,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 34,24,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 24 [document, 0, document, 1], how 0
+PASS 34,24,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 24 [document, 0, document, 1], how 1
+PASS 34,24,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 24 [document, 0, document, 1], how 2
+PASS 34,24,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 24 [document, 0, document, 1], how 3
+PASS 34,25,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 25 [document, 0, document, 2], how 0
+PASS 34,25,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 25 [document, 0, document, 2], how 1
+PASS 34,25,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 25 [document, 0, document, 2], how 2
+PASS 34,25,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 25 [document, 0, document, 2], how 3
+PASS 34,26,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 26 [comment, 2, comment, 3], how 0
+PASS 34,26,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 26 [comment, 2, comment, 3], how 1
+PASS 34,26,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 26 [comment, 2, comment, 3], how 2
+PASS 34,26,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 26 [comment, 2, comment, 3], how 3
+PASS 34,27,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 34,27,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 34,27,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 34,27,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 34,28,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 34,28,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 34,28,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 34,28,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 34,29,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 34,29,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 34,29,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 34,29,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 34,30,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 34,30,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 34,30,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 34,30,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 34,31,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 34,31,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 34,31,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 34,31,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 34,32,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 34,32,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 34,32,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 34,32,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 34,33,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 34,33,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 34,33,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 34,33,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 34,34,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 34,34,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 34,34,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 34,34,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 34,35,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 34,35,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 34,35,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 34,35,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 34,36,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 34,36,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 34,36,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 34,36,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 34,37,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 34,37,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 34,37,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 34,37,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 34,38,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 34,38,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 34,38,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 34,38,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 34,39,0: context range 34 [detachedComment, 3, detachedComment, 4], argument range same as first range, how 0
+PASS 34,39,1: context range 34 [detachedComment, 3, detachedComment, 4], argument range same as first range, how 1
+PASS 34,39,2: context range 34 [detachedComment, 3, detachedComment, 4], argument range same as first range, how 2
+PASS 34,39,3: context range 34 [detachedComment, 3, detachedComment, 4], argument range same as first range, how 3
+FAIL 35,0,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 35,0,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 35,0,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 35,0,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 35,1,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 35,1,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 35,1,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 35,1,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 35,2,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 35,2,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 35,2,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 35,2,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 35,3,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 35,3,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 35,3,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 35,3,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 35,4,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 35,4,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 35,4,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 35,4,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 35,5,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 35,5,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 35,5,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 35,5,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 35,6,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 35,6,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 35,6,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 35,6,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 35,7,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 35,7,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 35,7,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 35,7,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 35,8,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 35,8,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 35,8,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 35,8,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 35,9,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 35,9,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 35,9,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 35,9,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 35,10,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 35,10,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 35,10,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 35,10,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 35,11,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 35,11,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 35,11,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 35,11,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 35,12,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 35,12,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 35,12,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 35,12,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 35,13,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 35,13,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 35,13,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 35,13,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 35,14,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 35,14,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 35,14,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 35,14,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 35,15,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 35,15,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 35,15,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 35,15,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 35,16,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 35,16,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 35,16,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 35,16,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 35,17,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 35,17,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 35,17,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 35,17,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 35,18,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 35,18,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 35,18,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 35,18,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 35,19,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 35,19,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 35,19,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 35,19,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 35,20,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 35,20,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 35,20,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 35,20,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 35,21,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 35,21,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 35,21,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 35,21,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 35,22,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 35,22,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 35,22,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 35,22,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 35,23,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 35,23,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 35,23,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 35,23,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 35,24,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 24 [document, 0, document, 1], how 0
+PASS 35,24,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 24 [document, 0, document, 1], how 1
+PASS 35,24,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 24 [document, 0, document, 1], how 2
+PASS 35,24,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 24 [document, 0, document, 1], how 3
+PASS 35,25,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 25 [document, 0, document, 2], how 0
+PASS 35,25,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 25 [document, 0, document, 2], how 1
+PASS 35,25,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 25 [document, 0, document, 2], how 2
+PASS 35,25,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 25 [document, 0, document, 2], how 3
+PASS 35,26,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 26 [comment, 2, comment, 3], how 0
+PASS 35,26,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 26 [comment, 2, comment, 3], how 1
+PASS 35,26,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 26 [comment, 2, comment, 3], how 2
+PASS 35,26,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 26 [comment, 2, comment, 3], how 3
+PASS 35,27,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 35,27,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 35,27,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 35,27,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 35,28,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 35,28,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 35,28,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 35,28,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 35,29,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 35,29,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 35,29,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 35,29,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 35,30,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 35,30,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 35,30,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 35,30,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 35,31,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 35,31,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 35,31,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 35,31,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 35,32,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 35,32,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 35,32,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 35,32,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 35,33,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 35,33,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 35,33,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 35,33,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 35,34,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 35,34,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 35,34,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 35,34,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 35,35,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 35,35,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 35,35,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 35,35,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 35,36,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 35,36,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 35,36,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 35,36,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 35,37,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 35,37,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 35,37,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 35,37,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 35,38,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 35,38,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 35,38,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 35,38,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 35,39,0: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range same as first range, how 0
+PASS 35,39,1: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range same as first range, how 1
+PASS 35,39,2: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range same as first range, how 2
+PASS 35,39,3: context range 35 [detachedForeignComment, 0, detachedForeignComment, 1], argument range same as first range, how 3
+FAIL 36,0,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 36,0,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 36,0,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 36,0,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 36,1,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 36,1,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 36,1,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 36,1,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 36,2,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 36,2,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 36,2,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 36,2,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 36,3,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 36,3,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 36,3,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 36,3,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 36,4,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 36,4,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 36,4,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 36,4,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 36,5,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 36,5,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 36,5,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 36,5,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 36,6,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 36,6,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 36,6,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 36,6,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 36,7,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 36,7,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 36,7,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 36,7,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 36,8,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 36,8,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 36,8,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 36,8,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 36,9,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 36,9,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 36,9,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 36,9,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 36,10,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 36,10,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 36,10,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 36,10,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 36,11,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 36,11,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 36,11,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 36,11,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 36,12,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 36,12,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 36,12,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 36,12,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 36,13,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 36,13,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 36,13,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 36,13,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 36,14,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 36,14,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 36,14,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 36,14,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 36,15,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 36,15,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 36,15,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 36,15,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 36,16,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 36,16,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 36,16,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 36,16,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 36,17,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 36,17,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 36,17,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 36,17,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 36,18,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 36,18,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 36,18,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 36,18,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 36,19,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 36,19,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 36,19,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 36,19,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 36,20,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 36,20,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 36,20,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 36,20,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 36,21,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 36,21,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 36,21,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 36,21,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 36,22,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 36,22,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 36,22,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 36,22,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 36,23,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 36,23,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 36,23,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 36,23,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 36,24,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 24 [document, 0, document, 1], how 0
+PASS 36,24,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 24 [document, 0, document, 1], how 1
+PASS 36,24,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 24 [document, 0, document, 1], how 2
+PASS 36,24,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 24 [document, 0, document, 1], how 3
+PASS 36,25,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 25 [document, 0, document, 2], how 0
+PASS 36,25,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 25 [document, 0, document, 2], how 1
+PASS 36,25,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 25 [document, 0, document, 2], how 2
+PASS 36,25,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 25 [document, 0, document, 2], how 3
+PASS 36,26,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 26 [comment, 2, comment, 3], how 0
+PASS 36,26,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 26 [comment, 2, comment, 3], how 1
+PASS 36,26,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 26 [comment, 2, comment, 3], how 2
+PASS 36,26,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 26 [comment, 2, comment, 3], how 3
+PASS 36,27,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 36,27,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 36,27,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 36,27,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 36,28,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 36,28,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 36,28,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 36,28,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 36,29,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 36,29,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 36,29,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 36,29,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 36,30,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 36,30,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 36,30,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 36,30,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 36,31,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 36,31,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 36,31,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 36,31,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 36,32,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 36,32,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 36,32,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 36,32,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 36,33,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 36,33,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 36,33,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 36,33,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 36,34,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 36,34,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 36,34,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 36,34,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 36,35,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 36,35,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 36,35,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 36,35,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 36,36,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 36,36,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 36,36,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 36,36,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 36,37,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 36,37,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 36,37,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 36,37,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 36,38,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 36,38,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 36,38,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 36,38,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 36,39,0: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range same as first range, how 0
+PASS 36,39,1: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range same as first range, how 1
+PASS 36,39,2: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range same as first range, how 2
+PASS 36,39,3: context range 36 [detachedXmlComment, 2, detachedXmlComment, 6], argument range same as first range, how 3
+FAIL 37,0,0: context range 37 [docfrag, 0, docfrag, 0], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 37,0,1: context range 37 [docfrag, 0, docfrag, 0], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 37,0,2: context range 37 [docfrag, 0, docfrag, 0], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 37,0,3: context range 37 [docfrag, 0, docfrag, 0], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 37,1,0: context range 37 [docfrag, 0, docfrag, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 37,1,1: context range 37 [docfrag, 0, docfrag, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 37,1,2: context range 37 [docfrag, 0, docfrag, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 37,1,3: context range 37 [docfrag, 0, docfrag, 0], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 37,2,0: context range 37 [docfrag, 0, docfrag, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 37,2,1: context range 37 [docfrag, 0, docfrag, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 37,2,2: context range 37 [docfrag, 0, docfrag, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 37,2,3: context range 37 [docfrag, 0, docfrag, 0], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 37,3,0: context range 37 [docfrag, 0, docfrag, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 37,3,1: context range 37 [docfrag, 0, docfrag, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 37,3,2: context range 37 [docfrag, 0, docfrag, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 37,3,3: context range 37 [docfrag, 0, docfrag, 0], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 37,4,0: context range 37 [docfrag, 0, docfrag, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 37,4,1: context range 37 [docfrag, 0, docfrag, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 37,4,2: context range 37 [docfrag, 0, docfrag, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 37,4,3: context range 37 [docfrag, 0, docfrag, 0], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 37,5,0: context range 37 [docfrag, 0, docfrag, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 37,5,1: context range 37 [docfrag, 0, docfrag, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 37,5,2: context range 37 [docfrag, 0, docfrag, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 37,5,3: context range 37 [docfrag, 0, docfrag, 0], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 37,6,0: context range 37 [docfrag, 0, docfrag, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 37,6,1: context range 37 [docfrag, 0, docfrag, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 37,6,2: context range 37 [docfrag, 0, docfrag, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 37,6,3: context range 37 [docfrag, 0, docfrag, 0], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 37,7,0: context range 37 [docfrag, 0, docfrag, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 37,7,1: context range 37 [docfrag, 0, docfrag, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 37,7,2: context range 37 [docfrag, 0, docfrag, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 37,7,3: context range 37 [docfrag, 0, docfrag, 0], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 37,8,0: context range 37 [docfrag, 0, docfrag, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 37,8,1: context range 37 [docfrag, 0, docfrag, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 37,8,2: context range 37 [docfrag, 0, docfrag, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 37,8,3: context range 37 [docfrag, 0, docfrag, 0], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 37,9,0: context range 37 [docfrag, 0, docfrag, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 37,9,1: context range 37 [docfrag, 0, docfrag, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 37,9,2: context range 37 [docfrag, 0, docfrag, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 37,9,3: context range 37 [docfrag, 0, docfrag, 0], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 37,10,0: context range 37 [docfrag, 0, docfrag, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 37,10,1: context range 37 [docfrag, 0, docfrag, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 37,10,2: context range 37 [docfrag, 0, docfrag, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 37,10,3: context range 37 [docfrag, 0, docfrag, 0], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 37,11,0: context range 37 [docfrag, 0, docfrag, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 37,11,1: context range 37 [docfrag, 0, docfrag, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 37,11,2: context range 37 [docfrag, 0, docfrag, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 37,11,3: context range 37 [docfrag, 0, docfrag, 0], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 37,12,0: context range 37 [docfrag, 0, docfrag, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 37,12,1: context range 37 [docfrag, 0, docfrag, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 37,12,2: context range 37 [docfrag, 0, docfrag, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 37,12,3: context range 37 [docfrag, 0, docfrag, 0], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 37,13,0: context range 37 [docfrag, 0, docfrag, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 37,13,1: context range 37 [docfrag, 0, docfrag, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 37,13,2: context range 37 [docfrag, 0, docfrag, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 37,13,3: context range 37 [docfrag, 0, docfrag, 0], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 37,14,0: context range 37 [docfrag, 0, docfrag, 0], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 37,14,1: context range 37 [docfrag, 0, docfrag, 0], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 37,14,2: context range 37 [docfrag, 0, docfrag, 0], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 37,14,3: context range 37 [docfrag, 0, docfrag, 0], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 37,15,0: context range 37 [docfrag, 0, docfrag, 0], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 37,15,1: context range 37 [docfrag, 0, docfrag, 0], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 37,15,2: context range 37 [docfrag, 0, docfrag, 0], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 37,15,3: context range 37 [docfrag, 0, docfrag, 0], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 37,16,0: context range 37 [docfrag, 0, docfrag, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 37,16,1: context range 37 [docfrag, 0, docfrag, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 37,16,2: context range 37 [docfrag, 0, docfrag, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 37,16,3: context range 37 [docfrag, 0, docfrag, 0], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 37,17,0: context range 37 [docfrag, 0, docfrag, 0], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 37,17,1: context range 37 [docfrag, 0, docfrag, 0], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 37,17,2: context range 37 [docfrag, 0, docfrag, 0], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 37,17,3: context range 37 [docfrag, 0, docfrag, 0], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 37,18,0: context range 37 [docfrag, 0, docfrag, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 37,18,1: context range 37 [docfrag, 0, docfrag, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 37,18,2: context range 37 [docfrag, 0, docfrag, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 37,18,3: context range 37 [docfrag, 0, docfrag, 0], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 37,19,0: context range 37 [docfrag, 0, docfrag, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 37,19,1: context range 37 [docfrag, 0, docfrag, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 37,19,2: context range 37 [docfrag, 0, docfrag, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 37,19,3: context range 37 [docfrag, 0, docfrag, 0], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 37,20,0: context range 37 [docfrag, 0, docfrag, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 37,20,1: context range 37 [docfrag, 0, docfrag, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 37,20,2: context range 37 [docfrag, 0, docfrag, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 37,20,3: context range 37 [docfrag, 0, docfrag, 0], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 37,21,0: context range 37 [docfrag, 0, docfrag, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 37,21,1: context range 37 [docfrag, 0, docfrag, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 37,21,2: context range 37 [docfrag, 0, docfrag, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 37,21,3: context range 37 [docfrag, 0, docfrag, 0], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 37,22,0: context range 37 [docfrag, 0, docfrag, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 37,22,1: context range 37 [docfrag, 0, docfrag, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 37,22,2: context range 37 [docfrag, 0, docfrag, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 37,22,3: context range 37 [docfrag, 0, docfrag, 0], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 37,23,0: context range 37 [docfrag, 0, docfrag, 0], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 37,23,1: context range 37 [docfrag, 0, docfrag, 0], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 37,23,2: context range 37 [docfrag, 0, docfrag, 0], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 37,23,3: context range 37 [docfrag, 0, docfrag, 0], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 37,24,0: context range 37 [docfrag, 0, docfrag, 0], argument range 24 [document, 0, document, 1], how 0
+PASS 37,24,1: context range 37 [docfrag, 0, docfrag, 0], argument range 24 [document, 0, document, 1], how 1
+PASS 37,24,2: context range 37 [docfrag, 0, docfrag, 0], argument range 24 [document, 0, document, 1], how 2
+PASS 37,24,3: context range 37 [docfrag, 0, docfrag, 0], argument range 24 [document, 0, document, 1], how 3
+PASS 37,25,0: context range 37 [docfrag, 0, docfrag, 0], argument range 25 [document, 0, document, 2], how 0
+PASS 37,25,1: context range 37 [docfrag, 0, docfrag, 0], argument range 25 [document, 0, document, 2], how 1
+PASS 37,25,2: context range 37 [docfrag, 0, docfrag, 0], argument range 25 [document, 0, document, 2], how 2
+PASS 37,25,3: context range 37 [docfrag, 0, docfrag, 0], argument range 25 [document, 0, document, 2], how 3
+PASS 37,26,0: context range 37 [docfrag, 0, docfrag, 0], argument range 26 [comment, 2, comment, 3], how 0
+PASS 37,26,1: context range 37 [docfrag, 0, docfrag, 0], argument range 26 [comment, 2, comment, 3], how 1
+PASS 37,26,2: context range 37 [docfrag, 0, docfrag, 0], argument range 26 [comment, 2, comment, 3], how 2
+PASS 37,26,3: context range 37 [docfrag, 0, docfrag, 0], argument range 26 [comment, 2, comment, 3], how 3
+PASS 37,27,0: context range 37 [docfrag, 0, docfrag, 0], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 37,27,1: context range 37 [docfrag, 0, docfrag, 0], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 37,27,2: context range 37 [docfrag, 0, docfrag, 0], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 37,27,3: context range 37 [docfrag, 0, docfrag, 0], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 37,28,0: context range 37 [docfrag, 0, docfrag, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 37,28,1: context range 37 [docfrag, 0, docfrag, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 37,28,2: context range 37 [docfrag, 0, docfrag, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 37,28,3: context range 37 [docfrag, 0, docfrag, 0], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 37,29,0: context range 37 [docfrag, 0, docfrag, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 37,29,1: context range 37 [docfrag, 0, docfrag, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 37,29,2: context range 37 [docfrag, 0, docfrag, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 37,29,3: context range 37 [docfrag, 0, docfrag, 0], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 37,30,0: context range 37 [docfrag, 0, docfrag, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 37,30,1: context range 37 [docfrag, 0, docfrag, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 37,30,2: context range 37 [docfrag, 0, docfrag, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 37,30,3: context range 37 [docfrag, 0, docfrag, 0], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 37,31,0: context range 37 [docfrag, 0, docfrag, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 37,31,1: context range 37 [docfrag, 0, docfrag, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 37,31,2: context range 37 [docfrag, 0, docfrag, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 37,31,3: context range 37 [docfrag, 0, docfrag, 0], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 37,32,0: context range 37 [docfrag, 0, docfrag, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 37,32,1: context range 37 [docfrag, 0, docfrag, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 37,32,2: context range 37 [docfrag, 0, docfrag, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 37,32,3: context range 37 [docfrag, 0, docfrag, 0], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 37,33,0: context range 37 [docfrag, 0, docfrag, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 37,33,1: context range 37 [docfrag, 0, docfrag, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 37,33,2: context range 37 [docfrag, 0, docfrag, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 37,33,3: context range 37 [docfrag, 0, docfrag, 0], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 37,34,0: context range 37 [docfrag, 0, docfrag, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 37,34,1: context range 37 [docfrag, 0, docfrag, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 37,34,2: context range 37 [docfrag, 0, docfrag, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 37,34,3: context range 37 [docfrag, 0, docfrag, 0], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 37,35,0: context range 37 [docfrag, 0, docfrag, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 37,35,1: context range 37 [docfrag, 0, docfrag, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 37,35,2: context range 37 [docfrag, 0, docfrag, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 37,35,3: context range 37 [docfrag, 0, docfrag, 0], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 37,36,0: context range 37 [docfrag, 0, docfrag, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 37,36,1: context range 37 [docfrag, 0, docfrag, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 37,36,2: context range 37 [docfrag, 0, docfrag, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 37,36,3: context range 37 [docfrag, 0, docfrag, 0], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 37,37,0: context range 37 [docfrag, 0, docfrag, 0], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 37,37,1: context range 37 [docfrag, 0, docfrag, 0], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 37,37,2: context range 37 [docfrag, 0, docfrag, 0], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 37,37,3: context range 37 [docfrag, 0, docfrag, 0], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 37,38,0: context range 37 [docfrag, 0, docfrag, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 37,38,1: context range 37 [docfrag, 0, docfrag, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 37,38,2: context range 37 [docfrag, 0, docfrag, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 37,38,3: context range 37 [docfrag, 0, docfrag, 0], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 37,39,0: context range 37 [docfrag, 0, docfrag, 0], argument range same as first range, how 0
+PASS 37,39,1: context range 37 [docfrag, 0, docfrag, 0], argument range same as first range, how 1
+PASS 37,39,2: context range 37 [docfrag, 0, docfrag, 0], argument range same as first range, how 2
+PASS 37,39,3: context range 37 [docfrag, 0, docfrag, 0], argument range same as first range, how 3
+FAIL 38,0,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 0 [detached], how 0 InvalidStateError: DOM Exception 11
+FAIL 38,0,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 0 [detached], how 1 InvalidStateError: DOM Exception 11
+FAIL 38,0,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 0 [detached], how 2 InvalidStateError: DOM Exception 11
+FAIL 38,0,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 0 [detached], how 3 InvalidStateError: DOM Exception 11
+PASS 38,1,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 0
+PASS 38,1,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 1
+PASS 38,1,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 2
+PASS 38,1,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 1 [paras[0].firstChild, 0, paras[0].firstChild, 0], how 3
+PASS 38,2,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 0
+PASS 38,2,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 1
+PASS 38,2,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 2
+PASS 38,2,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 2 [paras[0].firstChild, 0, paras[0].firstChild, 1], how 3
+PASS 38,3,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 0
+PASS 38,3,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 1
+PASS 38,3,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 2
+PASS 38,3,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 3 [paras[0].firstChild, 2, paras[0].firstChild, 8], how 3
+PASS 38,4,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 0
+PASS 38,4,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 1
+PASS 38,4,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 2
+PASS 38,4,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 4 [paras[0].firstChild, 2, paras[0].firstChild, 9], how 3
+PASS 38,5,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 38,5,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 38,5,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 38,5,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 5 [paras[1].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 38,6,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 0
+PASS 38,6,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 1
+PASS 38,6,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 2
+PASS 38,6,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 6 [paras[1].firstChild, 2, paras[1].firstChild, 9], how 3
+PASS 38,7,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 0
+PASS 38,7,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 1
+PASS 38,7,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 2
+PASS 38,7,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 7 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], how 3
+PASS 38,8,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 0
+PASS 38,8,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 1
+PASS 38,8,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 2
+PASS 38,8,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 8 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], how 3
+PASS 38,9,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 0
+PASS 38,9,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 1
+PASS 38,9,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 2
+PASS 38,9,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 9 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], how 3
+PASS 38,10,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 0
+PASS 38,10,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 1
+PASS 38,10,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 2
+PASS 38,10,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 10 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], how 3
+PASS 38,11,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 0
+PASS 38,11,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 1
+PASS 38,11,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 2
+PASS 38,11,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 11 [document.documentElement, 0, document.documentElement, 1], how 3
+PASS 38,12,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 0
+PASS 38,12,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 1
+PASS 38,12,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 2
+PASS 38,12,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 12 [document.documentElement, 0, document.documentElement, 2], how 3
+PASS 38,13,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 0
+PASS 38,13,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 1
+PASS 38,13,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 2
+PASS 38,13,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 13 [document.documentElement, 1, document.documentElement, 2], how 3
+PASS 38,14,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 14 [document.head, 1, document.head, 1], how 0
+PASS 38,14,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 14 [document.head, 1, document.head, 1], how 1
+PASS 38,14,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 14 [document.head, 1, document.head, 1], how 2
+PASS 38,14,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 14 [document.head, 1, document.head, 1], how 3
+PASS 38,15,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 15 [document.body, 4, document.body, 5], how 0
+PASS 38,15,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 15 [document.body, 4, document.body, 5], how 1
+PASS 38,15,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 15 [document.body, 4, document.body, 5], how 2
+PASS 38,15,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 15 [document.body, 4, document.body, 5], how 3
+PASS 38,16,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 0
+PASS 38,16,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 1
+PASS 38,16,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 2
+PASS 38,16,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 16 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], how 3
+PASS 38,17,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 17 [paras[0], 0, paras[0], 1], how 0
+PASS 38,17,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 17 [paras[0], 0, paras[0], 1], how 1
+PASS 38,17,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 17 [paras[0], 0, paras[0], 1], how 2
+PASS 38,17,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 17 [paras[0], 0, paras[0], 1], how 3
+PASS 38,18,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 0
+PASS 38,18,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 1
+PASS 38,18,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 2
+PASS 38,18,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 18 [detachedPara1, 0, detachedPara1, 1], how 3
+PASS 38,19,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 0
+PASS 38,19,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 1
+PASS 38,19,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 2
+PASS 38,19,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 19 [paras[0].firstChild, 0, paras[1].firstChild, 0], how 3
+PASS 38,20,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 0
+PASS 38,20,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 1
+PASS 38,20,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 2
+PASS 38,20,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 20 [paras[0].firstChild, 0, paras[1].firstChild, 8], how 3
+PASS 38,21,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 0
+PASS 38,21,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 1
+PASS 38,21,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 2
+PASS 38,21,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 21 [paras[0].firstChild, 3, paras[3], 1], how 3
+PASS 38,22,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 0
+PASS 38,22,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 1
+PASS 38,22,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 2
+PASS 38,22,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 22 [paras[0], 0, paras[0].firstChild, 7], how 3
+PASS 38,23,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 23 [testDiv, 2, paras[4], 1], how 0
+PASS 38,23,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 23 [testDiv, 2, paras[4], 1], how 1
+PASS 38,23,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 23 [testDiv, 2, paras[4], 1], how 2
+PASS 38,23,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 23 [testDiv, 2, paras[4], 1], how 3
+PASS 38,24,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 24 [document, 0, document, 1], how 0
+PASS 38,24,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 24 [document, 0, document, 1], how 1
+PASS 38,24,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 24 [document, 0, document, 1], how 2
+PASS 38,24,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 24 [document, 0, document, 1], how 3
+PASS 38,25,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 25 [document, 0, document, 2], how 0
+PASS 38,25,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 25 [document, 0, document, 2], how 1
+PASS 38,25,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 25 [document, 0, document, 2], how 2
+PASS 38,25,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 25 [document, 0, document, 2], how 3
+PASS 38,26,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 26 [comment, 2, comment, 3], how 0
+PASS 38,26,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 26 [comment, 2, comment, 3], how 1
+PASS 38,26,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 26 [comment, 2, comment, 3], how 2
+PASS 38,26,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 26 [comment, 2, comment, 3], how 3
+PASS 38,27,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 27 [testDiv, 0, comment, 5], how 0
+PASS 38,27,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 27 [testDiv, 0, comment, 5], how 1
+PASS 38,27,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 27 [testDiv, 0, comment, 5], how 2
+PASS 38,27,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 27 [testDiv, 0, comment, 5], how 3
+PASS 38,28,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 28 [foreignDoc, 1, foreignComment, 2], how 0
+PASS 38,28,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 28 [foreignDoc, 1, foreignComment, 2], how 1
+PASS 38,28,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 28 [foreignDoc, 1, foreignComment, 2], how 2
+PASS 38,28,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 28 [foreignDoc, 1, foreignComment, 2], how 3
+PASS 38,29,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 0
+PASS 38,29,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 1
+PASS 38,29,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 2
+PASS 38,29,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 29 [foreignDoc.body, 0, foreignTextNode, 36], how 3
+PASS 38,30,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 30 [xmlDoc, 1, xmlComment, 0], how 0
+PASS 38,30,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 30 [xmlDoc, 1, xmlComment, 0], how 1
+PASS 38,30,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 30 [xmlDoc, 1, xmlComment, 0], how 2
+PASS 38,30,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 30 [xmlDoc, 1, xmlComment, 0], how 3
+PASS 38,31,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 0
+PASS 38,31,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 1
+PASS 38,31,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 2
+PASS 38,31,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 31 [detachedTextNode, 0, detachedTextNode, 8], how 3
+PASS 38,32,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 0
+PASS 38,32,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 1
+PASS 38,32,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 2
+PASS 38,32,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 32 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], how 3
+PASS 38,33,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 0
+PASS 38,33,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 1
+PASS 38,33,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 2
+PASS 38,33,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 33 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], how 3
+PASS 38,34,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 34 [detachedComment, 3, detachedComment, 4], how 0
+PASS 38,34,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 34 [detachedComment, 3, detachedComment, 4], how 1
+PASS 38,34,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 34 [detachedComment, 3, detachedComment, 4], how 2
+PASS 38,34,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 34 [detachedComment, 3, detachedComment, 4], how 3
+PASS 38,35,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 0
+PASS 38,35,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 1
+PASS 38,35,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 2
+PASS 38,35,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 35 [detachedForeignComment, 0, detachedForeignComment, 1], how 3
+PASS 38,36,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 0
+PASS 38,36,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 1
+PASS 38,36,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 2
+PASS 38,36,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 36 [detachedXmlComment, 2, detachedXmlComment, 6], how 3
+PASS 38,37,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 37 [docfrag, 0, docfrag, 0], how 0
+PASS 38,37,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 37 [docfrag, 0, docfrag, 0], how 1
+PASS 38,37,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 37 [docfrag, 0, docfrag, 0], how 2
+PASS 38,37,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 37 [docfrag, 0, docfrag, 0], how 3
+PASS 38,38,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 0
+PASS 38,38,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 1
+PASS 38,38,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 2
+PASS 38,38,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range 38 [processingInstruction, 0, processingInstruction, 4], how 3
+PASS 38,39,0: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range same as first range, how 0
+PASS 38,39,1: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range same as first range, how 1
+PASS 38,39,2: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range same as first range, how 2
+PASS 38,39,3: context range 38 [processingInstruction, 0, processingInstruction, 4], argument range same as first range, how 3
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangecompareBoundaryPointshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-compareBoundaryPoints.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-compareBoundaryPoints.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-compareBoundaryPoints.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,182 @@
</span><ins>+<!doctype html>
+<title>Range.compareBoundaryPoints() tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+var testRangesCached = [];
+testRangesCached.push(document.createRange());
+testRangesCached[0].detach();
+for (var i = 0; i < testRangesShort.length; i++) {
+ try {
+ testRangesCached.push(rangeFromEndpoints(eval(testRangesShort[i])));
+ } catch(e) {
+ testRangesCached.push(null);
+ }
+}
+
+var testRangesCachedClones = [];
+testRangesCachedClones.push(document.createRange());
+testRangesCachedClones[0].detach();
+for (var i = 1; i < testRangesCached.length; i++) {
+ if (testRangesCached[i]) {
+ testRangesCachedClones.push(testRangesCached[i].cloneRange());
+ } else {
+ testRangesCachedClones.push(null);
+ }
+}
+
+// We want to run a whole bunch of extra tests with invalid "how" values (not
+// 0-3), but it's excessive to run them for every single pair of ranges --
+// there are too many of them. So just run them for a handful of the tests.
+var extraTests = [0, // detached
+ 1 + testRanges.indexOf("[paras[0].firstChild, 2, paras[0].firstChild, 8]"),
+ 1 + testRanges.indexOf("[paras[0].firstChild, 3, paras[3], 1]"),
+ 1 + testRanges.indexOf("[testDiv, 0, comment, 5]"),
+ 1 + testRanges.indexOf("[foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]")];
+
+for (var i = 0; i < testRangesCached.length; i++) {
+ var range1 = testRangesCached[i];
+ var range1Desc = i + " " + (i == 0 ? "[detached]" : testRanges[i - 1]);
+ for (var j = 0; j <= testRangesCachedClones.length; j++) {
+ var range2;
+ var range2Desc;
+ if (j == testRangesCachedClones.length) {
+ range2 = range1;
+ range2Desc = "same as first range";
+ } else {
+ range2 = testRangesCachedClones[j];
+ range2Desc = j + " " + (j == 0 ? "[detached]" : testRanges[j - 1]);
+ }
+
+ var hows = [Range.START_TO_START, Range.START_TO_END, Range.END_TO_END,
+ Range.END_TO_START];
+ if (extraTests.indexOf(i) != -1 && extraTests.indexOf(j) != -1) {
+ // TODO: Make some type of reusable utility function to do this
+ // work.
+ hows.push(-1, 4, 5, NaN, -0, +Infinity, -Infinity);
+ [65536, -65536, 65536*65536, 0.5, -0.5, -72.5].forEach(function(addend) {
+ hows.push(-1 + addend, 0 + addend, 1 + addend,
+ 2 + addend, 3 + addend, 4 + addend);
+ });
+ hows.forEach(function(how) { hows.push(String(how)) });
+ hows.push("6.5536e4", null, undefined, true, false, "", "quasit");
+ }
+
+ for (var k = 0; k < hows.length; k++) {
+ var how = hows[k];
+ test(function() {
+ assert_not_equals(range1, null,
+ "Creating context range threw an exception");
+ assert_not_equals(range2, null,
+ "Creating argument range threw an exception");
+
+ // Convert how per WebIDL. TODO: Make some type of reusable
+ // utility function to do this work.
+ // "Let number be the result of calling ToNumber on the input
+ // argument."
+ var convertedHow = Number(how);
+
+ // "If number is NaN, +0, −0, +∞, or −∞, return +0."
+ if (isNaN(convertedHow)
+ || convertedHow == 0
+ || convertedHow == Infinity
+ || convertedHow == -Infinity) {
+ convertedHow = 0;
+ } else {
+ // "Let posInt be sign(number) * floor(abs(number))."
+ var posInt = (convertedHow < 0 ? -1 : 1) * Math.floor(Math.abs(convertedHow));
+
+ // "Let int16bit be posInt modulo 2^16; that is, a finite
+ // integer value k of Number type with positive sign and
+ // less than 2^16 in magnitude such that the mathematical
+ // difference of posInt and k is mathematically an integer
+ // multiple of 2^16."
+ //
+ // "Return int16bit."
+ convertedHow = posInt % 65536;
+ if (convertedHow < 0) {
+ convertedHow += 65536;
+ }
+ }
+
+ // Now to the actual algorithm.
+ // "If how is not one of
+ // START_TO_START,
+ // START_TO_END,
+ // END_TO_END, and
+ // END_TO_START,
+ // throw a "NotSupportedError" exception and terminate these
+ // steps."
+ if (convertedHow != Range.START_TO_START
+ && convertedHow != Range.START_TO_END
+ && convertedHow != Range.END_TO_END
+ && convertedHow != Range.END_TO_START) {
+ assert_throws("NOT_SUPPORTED_ERR", function() {
+ range1.compareBoundaryPoints(how, range2);
+ }, "NotSupportedError required if first parameter doesn't convert to 0-3 per WebIDL");
+ return;
+ }
+
+ // "If context object's root is not the same as sourceRange's
+ // root, throw a "WrongDocumentError" exception and terminate
+ // these steps."
+ if (furthestAncestor(range1.startContainer) != furthestAncestor(range2.startContainer)) {
+ assert_throws("WRONG_DOCUMENT_ERR", function() {
+ range1.compareBoundaryPoints(how, range2);
+ }, "WrongDocumentError required if the ranges don't share a root");
+ return;
+ }
+
+ // "If how is:
+ // START_TO_START:
+ // Let this point be the context object's start.
+ // Let other point be sourceRange's start.
+ // START_TO_END:
+ // Let this point be the context object's end.
+ // Let other point be sourceRange's start.
+ // END_TO_END:
+ // Let this point be the context object's end.
+ // Let other point be sourceRange's end.
+ // END_TO_START:
+ // Let this point be the context object's start.
+ // Let other point be sourceRange's end."
+ var thisPoint = convertedHow == Range.START_TO_START || convertedHow == Range.END_TO_START
+ ? [range1.startContainer, range1.startOffset]
+ : [range1.endContainer, range1.endOffset];
+ var otherPoint = convertedHow == Range.START_TO_START || convertedHow == Range.START_TO_END
+ ? [range2.startContainer, range2.startOffset]
+ : [range2.endContainer, range2.endOffset];
+
+ // "If the position of this point relative to other point is
+ // before
+ // Return −1.
+ // equal
+ // Return 0.
+ // after
+ // Return 1."
+ var position = getPosition(thisPoint[0], thisPoint[1], otherPoint[0], otherPoint[1]);
+ var expected;
+ if (position == "before") {
+ expected = -1;
+ } else if (position == "equal") {
+ expected = 0;
+ } else if (position == "after") {
+ expected = 1;
+ }
+
+ assert_equals(range1.compareBoundaryPoints(how, range2), expected,
+ "Wrong return value");
+ }, i + "," + j + "," + k + ": context range " + range1Desc + ", argument range " + range2Desc + ", how " + format_value(how));
+ }
+ }
+}
+
+testDiv.style.display = "none";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangecomparePoint2expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint-2-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint-2-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint-2-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+
+FAIL Range.comparePoint InvalidStateError: DOM Exception 11
+FAIL Range.comparePoint 1 assert_throws: function "function () { r.comparePoint(null, 0) }" threw object "Error: HierarchyRequestError: DOM Exception 3" ("HierarchyRequestError") expected object "TypeError" ("TypeError")
+PASS Range.comparePoint 2
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangecomparePoint2html"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint-2.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint-2.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint-2.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,23 @@
</span><ins>+<!DOCTYPE html>
+<title>Range.comparePoint</title>
+<link rel="author" title="Ms2ger" href="mailto:ms2ger@gmail.com">
+<meta name=timeout content=long>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<script>
+test(function() {
+ var r = document.createRange();
+ r.detach()
+ assert_equals(r.comparePoint(document.body, 0), 1)
+})
+test(function() {
+ var r = document.createRange();
+ assert_throws(new TypeError(), function() { r.comparePoint(null, 0) })
+})
+test(function() {
+ var doc = document.implementation.createHTMLDocument("tralala")
+ var r = document.createRange();
+ assert_throws("WRONG_DOCUMENT_ERR", function() { r.comparePoint(doc.body, 0) })
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangecomparePointexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,5462 @@
</span><ins>+
+PASS Point 0 [paras[0].firstChild, -1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 0 [paras[0].firstChild, -1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 0 [paras[0].firstChild, -1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 0 [paras[0].firstChild, -1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 0 [paras[0].firstChild, -1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 0 [paras[0].firstChild, -1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 0 [paras[0].firstChild, -1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 0 [paras[0].firstChild, -1], range 13 [document.head, 1, document.head, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 14 [document.body, 4, document.body, 5]
+PASS Point 0 [paras[0].firstChild, -1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 0 [paras[0].firstChild, -1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 0 [paras[0].firstChild, -1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 0 [paras[0].firstChild, -1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 0 [paras[0].firstChild, -1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 0 [paras[0].firstChild, -1], range 23 [document, 0, document, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 24 [document, 0, document, 2]
+PASS Point 0 [paras[0].firstChild, -1], range 25 [comment, 2, comment, 3]
+PASS Point 0 [paras[0].firstChild, -1], range 26 [testDiv, 0, comment, 5]
+PASS Point 0 [paras[0].firstChild, -1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 0 [paras[0].firstChild, -1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 0 [paras[0].firstChild, -1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 0 [paras[0].firstChild, -1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 0 [paras[0].firstChild, -1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 0 [paras[0].firstChild, -1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 0 [paras[0].firstChild, -1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 0 [paras[0].firstChild, -1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 0 [paras[0].firstChild, -1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 0 [paras[0].firstChild, -1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 0 [paras[0].firstChild, -1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 0 [paras[0].firstChild, -1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 49 [document, 1, document, 2]
+PASS Point 0 [paras[0].firstChild, -1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 0 [paras[0].firstChild, -1], range 51 [paras[3], 1, comment, 8]
+PASS Point 0 [paras[0].firstChild, -1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 0 [paras[0].firstChild, -1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 0 [paras[0].firstChild, -1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 0 [paras[0].firstChild, -1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 0 [paras[0].firstChild, -1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 1 [paras[0].firstChild, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 1 [paras[0].firstChild, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 1 [paras[0].firstChild, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 1 [paras[0].firstChild, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 1 [paras[0].firstChild, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 1 [paras[0].firstChild, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 1 [paras[0].firstChild, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 1 [paras[0].firstChild, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 1 [paras[0].firstChild, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 1 [paras[0].firstChild, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 1 [paras[0].firstChild, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 1 [paras[0].firstChild, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 1 [paras[0].firstChild, 0], range 23 [document, 0, document, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 24 [document, 0, document, 2]
+PASS Point 1 [paras[0].firstChild, 0], range 25 [comment, 2, comment, 3]
+PASS Point 1 [paras[0].firstChild, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 1 [paras[0].firstChild, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 1 [paras[0].firstChild, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 1 [paras[0].firstChild, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 1 [paras[0].firstChild, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 1 [paras[0].firstChild, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 1 [paras[0].firstChild, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 1 [paras[0].firstChild, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 1 [paras[0].firstChild, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 1 [paras[0].firstChild, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 1 [paras[0].firstChild, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 1 [paras[0].firstChild, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 1 [paras[0].firstChild, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 49 [document, 1, document, 2]
+PASS Point 1 [paras[0].firstChild, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 1 [paras[0].firstChild, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 1 [paras[0].firstChild, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 1 [paras[0].firstChild, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 1 [paras[0].firstChild, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 1 [paras[0].firstChild, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 1 [paras[0].firstChild, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 2 [paras[0].firstChild, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 2 [paras[0].firstChild, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 2 [paras[0].firstChild, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 2 [paras[0].firstChild, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 2 [paras[0].firstChild, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 2 [paras[0].firstChild, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 2 [paras[0].firstChild, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 2 [paras[0].firstChild, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 2 [paras[0].firstChild, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 2 [paras[0].firstChild, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 2 [paras[0].firstChild, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 2 [paras[0].firstChild, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 2 [paras[0].firstChild, 1], range 23 [document, 0, document, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 24 [document, 0, document, 2]
+PASS Point 2 [paras[0].firstChild, 1], range 25 [comment, 2, comment, 3]
+PASS Point 2 [paras[0].firstChild, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 2 [paras[0].firstChild, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 2 [paras[0].firstChild, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 2 [paras[0].firstChild, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 2 [paras[0].firstChild, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 2 [paras[0].firstChild, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 2 [paras[0].firstChild, 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 2 [paras[0].firstChild, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 2 [paras[0].firstChild, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 2 [paras[0].firstChild, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 2 [paras[0].firstChild, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 2 [paras[0].firstChild, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 2 [paras[0].firstChild, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 49 [document, 1, document, 2]
+PASS Point 2 [paras[0].firstChild, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 2 [paras[0].firstChild, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 2 [paras[0].firstChild, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 2 [paras[0].firstChild, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 2 [paras[0].firstChild, 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 2 [paras[0].firstChild, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 2 [paras[0].firstChild, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 3 [paras[0].firstChild, 2], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 3 [paras[0].firstChild, 2], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 3 [paras[0].firstChild, 2], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 3 [paras[0].firstChild, 2], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 3 [paras[0].firstChild, 2], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 3 [paras[0].firstChild, 2], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 3 [paras[0].firstChild, 2], range 13 [document.head, 1, document.head, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 14 [document.body, 4, document.body, 5]
+PASS Point 3 [paras[0].firstChild, 2], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 3 [paras[0].firstChild, 2], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 3 [paras[0].firstChild, 2], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 3 [paras[0].firstChild, 2], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 3 [paras[0].firstChild, 2], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 3 [paras[0].firstChild, 2], range 23 [document, 0, document, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 24 [document, 0, document, 2]
+PASS Point 3 [paras[0].firstChild, 2], range 25 [comment, 2, comment, 3]
+PASS Point 3 [paras[0].firstChild, 2], range 26 [testDiv, 0, comment, 5]
+PASS Point 3 [paras[0].firstChild, 2], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 3 [paras[0].firstChild, 2], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 3 [paras[0].firstChild, 2], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 3 [paras[0].firstChild, 2], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 3 [paras[0].firstChild, 2], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 3 [paras[0].firstChild, 2], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 3 [paras[0].firstChild, 2], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 3 [paras[0].firstChild, 2], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 3 [paras[0].firstChild, 2], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 3 [paras[0].firstChild, 2], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 3 [paras[0].firstChild, 2], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 3 [paras[0].firstChild, 2], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 49 [document, 1, document, 2]
+PASS Point 3 [paras[0].firstChild, 2], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 3 [paras[0].firstChild, 2], range 51 [paras[3], 1, comment, 8]
+PASS Point 3 [paras[0].firstChild, 2], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 3 [paras[0].firstChild, 2], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 3 [paras[0].firstChild, 2], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 3 [paras[0].firstChild, 2], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 3 [paras[0].firstChild, 2], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 4 [paras[0].firstChild, 8], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 4 [paras[0].firstChild, 8], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 4 [paras[0].firstChild, 8], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 4 [paras[0].firstChild, 8], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 4 [paras[0].firstChild, 8], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 4 [paras[0].firstChild, 8], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 4 [paras[0].firstChild, 8], range 13 [document.head, 1, document.head, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 14 [document.body, 4, document.body, 5]
+PASS Point 4 [paras[0].firstChild, 8], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 4 [paras[0].firstChild, 8], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 4 [paras[0].firstChild, 8], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 4 [paras[0].firstChild, 8], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 4 [paras[0].firstChild, 8], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 4 [paras[0].firstChild, 8], range 23 [document, 0, document, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 24 [document, 0, document, 2]
+PASS Point 4 [paras[0].firstChild, 8], range 25 [comment, 2, comment, 3]
+PASS Point 4 [paras[0].firstChild, 8], range 26 [testDiv, 0, comment, 5]
+PASS Point 4 [paras[0].firstChild, 8], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 4 [paras[0].firstChild, 8], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 4 [paras[0].firstChild, 8], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 4 [paras[0].firstChild, 8], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 4 [paras[0].firstChild, 8], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 4 [paras[0].firstChild, 8], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 4 [paras[0].firstChild, 8], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 4 [paras[0].firstChild, 8], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 4 [paras[0].firstChild, 8], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 4 [paras[0].firstChild, 8], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 4 [paras[0].firstChild, 8], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 4 [paras[0].firstChild, 8], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 49 [document, 1, document, 2]
+PASS Point 4 [paras[0].firstChild, 8], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 4 [paras[0].firstChild, 8], range 51 [paras[3], 1, comment, 8]
+PASS Point 4 [paras[0].firstChild, 8], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 4 [paras[0].firstChild, 8], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 4 [paras[0].firstChild, 8], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 4 [paras[0].firstChild, 8], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 4 [paras[0].firstChild, 8], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 5 [paras[0].firstChild, 9], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 5 [paras[0].firstChild, 9], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 5 [paras[0].firstChild, 9], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 5 [paras[0].firstChild, 9], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 5 [paras[0].firstChild, 9], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 5 [paras[0].firstChild, 9], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 5 [paras[0].firstChild, 9], range 13 [document.head, 1, document.head, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 14 [document.body, 4, document.body, 5]
+PASS Point 5 [paras[0].firstChild, 9], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 5 [paras[0].firstChild, 9], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 5 [paras[0].firstChild, 9], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 5 [paras[0].firstChild, 9], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 5 [paras[0].firstChild, 9], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 5 [paras[0].firstChild, 9], range 23 [document, 0, document, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 24 [document, 0, document, 2]
+PASS Point 5 [paras[0].firstChild, 9], range 25 [comment, 2, comment, 3]
+PASS Point 5 [paras[0].firstChild, 9], range 26 [testDiv, 0, comment, 5]
+PASS Point 5 [paras[0].firstChild, 9], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 5 [paras[0].firstChild, 9], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 5 [paras[0].firstChild, 9], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 5 [paras[0].firstChild, 9], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 5 [paras[0].firstChild, 9], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 5 [paras[0].firstChild, 9], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 5 [paras[0].firstChild, 9], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 5 [paras[0].firstChild, 9], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 5 [paras[0].firstChild, 9], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 5 [paras[0].firstChild, 9], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 5 [paras[0].firstChild, 9], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 5 [paras[0].firstChild, 9], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 49 [document, 1, document, 2]
+PASS Point 5 [paras[0].firstChild, 9], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 5 [paras[0].firstChild, 9], range 51 [paras[3], 1, comment, 8]
+PASS Point 5 [paras[0].firstChild, 9], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 5 [paras[0].firstChild, 9], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 5 [paras[0].firstChild, 9], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 5 [paras[0].firstChild, 9], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 5 [paras[0].firstChild, 9], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 6 [paras[0].firstChild, 10], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 6 [paras[0].firstChild, 10], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 6 [paras[0].firstChild, 10], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 6 [paras[0].firstChild, 10], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 6 [paras[0].firstChild, 10], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 6 [paras[0].firstChild, 10], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 6 [paras[0].firstChild, 10], range 13 [document.head, 1, document.head, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 14 [document.body, 4, document.body, 5]
+PASS Point 6 [paras[0].firstChild, 10], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 6 [paras[0].firstChild, 10], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 6 [paras[0].firstChild, 10], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 6 [paras[0].firstChild, 10], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 6 [paras[0].firstChild, 10], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 6 [paras[0].firstChild, 10], range 23 [document, 0, document, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 24 [document, 0, document, 2]
+PASS Point 6 [paras[0].firstChild, 10], range 25 [comment, 2, comment, 3]
+PASS Point 6 [paras[0].firstChild, 10], range 26 [testDiv, 0, comment, 5]
+PASS Point 6 [paras[0].firstChild, 10], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 6 [paras[0].firstChild, 10], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 6 [paras[0].firstChild, 10], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 6 [paras[0].firstChild, 10], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 6 [paras[0].firstChild, 10], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 6 [paras[0].firstChild, 10], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 6 [paras[0].firstChild, 10], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 6 [paras[0].firstChild, 10], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 6 [paras[0].firstChild, 10], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 6 [paras[0].firstChild, 10], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 6 [paras[0].firstChild, 10], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 6 [paras[0].firstChild, 10], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 49 [document, 1, document, 2]
+PASS Point 6 [paras[0].firstChild, 10], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 6 [paras[0].firstChild, 10], range 51 [paras[3], 1, comment, 8]
+PASS Point 6 [paras[0].firstChild, 10], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 6 [paras[0].firstChild, 10], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 6 [paras[0].firstChild, 10], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 6 [paras[0].firstChild, 10], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 6 [paras[0].firstChild, 10], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 7 [paras[0].firstChild, 65535], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 7 [paras[0].firstChild, 65535], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 7 [paras[0].firstChild, 65535], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 7 [paras[0].firstChild, 65535], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 7 [paras[0].firstChild, 65535], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 7 [paras[0].firstChild, 65535], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 7 [paras[0].firstChild, 65535], range 13 [document.head, 1, document.head, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 14 [document.body, 4, document.body, 5]
+PASS Point 7 [paras[0].firstChild, 65535], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 7 [paras[0].firstChild, 65535], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 7 [paras[0].firstChild, 65535], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 23 [document, 0, document, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 24 [document, 0, document, 2]
+PASS Point 7 [paras[0].firstChild, 65535], range 25 [comment, 2, comment, 3]
+PASS Point 7 [paras[0].firstChild, 65535], range 26 [testDiv, 0, comment, 5]
+PASS Point 7 [paras[0].firstChild, 65535], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 7 [paras[0].firstChild, 65535], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 7 [paras[0].firstChild, 65535], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 7 [paras[0].firstChild, 65535], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 7 [paras[0].firstChild, 65535], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 7 [paras[0].firstChild, 65535], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 7 [paras[0].firstChild, 65535], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 7 [paras[0].firstChild, 65535], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 7 [paras[0].firstChild, 65535], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 7 [paras[0].firstChild, 65535], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 7 [paras[0].firstChild, 65535], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 49 [document, 1, document, 2]
+PASS Point 7 [paras[0].firstChild, 65535], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 7 [paras[0].firstChild, 65535], range 51 [paras[3], 1, comment, 8]
+PASS Point 7 [paras[0].firstChild, 65535], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 7 [paras[0].firstChild, 65535], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 7 [paras[0].firstChild, 65535], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 7 [paras[0].firstChild, 65535], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 7 [paras[0].firstChild, 65535], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 8 [paras[1].firstChild, -1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 8 [paras[1].firstChild, -1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 8 [paras[1].firstChild, -1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 8 [paras[1].firstChild, -1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 8 [paras[1].firstChild, -1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 8 [paras[1].firstChild, -1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 8 [paras[1].firstChild, -1], range 13 [document.head, 1, document.head, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 14 [document.body, 4, document.body, 5]
+PASS Point 8 [paras[1].firstChild, -1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 8 [paras[1].firstChild, -1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 8 [paras[1].firstChild, -1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 8 [paras[1].firstChild, -1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 8 [paras[1].firstChild, -1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 8 [paras[1].firstChild, -1], range 23 [document, 0, document, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 24 [document, 0, document, 2]
+PASS Point 8 [paras[1].firstChild, -1], range 25 [comment, 2, comment, 3]
+PASS Point 8 [paras[1].firstChild, -1], range 26 [testDiv, 0, comment, 5]
+PASS Point 8 [paras[1].firstChild, -1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 8 [paras[1].firstChild, -1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 8 [paras[1].firstChild, -1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 8 [paras[1].firstChild, -1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 8 [paras[1].firstChild, -1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 8 [paras[1].firstChild, -1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 8 [paras[1].firstChild, -1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 8 [paras[1].firstChild, -1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 8 [paras[1].firstChild, -1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 8 [paras[1].firstChild, -1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 8 [paras[1].firstChild, -1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 8 [paras[1].firstChild, -1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 49 [document, 1, document, 2]
+PASS Point 8 [paras[1].firstChild, -1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 8 [paras[1].firstChild, -1], range 51 [paras[3], 1, comment, 8]
+PASS Point 8 [paras[1].firstChild, -1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 8 [paras[1].firstChild, -1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 8 [paras[1].firstChild, -1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 8 [paras[1].firstChild, -1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 8 [paras[1].firstChild, -1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 9 [paras[1].firstChild, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 9 [paras[1].firstChild, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 9 [paras[1].firstChild, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 9 [paras[1].firstChild, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 9 [paras[1].firstChild, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 9 [paras[1].firstChild, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 9 [paras[1].firstChild, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 9 [paras[1].firstChild, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 9 [paras[1].firstChild, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 9 [paras[1].firstChild, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 9 [paras[1].firstChild, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 9 [paras[1].firstChild, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 9 [paras[1].firstChild, 0], range 23 [document, 0, document, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 24 [document, 0, document, 2]
+PASS Point 9 [paras[1].firstChild, 0], range 25 [comment, 2, comment, 3]
+PASS Point 9 [paras[1].firstChild, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 9 [paras[1].firstChild, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 9 [paras[1].firstChild, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 9 [paras[1].firstChild, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 9 [paras[1].firstChild, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 9 [paras[1].firstChild, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 9 [paras[1].firstChild, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 9 [paras[1].firstChild, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 9 [paras[1].firstChild, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 9 [paras[1].firstChild, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 9 [paras[1].firstChild, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 9 [paras[1].firstChild, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 9 [paras[1].firstChild, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 49 [document, 1, document, 2]
+PASS Point 9 [paras[1].firstChild, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 9 [paras[1].firstChild, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 9 [paras[1].firstChild, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 9 [paras[1].firstChild, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 9 [paras[1].firstChild, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 9 [paras[1].firstChild, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 9 [paras[1].firstChild, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 10 [paras[1].firstChild, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 10 [paras[1].firstChild, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 10 [paras[1].firstChild, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 10 [paras[1].firstChild, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 10 [paras[1].firstChild, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 10 [paras[1].firstChild, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 10 [paras[1].firstChild, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 10 [paras[1].firstChild, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 10 [paras[1].firstChild, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 10 [paras[1].firstChild, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 10 [paras[1].firstChild, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 10 [paras[1].firstChild, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 10 [paras[1].firstChild, 1], range 23 [document, 0, document, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 24 [document, 0, document, 2]
+PASS Point 10 [paras[1].firstChild, 1], range 25 [comment, 2, comment, 3]
+PASS Point 10 [paras[1].firstChild, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 10 [paras[1].firstChild, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 10 [paras[1].firstChild, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 10 [paras[1].firstChild, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 10 [paras[1].firstChild, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 10 [paras[1].firstChild, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 10 [paras[1].firstChild, 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 10 [paras[1].firstChild, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 10 [paras[1].firstChild, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 10 [paras[1].firstChild, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 10 [paras[1].firstChild, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 10 [paras[1].firstChild, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 10 [paras[1].firstChild, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 49 [document, 1, document, 2]
+PASS Point 10 [paras[1].firstChild, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 10 [paras[1].firstChild, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 10 [paras[1].firstChild, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 10 [paras[1].firstChild, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 10 [paras[1].firstChild, 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 10 [paras[1].firstChild, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 10 [paras[1].firstChild, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 11 [paras[1].firstChild, 2], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 11 [paras[1].firstChild, 2], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 11 [paras[1].firstChild, 2], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 11 [paras[1].firstChild, 2], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 11 [paras[1].firstChild, 2], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 11 [paras[1].firstChild, 2], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 11 [paras[1].firstChild, 2], range 13 [document.head, 1, document.head, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 14 [document.body, 4, document.body, 5]
+PASS Point 11 [paras[1].firstChild, 2], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 11 [paras[1].firstChild, 2], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 11 [paras[1].firstChild, 2], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 11 [paras[1].firstChild, 2], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 11 [paras[1].firstChild, 2], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 11 [paras[1].firstChild, 2], range 23 [document, 0, document, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 24 [document, 0, document, 2]
+PASS Point 11 [paras[1].firstChild, 2], range 25 [comment, 2, comment, 3]
+PASS Point 11 [paras[1].firstChild, 2], range 26 [testDiv, 0, comment, 5]
+PASS Point 11 [paras[1].firstChild, 2], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 11 [paras[1].firstChild, 2], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 11 [paras[1].firstChild, 2], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 11 [paras[1].firstChild, 2], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 11 [paras[1].firstChild, 2], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 11 [paras[1].firstChild, 2], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 11 [paras[1].firstChild, 2], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 11 [paras[1].firstChild, 2], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 11 [paras[1].firstChild, 2], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 11 [paras[1].firstChild, 2], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 11 [paras[1].firstChild, 2], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 11 [paras[1].firstChild, 2], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 49 [document, 1, document, 2]
+PASS Point 11 [paras[1].firstChild, 2], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 11 [paras[1].firstChild, 2], range 51 [paras[3], 1, comment, 8]
+PASS Point 11 [paras[1].firstChild, 2], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 11 [paras[1].firstChild, 2], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 11 [paras[1].firstChild, 2], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 11 [paras[1].firstChild, 2], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 11 [paras[1].firstChild, 2], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 12 [paras[1].firstChild, 8], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 12 [paras[1].firstChild, 8], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 12 [paras[1].firstChild, 8], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 12 [paras[1].firstChild, 8], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 12 [paras[1].firstChild, 8], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 12 [paras[1].firstChild, 8], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 12 [paras[1].firstChild, 8], range 13 [document.head, 1, document.head, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 14 [document.body, 4, document.body, 5]
+PASS Point 12 [paras[1].firstChild, 8], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 12 [paras[1].firstChild, 8], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 12 [paras[1].firstChild, 8], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 12 [paras[1].firstChild, 8], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 12 [paras[1].firstChild, 8], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 12 [paras[1].firstChild, 8], range 23 [document, 0, document, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 24 [document, 0, document, 2]
+PASS Point 12 [paras[1].firstChild, 8], range 25 [comment, 2, comment, 3]
+PASS Point 12 [paras[1].firstChild, 8], range 26 [testDiv, 0, comment, 5]
+PASS Point 12 [paras[1].firstChild, 8], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 12 [paras[1].firstChild, 8], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 12 [paras[1].firstChild, 8], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 12 [paras[1].firstChild, 8], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 12 [paras[1].firstChild, 8], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 12 [paras[1].firstChild, 8], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 12 [paras[1].firstChild, 8], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 12 [paras[1].firstChild, 8], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 12 [paras[1].firstChild, 8], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 12 [paras[1].firstChild, 8], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 12 [paras[1].firstChild, 8], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 12 [paras[1].firstChild, 8], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 49 [document, 1, document, 2]
+PASS Point 12 [paras[1].firstChild, 8], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 12 [paras[1].firstChild, 8], range 51 [paras[3], 1, comment, 8]
+PASS Point 12 [paras[1].firstChild, 8], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 12 [paras[1].firstChild, 8], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 12 [paras[1].firstChild, 8], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 12 [paras[1].firstChild, 8], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 12 [paras[1].firstChild, 8], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 13 [paras[1].firstChild, 9], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 13 [paras[1].firstChild, 9], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 13 [paras[1].firstChild, 9], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 13 [paras[1].firstChild, 9], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 13 [paras[1].firstChild, 9], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 13 [paras[1].firstChild, 9], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 13 [paras[1].firstChild, 9], range 13 [document.head, 1, document.head, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 14 [document.body, 4, document.body, 5]
+PASS Point 13 [paras[1].firstChild, 9], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 13 [paras[1].firstChild, 9], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 13 [paras[1].firstChild, 9], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 13 [paras[1].firstChild, 9], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 13 [paras[1].firstChild, 9], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 13 [paras[1].firstChild, 9], range 23 [document, 0, document, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 24 [document, 0, document, 2]
+PASS Point 13 [paras[1].firstChild, 9], range 25 [comment, 2, comment, 3]
+PASS Point 13 [paras[1].firstChild, 9], range 26 [testDiv, 0, comment, 5]
+PASS Point 13 [paras[1].firstChild, 9], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 13 [paras[1].firstChild, 9], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 13 [paras[1].firstChild, 9], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 13 [paras[1].firstChild, 9], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 13 [paras[1].firstChild, 9], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 13 [paras[1].firstChild, 9], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 13 [paras[1].firstChild, 9], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 13 [paras[1].firstChild, 9], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 13 [paras[1].firstChild, 9], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 13 [paras[1].firstChild, 9], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 13 [paras[1].firstChild, 9], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 13 [paras[1].firstChild, 9], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 49 [document, 1, document, 2]
+PASS Point 13 [paras[1].firstChild, 9], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 13 [paras[1].firstChild, 9], range 51 [paras[3], 1, comment, 8]
+PASS Point 13 [paras[1].firstChild, 9], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 13 [paras[1].firstChild, 9], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 13 [paras[1].firstChild, 9], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 13 [paras[1].firstChild, 9], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 13 [paras[1].firstChild, 9], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 14 [paras[1].firstChild, 10], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 14 [paras[1].firstChild, 10], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 14 [paras[1].firstChild, 10], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 14 [paras[1].firstChild, 10], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 14 [paras[1].firstChild, 10], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 14 [paras[1].firstChild, 10], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 14 [paras[1].firstChild, 10], range 13 [document.head, 1, document.head, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 14 [document.body, 4, document.body, 5]
+PASS Point 14 [paras[1].firstChild, 10], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 14 [paras[1].firstChild, 10], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 14 [paras[1].firstChild, 10], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 14 [paras[1].firstChild, 10], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 14 [paras[1].firstChild, 10], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 14 [paras[1].firstChild, 10], range 23 [document, 0, document, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 24 [document, 0, document, 2]
+PASS Point 14 [paras[1].firstChild, 10], range 25 [comment, 2, comment, 3]
+PASS Point 14 [paras[1].firstChild, 10], range 26 [testDiv, 0, comment, 5]
+PASS Point 14 [paras[1].firstChild, 10], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 14 [paras[1].firstChild, 10], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 14 [paras[1].firstChild, 10], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 14 [paras[1].firstChild, 10], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 14 [paras[1].firstChild, 10], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 14 [paras[1].firstChild, 10], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 14 [paras[1].firstChild, 10], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 14 [paras[1].firstChild, 10], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 14 [paras[1].firstChild, 10], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 14 [paras[1].firstChild, 10], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 14 [paras[1].firstChild, 10], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 14 [paras[1].firstChild, 10], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 49 [document, 1, document, 2]
+PASS Point 14 [paras[1].firstChild, 10], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 14 [paras[1].firstChild, 10], range 51 [paras[3], 1, comment, 8]
+PASS Point 14 [paras[1].firstChild, 10], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 14 [paras[1].firstChild, 10], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 14 [paras[1].firstChild, 10], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 14 [paras[1].firstChild, 10], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 14 [paras[1].firstChild, 10], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 15 [paras[1].firstChild, 65535], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 15 [paras[1].firstChild, 65535], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 15 [paras[1].firstChild, 65535], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 15 [paras[1].firstChild, 65535], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 15 [paras[1].firstChild, 65535], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 15 [paras[1].firstChild, 65535], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 15 [paras[1].firstChild, 65535], range 13 [document.head, 1, document.head, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 14 [document.body, 4, document.body, 5]
+PASS Point 15 [paras[1].firstChild, 65535], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 15 [paras[1].firstChild, 65535], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 15 [paras[1].firstChild, 65535], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 23 [document, 0, document, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 24 [document, 0, document, 2]
+PASS Point 15 [paras[1].firstChild, 65535], range 25 [comment, 2, comment, 3]
+PASS Point 15 [paras[1].firstChild, 65535], range 26 [testDiv, 0, comment, 5]
+PASS Point 15 [paras[1].firstChild, 65535], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 15 [paras[1].firstChild, 65535], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 15 [paras[1].firstChild, 65535], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 15 [paras[1].firstChild, 65535], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 15 [paras[1].firstChild, 65535], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 15 [paras[1].firstChild, 65535], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 15 [paras[1].firstChild, 65535], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 15 [paras[1].firstChild, 65535], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 15 [paras[1].firstChild, 65535], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 15 [paras[1].firstChild, 65535], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 15 [paras[1].firstChild, 65535], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 49 [document, 1, document, 2]
+PASS Point 15 [paras[1].firstChild, 65535], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 15 [paras[1].firstChild, 65535], range 51 [paras[3], 1, comment, 8]
+PASS Point 15 [paras[1].firstChild, 65535], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 15 [paras[1].firstChild, 65535], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 15 [paras[1].firstChild, 65535], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 15 [paras[1].firstChild, 65535], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 15 [paras[1].firstChild, 65535], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 16 [detachedPara1.firstChild, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 16 [detachedPara1.firstChild, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 16 [detachedPara1.firstChild, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 16 [detachedPara1.firstChild, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 16 [detachedPara1.firstChild, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 16 [detachedPara1.firstChild, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 23 [document, 0, document, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 24 [document, 0, document, 2]
+PASS Point 16 [detachedPara1.firstChild, 0], range 25 [comment, 2, comment, 3]
+PASS Point 16 [detachedPara1.firstChild, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 16 [detachedPara1.firstChild, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 16 [detachedPara1.firstChild, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 16 [detachedPara1.firstChild, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 16 [detachedPara1.firstChild, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 16 [detachedPara1.firstChild, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 16 [detachedPara1.firstChild, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 16 [detachedPara1.firstChild, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 49 [document, 1, document, 2]
+PASS Point 16 [detachedPara1.firstChild, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 16 [detachedPara1.firstChild, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 16 [detachedPara1.firstChild, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 16 [detachedPara1.firstChild, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 16 [detachedPara1.firstChild, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 16 [detachedPara1.firstChild, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 17 [detachedPara1.firstChild, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 17 [detachedPara1.firstChild, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 17 [detachedPara1.firstChild, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 17 [detachedPara1.firstChild, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 17 [detachedPara1.firstChild, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 17 [detachedPara1.firstChild, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 23 [document, 0, document, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 24 [document, 0, document, 2]
+PASS Point 17 [detachedPara1.firstChild, 1], range 25 [comment, 2, comment, 3]
+PASS Point 17 [detachedPara1.firstChild, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 17 [detachedPara1.firstChild, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 17 [detachedPara1.firstChild, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 17 [detachedPara1.firstChild, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 17 [detachedPara1.firstChild, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 17 [detachedPara1.firstChild, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 17 [detachedPara1.firstChild, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 17 [detachedPara1.firstChild, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 49 [document, 1, document, 2]
+PASS Point 17 [detachedPara1.firstChild, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 17 [detachedPara1.firstChild, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 17 [detachedPara1.firstChild, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 17 [detachedPara1.firstChild, 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 17 [detachedPara1.firstChild, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 17 [detachedPara1.firstChild, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 18 [detachedPara1.firstChild, 8], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 18 [detachedPara1.firstChild, 8], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 18 [detachedPara1.firstChild, 8], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 18 [detachedPara1.firstChild, 8], range 13 [document.head, 1, document.head, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 14 [document.body, 4, document.body, 5]
+PASS Point 18 [detachedPara1.firstChild, 8], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 18 [detachedPara1.firstChild, 8], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 23 [document, 0, document, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 24 [document, 0, document, 2]
+PASS Point 18 [detachedPara1.firstChild, 8], range 25 [comment, 2, comment, 3]
+PASS Point 18 [detachedPara1.firstChild, 8], range 26 [testDiv, 0, comment, 5]
+PASS Point 18 [detachedPara1.firstChild, 8], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 18 [detachedPara1.firstChild, 8], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 18 [detachedPara1.firstChild, 8], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 18 [detachedPara1.firstChild, 8], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 18 [detachedPara1.firstChild, 8], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 18 [detachedPara1.firstChild, 8], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 18 [detachedPara1.firstChild, 8], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 49 [document, 1, document, 2]
+PASS Point 18 [detachedPara1.firstChild, 8], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 18 [detachedPara1.firstChild, 8], range 51 [paras[3], 1, comment, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 18 [detachedPara1.firstChild, 8], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 18 [detachedPara1.firstChild, 8], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 18 [detachedPara1.firstChild, 8], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 18 [detachedPara1.firstChild, 8], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 19 [detachedPara1.firstChild, 9], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 19 [detachedPara1.firstChild, 9], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 19 [detachedPara1.firstChild, 9], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 19 [detachedPara1.firstChild, 9], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 19 [detachedPara1.firstChild, 9], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 19 [detachedPara1.firstChild, 9], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 19 [detachedPara1.firstChild, 9], range 13 [document.head, 1, document.head, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 14 [document.body, 4, document.body, 5]
+PASS Point 19 [detachedPara1.firstChild, 9], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 19 [detachedPara1.firstChild, 9], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 19 [detachedPara1.firstChild, 9], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 23 [document, 0, document, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 24 [document, 0, document, 2]
+PASS Point 19 [detachedPara1.firstChild, 9], range 25 [comment, 2, comment, 3]
+PASS Point 19 [detachedPara1.firstChild, 9], range 26 [testDiv, 0, comment, 5]
+PASS Point 19 [detachedPara1.firstChild, 9], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 19 [detachedPara1.firstChild, 9], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 19 [detachedPara1.firstChild, 9], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 19 [detachedPara1.firstChild, 9], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 19 [detachedPara1.firstChild, 9], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 19 [detachedPara1.firstChild, 9], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 19 [detachedPara1.firstChild, 9], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 19 [detachedPara1.firstChild, 9], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 19 [detachedPara1.firstChild, 9], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 19 [detachedPara1.firstChild, 9], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 19 [detachedPara1.firstChild, 9], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 49 [document, 1, document, 2]
+PASS Point 19 [detachedPara1.firstChild, 9], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 19 [detachedPara1.firstChild, 9], range 51 [paras[3], 1, comment, 8]
+PASS Point 19 [detachedPara1.firstChild, 9], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 19 [detachedPara1.firstChild, 9], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 19 [detachedPara1.firstChild, 9], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 19 [detachedPara1.firstChild, 9], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 19 [detachedPara1.firstChild, 9], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 20 [foreignPara1.firstChild, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 20 [foreignPara1.firstChild, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 20 [foreignPara1.firstChild, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 20 [foreignPara1.firstChild, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 20 [foreignPara1.firstChild, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 20 [foreignPara1.firstChild, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 20 [foreignPara1.firstChild, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 20 [foreignPara1.firstChild, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 20 [foreignPara1.firstChild, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 20 [foreignPara1.firstChild, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 23 [document, 0, document, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 24 [document, 0, document, 2]
+PASS Point 20 [foreignPara1.firstChild, 0], range 25 [comment, 2, comment, 3]
+PASS Point 20 [foreignPara1.firstChild, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 20 [foreignPara1.firstChild, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 20 [foreignPara1.firstChild, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 20 [foreignPara1.firstChild, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 20 [foreignPara1.firstChild, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 20 [foreignPara1.firstChild, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 20 [foreignPara1.firstChild, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 20 [foreignPara1.firstChild, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 20 [foreignPara1.firstChild, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 20 [foreignPara1.firstChild, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 20 [foreignPara1.firstChild, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 20 [foreignPara1.firstChild, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 49 [document, 1, document, 2]
+PASS Point 20 [foreignPara1.firstChild, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 20 [foreignPara1.firstChild, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 20 [foreignPara1.firstChild, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 20 [foreignPara1.firstChild, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 20 [foreignPara1.firstChild, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 20 [foreignPara1.firstChild, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 20 [foreignPara1.firstChild, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 21 [foreignPara1.firstChild, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 21 [foreignPara1.firstChild, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 21 [foreignPara1.firstChild, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 21 [foreignPara1.firstChild, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 21 [foreignPara1.firstChild, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 21 [foreignPara1.firstChild, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 21 [foreignPara1.firstChild, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 21 [foreignPara1.firstChild, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 21 [foreignPara1.firstChild, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 21 [foreignPara1.firstChild, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 23 [document, 0, document, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 24 [document, 0, document, 2]
+PASS Point 21 [foreignPara1.firstChild, 1], range 25 [comment, 2, comment, 3]
+PASS Point 21 [foreignPara1.firstChild, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 21 [foreignPara1.firstChild, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 21 [foreignPara1.firstChild, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 21 [foreignPara1.firstChild, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 21 [foreignPara1.firstChild, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 21 [foreignPara1.firstChild, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 21 [foreignPara1.firstChild, 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 21 [foreignPara1.firstChild, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 21 [foreignPara1.firstChild, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 21 [foreignPara1.firstChild, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 21 [foreignPara1.firstChild, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 21 [foreignPara1.firstChild, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 49 [document, 1, document, 2]
+PASS Point 21 [foreignPara1.firstChild, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 21 [foreignPara1.firstChild, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 21 [foreignPara1.firstChild, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 21 [foreignPara1.firstChild, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 21 [foreignPara1.firstChild, 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 21 [foreignPara1.firstChild, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 21 [foreignPara1.firstChild, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 22 [foreignPara1.firstChild, 8], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 22 [foreignPara1.firstChild, 8], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 22 [foreignPara1.firstChild, 8], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 22 [foreignPara1.firstChild, 8], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 22 [foreignPara1.firstChild, 8], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 22 [foreignPara1.firstChild, 8], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 22 [foreignPara1.firstChild, 8], range 13 [document.head, 1, document.head, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 14 [document.body, 4, document.body, 5]
+PASS Point 22 [foreignPara1.firstChild, 8], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 22 [foreignPara1.firstChild, 8], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 22 [foreignPara1.firstChild, 8], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 23 [document, 0, document, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 24 [document, 0, document, 2]
+PASS Point 22 [foreignPara1.firstChild, 8], range 25 [comment, 2, comment, 3]
+PASS Point 22 [foreignPara1.firstChild, 8], range 26 [testDiv, 0, comment, 5]
+PASS Point 22 [foreignPara1.firstChild, 8], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 22 [foreignPara1.firstChild, 8], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 22 [foreignPara1.firstChild, 8], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 22 [foreignPara1.firstChild, 8], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 22 [foreignPara1.firstChild, 8], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 22 [foreignPara1.firstChild, 8], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 22 [foreignPara1.firstChild, 8], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 22 [foreignPara1.firstChild, 8], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 22 [foreignPara1.firstChild, 8], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 22 [foreignPara1.firstChild, 8], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 22 [foreignPara1.firstChild, 8], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 49 [document, 1, document, 2]
+PASS Point 22 [foreignPara1.firstChild, 8], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 22 [foreignPara1.firstChild, 8], range 51 [paras[3], 1, comment, 8]
+PASS Point 22 [foreignPara1.firstChild, 8], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 22 [foreignPara1.firstChild, 8], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 22 [foreignPara1.firstChild, 8], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 22 [foreignPara1.firstChild, 8], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 22 [foreignPara1.firstChild, 8], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 23 [foreignPara1.firstChild, 9], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 23 [foreignPara1.firstChild, 9], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 23 [foreignPara1.firstChild, 9], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 23 [foreignPara1.firstChild, 9], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 23 [foreignPara1.firstChild, 9], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 23 [foreignPara1.firstChild, 9], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 23 [foreignPara1.firstChild, 9], range 13 [document.head, 1, document.head, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 14 [document.body, 4, document.body, 5]
+PASS Point 23 [foreignPara1.firstChild, 9], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 23 [foreignPara1.firstChild, 9], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 23 [foreignPara1.firstChild, 9], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 23 [document, 0, document, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 24 [document, 0, document, 2]
+PASS Point 23 [foreignPara1.firstChild, 9], range 25 [comment, 2, comment, 3]
+PASS Point 23 [foreignPara1.firstChild, 9], range 26 [testDiv, 0, comment, 5]
+PASS Point 23 [foreignPara1.firstChild, 9], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 23 [foreignPara1.firstChild, 9], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 23 [foreignPara1.firstChild, 9], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 23 [foreignPara1.firstChild, 9], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 23 [foreignPara1.firstChild, 9], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 23 [foreignPara1.firstChild, 9], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 23 [foreignPara1.firstChild, 9], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 23 [foreignPara1.firstChild, 9], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 23 [foreignPara1.firstChild, 9], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 23 [foreignPara1.firstChild, 9], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 23 [foreignPara1.firstChild, 9], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 49 [document, 1, document, 2]
+PASS Point 23 [foreignPara1.firstChild, 9], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 23 [foreignPara1.firstChild, 9], range 51 [paras[3], 1, comment, 8]
+PASS Point 23 [foreignPara1.firstChild, 9], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 23 [foreignPara1.firstChild, 9], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 23 [foreignPara1.firstChild, 9], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 23 [foreignPara1.firstChild, 9], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 23 [foreignPara1.firstChild, 9], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 24 [document.documentElement, -1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 24 [document.documentElement, -1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 24 [document.documentElement, -1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 24 [document.documentElement, -1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 24 [document.documentElement, -1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 24 [document.documentElement, -1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 24 [document.documentElement, -1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 24 [document.documentElement, -1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 24 [document.documentElement, -1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 24 [document.documentElement, -1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 24 [document.documentElement, -1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 24 [document.documentElement, -1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 24 [document.documentElement, -1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 24 [document.documentElement, -1], range 13 [document.head, 1, document.head, 1]
+PASS Point 24 [document.documentElement, -1], range 14 [document.body, 4, document.body, 5]
+PASS Point 24 [document.documentElement, -1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 24 [document.documentElement, -1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 24 [document.documentElement, -1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 24 [document.documentElement, -1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 24 [document.documentElement, -1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 24 [document.documentElement, -1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 24 [document.documentElement, -1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 24 [document.documentElement, -1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 24 [document.documentElement, -1], range 23 [document, 0, document, 1]
+PASS Point 24 [document.documentElement, -1], range 24 [document, 0, document, 2]
+PASS Point 24 [document.documentElement, -1], range 25 [comment, 2, comment, 3]
+PASS Point 24 [document.documentElement, -1], range 26 [testDiv, 0, comment, 5]
+PASS Point 24 [document.documentElement, -1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 24 [document.documentElement, -1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 24 [document.documentElement, -1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 24 [document.documentElement, -1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 24 [document.documentElement, -1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 24 [document.documentElement, -1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 24 [document.documentElement, -1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 24 [document.documentElement, -1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 24 [document.documentElement, -1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 24 [document.documentElement, -1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 24 [document.documentElement, -1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 24 [document.documentElement, -1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 24 [document.documentElement, -1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 24 [document.documentElement, -1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 24 [document.documentElement, -1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 24 [document.documentElement, -1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 24 [document.documentElement, -1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 24 [document.documentElement, -1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 24 [document.documentElement, -1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 24 [document.documentElement, -1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 24 [document.documentElement, -1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 24 [document.documentElement, -1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 24 [document.documentElement, -1], range 49 [document, 1, document, 2]
+PASS Point 24 [document.documentElement, -1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 24 [document.documentElement, -1], range 51 [paras[3], 1, comment, 8]
+PASS Point 24 [document.documentElement, -1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 24 [document.documentElement, -1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 24 [document.documentElement, -1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 24 [document.documentElement, -1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 24 [document.documentElement, -1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 24 [document.documentElement, -1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 24 [document.documentElement, -1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 24 [document.documentElement, -1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 25 [document.documentElement, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 25 [document.documentElement, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 25 [document.documentElement, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 25 [document.documentElement, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 25 [document.documentElement, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 25 [document.documentElement, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 25 [document.documentElement, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 25 [document.documentElement, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 25 [document.documentElement, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 25 [document.documentElement, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 25 [document.documentElement, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 25 [document.documentElement, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 25 [document.documentElement, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 25 [document.documentElement, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 25 [document.documentElement, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 25 [document.documentElement, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 25 [document.documentElement, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 25 [document.documentElement, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 25 [document.documentElement, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 25 [document.documentElement, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 25 [document.documentElement, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 25 [document.documentElement, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 25 [document.documentElement, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 25 [document.documentElement, 0], range 23 [document, 0, document, 1]
+PASS Point 25 [document.documentElement, 0], range 24 [document, 0, document, 2]
+PASS Point 25 [document.documentElement, 0], range 25 [comment, 2, comment, 3]
+PASS Point 25 [document.documentElement, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 25 [document.documentElement, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 25 [document.documentElement, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 25 [document.documentElement, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 25 [document.documentElement, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 25 [document.documentElement, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 25 [document.documentElement, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 25 [document.documentElement, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 25 [document.documentElement, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 25 [document.documentElement, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 25 [document.documentElement, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 25 [document.documentElement, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 25 [document.documentElement, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 25 [document.documentElement, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 25 [document.documentElement, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 25 [document.documentElement, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 25 [document.documentElement, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 25 [document.documentElement, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 25 [document.documentElement, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 25 [document.documentElement, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 25 [document.documentElement, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 25 [document.documentElement, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 25 [document.documentElement, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 25 [document.documentElement, 0], range 49 [document, 1, document, 2]
+PASS Point 25 [document.documentElement, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 25 [document.documentElement, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 25 [document.documentElement, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 25 [document.documentElement, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 25 [document.documentElement, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 25 [document.documentElement, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 25 [document.documentElement, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 25 [document.documentElement, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 25 [document.documentElement, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 25 [document.documentElement, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 26 [document.documentElement, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 26 [document.documentElement, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 26 [document.documentElement, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 26 [document.documentElement, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 26 [document.documentElement, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 26 [document.documentElement, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 26 [document.documentElement, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 26 [document.documentElement, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 26 [document.documentElement, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 26 [document.documentElement, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 26 [document.documentElement, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 26 [document.documentElement, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 26 [document.documentElement, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 26 [document.documentElement, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 26 [document.documentElement, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 26 [document.documentElement, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 26 [document.documentElement, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 26 [document.documentElement, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 26 [document.documentElement, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 26 [document.documentElement, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 26 [document.documentElement, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 26 [document.documentElement, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 26 [document.documentElement, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 26 [document.documentElement, 1], range 23 [document, 0, document, 1]
+PASS Point 26 [document.documentElement, 1], range 24 [document, 0, document, 2]
+PASS Point 26 [document.documentElement, 1], range 25 [comment, 2, comment, 3]
+PASS Point 26 [document.documentElement, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 26 [document.documentElement, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 26 [document.documentElement, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 26 [document.documentElement, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 26 [document.documentElement, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 26 [document.documentElement, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 26 [document.documentElement, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 26 [document.documentElement, 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 26 [document.documentElement, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 26 [document.documentElement, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 26 [document.documentElement, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 26 [document.documentElement, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 26 [document.documentElement, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 26 [document.documentElement, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 26 [document.documentElement, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 26 [document.documentElement, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 26 [document.documentElement, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 26 [document.documentElement, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 26 [document.documentElement, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 26 [document.documentElement, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 26 [document.documentElement, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 26 [document.documentElement, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 26 [document.documentElement, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 26 [document.documentElement, 1], range 49 [document, 1, document, 2]
+PASS Point 26 [document.documentElement, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 26 [document.documentElement, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 26 [document.documentElement, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 26 [document.documentElement, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 26 [document.documentElement, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 26 [document.documentElement, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 26 [document.documentElement, 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 26 [document.documentElement, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 26 [document.documentElement, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 26 [document.documentElement, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 27 [document.documentElement, 2], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 27 [document.documentElement, 2], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 27 [document.documentElement, 2], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 27 [document.documentElement, 2], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 27 [document.documentElement, 2], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 27 [document.documentElement, 2], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 27 [document.documentElement, 2], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 27 [document.documentElement, 2], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 27 [document.documentElement, 2], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 27 [document.documentElement, 2], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 27 [document.documentElement, 2], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 27 [document.documentElement, 2], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 27 [document.documentElement, 2], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 27 [document.documentElement, 2], range 13 [document.head, 1, document.head, 1]
+PASS Point 27 [document.documentElement, 2], range 14 [document.body, 4, document.body, 5]
+PASS Point 27 [document.documentElement, 2], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 27 [document.documentElement, 2], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 27 [document.documentElement, 2], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 27 [document.documentElement, 2], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 27 [document.documentElement, 2], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 27 [document.documentElement, 2], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 27 [document.documentElement, 2], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 27 [document.documentElement, 2], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 27 [document.documentElement, 2], range 23 [document, 0, document, 1]
+PASS Point 27 [document.documentElement, 2], range 24 [document, 0, document, 2]
+PASS Point 27 [document.documentElement, 2], range 25 [comment, 2, comment, 3]
+PASS Point 27 [document.documentElement, 2], range 26 [testDiv, 0, comment, 5]
+PASS Point 27 [document.documentElement, 2], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 27 [document.documentElement, 2], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 27 [document.documentElement, 2], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 27 [document.documentElement, 2], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 27 [document.documentElement, 2], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 27 [document.documentElement, 2], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 27 [document.documentElement, 2], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 27 [document.documentElement, 2], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 27 [document.documentElement, 2], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 27 [document.documentElement, 2], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 27 [document.documentElement, 2], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 27 [document.documentElement, 2], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 27 [document.documentElement, 2], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 27 [document.documentElement, 2], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 27 [document.documentElement, 2], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 27 [document.documentElement, 2], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 27 [document.documentElement, 2], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 27 [document.documentElement, 2], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 27 [document.documentElement, 2], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 27 [document.documentElement, 2], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 27 [document.documentElement, 2], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 27 [document.documentElement, 2], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 27 [document.documentElement, 2], range 49 [document, 1, document, 2]
+PASS Point 27 [document.documentElement, 2], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 27 [document.documentElement, 2], range 51 [paras[3], 1, comment, 8]
+PASS Point 27 [document.documentElement, 2], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 27 [document.documentElement, 2], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 27 [document.documentElement, 2], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 27 [document.documentElement, 2], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 27 [document.documentElement, 2], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 27 [document.documentElement, 2], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 27 [document.documentElement, 2], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 27 [document.documentElement, 2], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 28 [document.documentElement, 7], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 28 [document.documentElement, 7], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 28 [document.documentElement, 7], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 28 [document.documentElement, 7], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 28 [document.documentElement, 7], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 28 [document.documentElement, 7], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 28 [document.documentElement, 7], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 28 [document.documentElement, 7], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 28 [document.documentElement, 7], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 28 [document.documentElement, 7], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 28 [document.documentElement, 7], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 28 [document.documentElement, 7], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 28 [document.documentElement, 7], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 28 [document.documentElement, 7], range 13 [document.head, 1, document.head, 1]
+PASS Point 28 [document.documentElement, 7], range 14 [document.body, 4, document.body, 5]
+PASS Point 28 [document.documentElement, 7], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 28 [document.documentElement, 7], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 28 [document.documentElement, 7], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 28 [document.documentElement, 7], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 28 [document.documentElement, 7], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 28 [document.documentElement, 7], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 28 [document.documentElement, 7], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 28 [document.documentElement, 7], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 28 [document.documentElement, 7], range 23 [document, 0, document, 1]
+PASS Point 28 [document.documentElement, 7], range 24 [document, 0, document, 2]
+PASS Point 28 [document.documentElement, 7], range 25 [comment, 2, comment, 3]
+PASS Point 28 [document.documentElement, 7], range 26 [testDiv, 0, comment, 5]
+PASS Point 28 [document.documentElement, 7], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 28 [document.documentElement, 7], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 28 [document.documentElement, 7], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 28 [document.documentElement, 7], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 28 [document.documentElement, 7], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 28 [document.documentElement, 7], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 28 [document.documentElement, 7], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 28 [document.documentElement, 7], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 28 [document.documentElement, 7], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 28 [document.documentElement, 7], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 28 [document.documentElement, 7], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 28 [document.documentElement, 7], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 28 [document.documentElement, 7], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 28 [document.documentElement, 7], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 28 [document.documentElement, 7], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 28 [document.documentElement, 7], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 28 [document.documentElement, 7], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 28 [document.documentElement, 7], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 28 [document.documentElement, 7], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 28 [document.documentElement, 7], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 28 [document.documentElement, 7], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 28 [document.documentElement, 7], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 28 [document.documentElement, 7], range 49 [document, 1, document, 2]
+PASS Point 28 [document.documentElement, 7], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 28 [document.documentElement, 7], range 51 [paras[3], 1, comment, 8]
+PASS Point 28 [document.documentElement, 7], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 28 [document.documentElement, 7], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 28 [document.documentElement, 7], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 28 [document.documentElement, 7], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 28 [document.documentElement, 7], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 28 [document.documentElement, 7], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 28 [document.documentElement, 7], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 28 [document.documentElement, 7], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 29 [document.head, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 29 [document.head, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 29 [document.head, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 29 [document.head, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 29 [document.head, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 29 [document.head, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 29 [document.head, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 29 [document.head, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 29 [document.head, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 29 [document.head, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 29 [document.head, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 29 [document.head, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 29 [document.head, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 29 [document.head, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 29 [document.head, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 29 [document.head, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 29 [document.head, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 29 [document.head, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 29 [document.head, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 29 [document.head, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 29 [document.head, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 29 [document.head, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 29 [document.head, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 29 [document.head, 1], range 23 [document, 0, document, 1]
+PASS Point 29 [document.head, 1], range 24 [document, 0, document, 2]
+PASS Point 29 [document.head, 1], range 25 [comment, 2, comment, 3]
+PASS Point 29 [document.head, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 29 [document.head, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 29 [document.head, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 29 [document.head, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 29 [document.head, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 29 [document.head, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 29 [document.head, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 29 [document.head, 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 29 [document.head, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 29 [document.head, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 29 [document.head, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 29 [document.head, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 29 [document.head, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 29 [document.head, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 29 [document.head, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 29 [document.head, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 29 [document.head, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 29 [document.head, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 29 [document.head, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 29 [document.head, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 29 [document.head, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 29 [document.head, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 29 [document.head, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 29 [document.head, 1], range 49 [document, 1, document, 2]
+PASS Point 29 [document.head, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 29 [document.head, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 29 [document.head, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 29 [document.head, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 29 [document.head, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 29 [document.head, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 29 [document.head, 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 29 [document.head, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 29 [document.head, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 29 [document.head, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 30 [document.body, 3], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 30 [document.body, 3], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 30 [document.body, 3], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 30 [document.body, 3], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 30 [document.body, 3], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 30 [document.body, 3], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 30 [document.body, 3], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 30 [document.body, 3], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 30 [document.body, 3], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 30 [document.body, 3], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 30 [document.body, 3], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 30 [document.body, 3], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 30 [document.body, 3], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 30 [document.body, 3], range 13 [document.head, 1, document.head, 1]
+PASS Point 30 [document.body, 3], range 14 [document.body, 4, document.body, 5]
+PASS Point 30 [document.body, 3], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 30 [document.body, 3], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 30 [document.body, 3], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 30 [document.body, 3], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 30 [document.body, 3], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 30 [document.body, 3], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 30 [document.body, 3], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 30 [document.body, 3], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 30 [document.body, 3], range 23 [document, 0, document, 1]
+PASS Point 30 [document.body, 3], range 24 [document, 0, document, 2]
+PASS Point 30 [document.body, 3], range 25 [comment, 2, comment, 3]
+PASS Point 30 [document.body, 3], range 26 [testDiv, 0, comment, 5]
+PASS Point 30 [document.body, 3], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 30 [document.body, 3], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 30 [document.body, 3], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 30 [document.body, 3], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 30 [document.body, 3], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 30 [document.body, 3], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 30 [document.body, 3], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 30 [document.body, 3], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 30 [document.body, 3], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 30 [document.body, 3], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 30 [document.body, 3], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 30 [document.body, 3], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 30 [document.body, 3], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 30 [document.body, 3], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 30 [document.body, 3], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 30 [document.body, 3], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 30 [document.body, 3], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 30 [document.body, 3], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 30 [document.body, 3], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 30 [document.body, 3], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 30 [document.body, 3], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 30 [document.body, 3], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 30 [document.body, 3], range 49 [document, 1, document, 2]
+PASS Point 30 [document.body, 3], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 30 [document.body, 3], range 51 [paras[3], 1, comment, 8]
+PASS Point 30 [document.body, 3], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 30 [document.body, 3], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 30 [document.body, 3], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 30 [document.body, 3], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 30 [document.body, 3], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 30 [document.body, 3], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 30 [document.body, 3], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 30 [document.body, 3], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 31 [foreignDoc.documentElement, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 31 [foreignDoc.documentElement, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 31 [foreignDoc.documentElement, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 31 [foreignDoc.documentElement, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 31 [foreignDoc.documentElement, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 31 [foreignDoc.documentElement, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 31 [foreignDoc.documentElement, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 31 [foreignDoc.documentElement, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 31 [foreignDoc.documentElement, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 31 [foreignDoc.documentElement, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 23 [document, 0, document, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 24 [document, 0, document, 2]
+PASS Point 31 [foreignDoc.documentElement, 0], range 25 [comment, 2, comment, 3]
+PASS Point 31 [foreignDoc.documentElement, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 31 [foreignDoc.documentElement, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 31 [foreignDoc.documentElement, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 31 [foreignDoc.documentElement, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 31 [foreignDoc.documentElement, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 31 [foreignDoc.documentElement, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 31 [foreignDoc.documentElement, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 31 [foreignDoc.documentElement, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 31 [foreignDoc.documentElement, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 31 [foreignDoc.documentElement, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 31 [foreignDoc.documentElement, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 31 [foreignDoc.documentElement, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 49 [document, 1, document, 2]
+PASS Point 31 [foreignDoc.documentElement, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 31 [foreignDoc.documentElement, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 31 [foreignDoc.documentElement, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 31 [foreignDoc.documentElement, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 31 [foreignDoc.documentElement, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 31 [foreignDoc.documentElement, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 31 [foreignDoc.documentElement, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 32 [foreignDoc.documentElement, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 32 [foreignDoc.documentElement, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 32 [foreignDoc.documentElement, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 32 [foreignDoc.documentElement, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 32 [foreignDoc.documentElement, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 32 [foreignDoc.documentElement, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 32 [foreignDoc.documentElement, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 32 [foreignDoc.documentElement, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 32 [foreignDoc.documentElement, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 32 [foreignDoc.documentElement, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 23 [document, 0, document, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 24 [document, 0, document, 2]
+PASS Point 32 [foreignDoc.documentElement, 1], range 25 [comment, 2, comment, 3]
+PASS Point 32 [foreignDoc.documentElement, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 32 [foreignDoc.documentElement, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 32 [foreignDoc.documentElement, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 32 [foreignDoc.documentElement, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 32 [foreignDoc.documentElement, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 32 [foreignDoc.documentElement, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 32 [foreignDoc.documentElement, 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 32 [foreignDoc.documentElement, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 32 [foreignDoc.documentElement, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 32 [foreignDoc.documentElement, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 32 [foreignDoc.documentElement, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 32 [foreignDoc.documentElement, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 49 [document, 1, document, 2]
+PASS Point 32 [foreignDoc.documentElement, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 32 [foreignDoc.documentElement, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 32 [foreignDoc.documentElement, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 32 [foreignDoc.documentElement, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 32 [foreignDoc.documentElement, 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 32 [foreignDoc.documentElement, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 32 [foreignDoc.documentElement, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 33 [foreignDoc.head, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 33 [foreignDoc.head, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 33 [foreignDoc.head, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 33 [foreignDoc.head, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 33 [foreignDoc.head, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 33 [foreignDoc.head, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 33 [foreignDoc.head, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 33 [foreignDoc.head, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 33 [foreignDoc.head, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 33 [foreignDoc.head, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 33 [foreignDoc.head, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 33 [foreignDoc.head, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 33 [foreignDoc.head, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 33 [foreignDoc.head, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 33 [foreignDoc.head, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 33 [foreignDoc.head, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 33 [foreignDoc.head, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 33 [foreignDoc.head, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 33 [foreignDoc.head, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 33 [foreignDoc.head, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 33 [foreignDoc.head, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 33 [foreignDoc.head, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 33 [foreignDoc.head, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 33 [foreignDoc.head, 0], range 23 [document, 0, document, 1]
+PASS Point 33 [foreignDoc.head, 0], range 24 [document, 0, document, 2]
+PASS Point 33 [foreignDoc.head, 0], range 25 [comment, 2, comment, 3]
+PASS Point 33 [foreignDoc.head, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 33 [foreignDoc.head, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 33 [foreignDoc.head, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 33 [foreignDoc.head, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 33 [foreignDoc.head, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 33 [foreignDoc.head, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 33 [foreignDoc.head, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 33 [foreignDoc.head, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 33 [foreignDoc.head, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 33 [foreignDoc.head, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 33 [foreignDoc.head, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 33 [foreignDoc.head, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 33 [foreignDoc.head, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 33 [foreignDoc.head, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 33 [foreignDoc.head, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 33 [foreignDoc.head, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 33 [foreignDoc.head, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 33 [foreignDoc.head, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 33 [foreignDoc.head, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 33 [foreignDoc.head, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 33 [foreignDoc.head, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 33 [foreignDoc.head, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 33 [foreignDoc.head, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 33 [foreignDoc.head, 0], range 49 [document, 1, document, 2]
+PASS Point 33 [foreignDoc.head, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 33 [foreignDoc.head, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 33 [foreignDoc.head, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 33 [foreignDoc.head, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 33 [foreignDoc.head, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 33 [foreignDoc.head, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 33 [foreignDoc.head, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 33 [foreignDoc.head, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 33 [foreignDoc.head, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 33 [foreignDoc.head, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 34 [foreignDoc.body, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 34 [foreignDoc.body, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 34 [foreignDoc.body, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 34 [foreignDoc.body, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 34 [foreignDoc.body, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 34 [foreignDoc.body, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 34 [foreignDoc.body, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 34 [foreignDoc.body, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 34 [foreignDoc.body, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 34 [foreignDoc.body, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 34 [foreignDoc.body, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 34 [foreignDoc.body, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 34 [foreignDoc.body, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 34 [foreignDoc.body, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 34 [foreignDoc.body, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 34 [foreignDoc.body, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 34 [foreignDoc.body, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 34 [foreignDoc.body, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 34 [foreignDoc.body, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 34 [foreignDoc.body, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 34 [foreignDoc.body, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 34 [foreignDoc.body, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 34 [foreignDoc.body, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 34 [foreignDoc.body, 1], range 23 [document, 0, document, 1]
+PASS Point 34 [foreignDoc.body, 1], range 24 [document, 0, document, 2]
+PASS Point 34 [foreignDoc.body, 1], range 25 [comment, 2, comment, 3]
+PASS Point 34 [foreignDoc.body, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 34 [foreignDoc.body, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 34 [foreignDoc.body, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 34 [foreignDoc.body, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 34 [foreignDoc.body, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 34 [foreignDoc.body, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 34 [foreignDoc.body, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 34 [foreignDoc.body, 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 34 [foreignDoc.body, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 34 [foreignDoc.body, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 34 [foreignDoc.body, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 34 [foreignDoc.body, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 34 [foreignDoc.body, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 34 [foreignDoc.body, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 34 [foreignDoc.body, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 34 [foreignDoc.body, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 34 [foreignDoc.body, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 34 [foreignDoc.body, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 34 [foreignDoc.body, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 34 [foreignDoc.body, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 34 [foreignDoc.body, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 34 [foreignDoc.body, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 34 [foreignDoc.body, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 34 [foreignDoc.body, 1], range 49 [document, 1, document, 2]
+PASS Point 34 [foreignDoc.body, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 34 [foreignDoc.body, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 34 [foreignDoc.body, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 34 [foreignDoc.body, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 34 [foreignDoc.body, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 34 [foreignDoc.body, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 34 [foreignDoc.body, 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 34 [foreignDoc.body, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 34 [foreignDoc.body, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 34 [foreignDoc.body, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 35 [paras[0], 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 35 [paras[0], 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 35 [paras[0], 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 35 [paras[0], 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 35 [paras[0], 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 35 [paras[0], 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 35 [paras[0], 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 35 [paras[0], 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 35 [paras[0], 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 35 [paras[0], 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 35 [paras[0], 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 35 [paras[0], 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 35 [paras[0], 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 35 [paras[0], 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 35 [paras[0], 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 35 [paras[0], 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 35 [paras[0], 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 35 [paras[0], 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 35 [paras[0], 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 35 [paras[0], 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 35 [paras[0], 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 35 [paras[0], 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 35 [paras[0], 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 35 [paras[0], 0], range 23 [document, 0, document, 1]
+PASS Point 35 [paras[0], 0], range 24 [document, 0, document, 2]
+PASS Point 35 [paras[0], 0], range 25 [comment, 2, comment, 3]
+PASS Point 35 [paras[0], 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 35 [paras[0], 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 35 [paras[0], 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 35 [paras[0], 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 35 [paras[0], 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 35 [paras[0], 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 35 [paras[0], 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 35 [paras[0], 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 35 [paras[0], 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 35 [paras[0], 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 35 [paras[0], 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 35 [paras[0], 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 35 [paras[0], 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 35 [paras[0], 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 35 [paras[0], 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 35 [paras[0], 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 35 [paras[0], 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 35 [paras[0], 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 35 [paras[0], 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 35 [paras[0], 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 35 [paras[0], 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 35 [paras[0], 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 35 [paras[0], 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 35 [paras[0], 0], range 49 [document, 1, document, 2]
+PASS Point 35 [paras[0], 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 35 [paras[0], 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 35 [paras[0], 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 35 [paras[0], 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 35 [paras[0], 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 35 [paras[0], 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 35 [paras[0], 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 35 [paras[0], 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 35 [paras[0], 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 35 [paras[0], 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 36 [paras[0], 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 36 [paras[0], 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 36 [paras[0], 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 36 [paras[0], 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 36 [paras[0], 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 36 [paras[0], 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 36 [paras[0], 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 36 [paras[0], 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 36 [paras[0], 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 36 [paras[0], 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 36 [paras[0], 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 36 [paras[0], 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 36 [paras[0], 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 36 [paras[0], 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 36 [paras[0], 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 36 [paras[0], 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 36 [paras[0], 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 36 [paras[0], 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 36 [paras[0], 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 36 [paras[0], 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 36 [paras[0], 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 36 [paras[0], 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 36 [paras[0], 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 36 [paras[0], 1], range 23 [document, 0, document, 1]
+PASS Point 36 [paras[0], 1], range 24 [document, 0, document, 2]
+PASS Point 36 [paras[0], 1], range 25 [comment, 2, comment, 3]
+PASS Point 36 [paras[0], 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 36 [paras[0], 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 36 [paras[0], 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 36 [paras[0], 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 36 [paras[0], 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 36 [paras[0], 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 36 [paras[0], 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 36 [paras[0], 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 36 [paras[0], 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 36 [paras[0], 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 36 [paras[0], 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 36 [paras[0], 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 36 [paras[0], 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 36 [paras[0], 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 36 [paras[0], 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 36 [paras[0], 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 36 [paras[0], 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 36 [paras[0], 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 36 [paras[0], 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 36 [paras[0], 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 36 [paras[0], 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 36 [paras[0], 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 36 [paras[0], 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 36 [paras[0], 1], range 49 [document, 1, document, 2]
+PASS Point 36 [paras[0], 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 36 [paras[0], 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 36 [paras[0], 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 36 [paras[0], 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 36 [paras[0], 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 36 [paras[0], 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 36 [paras[0], 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 36 [paras[0], 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 36 [paras[0], 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 36 [paras[0], 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 37 [paras[0], 2], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 37 [paras[0], 2], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 37 [paras[0], 2], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 37 [paras[0], 2], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 37 [paras[0], 2], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 37 [paras[0], 2], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 37 [paras[0], 2], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 37 [paras[0], 2], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 37 [paras[0], 2], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 37 [paras[0], 2], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 37 [paras[0], 2], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 37 [paras[0], 2], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 37 [paras[0], 2], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 37 [paras[0], 2], range 13 [document.head, 1, document.head, 1]
+PASS Point 37 [paras[0], 2], range 14 [document.body, 4, document.body, 5]
+PASS Point 37 [paras[0], 2], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 37 [paras[0], 2], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 37 [paras[0], 2], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 37 [paras[0], 2], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 37 [paras[0], 2], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 37 [paras[0], 2], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 37 [paras[0], 2], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 37 [paras[0], 2], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 37 [paras[0], 2], range 23 [document, 0, document, 1]
+PASS Point 37 [paras[0], 2], range 24 [document, 0, document, 2]
+PASS Point 37 [paras[0], 2], range 25 [comment, 2, comment, 3]
+PASS Point 37 [paras[0], 2], range 26 [testDiv, 0, comment, 5]
+PASS Point 37 [paras[0], 2], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 37 [paras[0], 2], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 37 [paras[0], 2], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 37 [paras[0], 2], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 37 [paras[0], 2], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 37 [paras[0], 2], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 37 [paras[0], 2], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 37 [paras[0], 2], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 37 [paras[0], 2], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 37 [paras[0], 2], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 37 [paras[0], 2], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 37 [paras[0], 2], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 37 [paras[0], 2], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 37 [paras[0], 2], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 37 [paras[0], 2], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 37 [paras[0], 2], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 37 [paras[0], 2], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 37 [paras[0], 2], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 37 [paras[0], 2], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 37 [paras[0], 2], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 37 [paras[0], 2], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 37 [paras[0], 2], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 37 [paras[0], 2], range 49 [document, 1, document, 2]
+PASS Point 37 [paras[0], 2], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 37 [paras[0], 2], range 51 [paras[3], 1, comment, 8]
+PASS Point 37 [paras[0], 2], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 37 [paras[0], 2], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 37 [paras[0], 2], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 37 [paras[0], 2], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 37 [paras[0], 2], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 37 [paras[0], 2], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 37 [paras[0], 2], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 37 [paras[0], 2], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 38 [paras[1], 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 38 [paras[1], 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 38 [paras[1], 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 38 [paras[1], 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 38 [paras[1], 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 38 [paras[1], 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 38 [paras[1], 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 38 [paras[1], 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 38 [paras[1], 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 38 [paras[1], 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 38 [paras[1], 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 38 [paras[1], 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 38 [paras[1], 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 38 [paras[1], 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 38 [paras[1], 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 38 [paras[1], 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 38 [paras[1], 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 38 [paras[1], 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 38 [paras[1], 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 38 [paras[1], 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 38 [paras[1], 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 38 [paras[1], 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 38 [paras[1], 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 38 [paras[1], 0], range 23 [document, 0, document, 1]
+PASS Point 38 [paras[1], 0], range 24 [document, 0, document, 2]
+PASS Point 38 [paras[1], 0], range 25 [comment, 2, comment, 3]
+PASS Point 38 [paras[1], 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 38 [paras[1], 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 38 [paras[1], 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 38 [paras[1], 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 38 [paras[1], 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 38 [paras[1], 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 38 [paras[1], 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 38 [paras[1], 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 38 [paras[1], 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 38 [paras[1], 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 38 [paras[1], 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 38 [paras[1], 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 38 [paras[1], 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 38 [paras[1], 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 38 [paras[1], 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 38 [paras[1], 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 38 [paras[1], 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 38 [paras[1], 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 38 [paras[1], 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 38 [paras[1], 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 38 [paras[1], 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 38 [paras[1], 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 38 [paras[1], 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 38 [paras[1], 0], range 49 [document, 1, document, 2]
+PASS Point 38 [paras[1], 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 38 [paras[1], 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 38 [paras[1], 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 38 [paras[1], 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 38 [paras[1], 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 38 [paras[1], 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 38 [paras[1], 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 38 [paras[1], 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 38 [paras[1], 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 38 [paras[1], 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 39 [paras[1], 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 39 [paras[1], 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 39 [paras[1], 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 39 [paras[1], 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 39 [paras[1], 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 39 [paras[1], 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 39 [paras[1], 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 39 [paras[1], 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 39 [paras[1], 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 39 [paras[1], 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 39 [paras[1], 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 39 [paras[1], 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 39 [paras[1], 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 39 [paras[1], 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 39 [paras[1], 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 39 [paras[1], 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 39 [paras[1], 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 39 [paras[1], 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 39 [paras[1], 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 39 [paras[1], 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 39 [paras[1], 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 39 [paras[1], 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 39 [paras[1], 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 39 [paras[1], 1], range 23 [document, 0, document, 1]
+PASS Point 39 [paras[1], 1], range 24 [document, 0, document, 2]
+PASS Point 39 [paras[1], 1], range 25 [comment, 2, comment, 3]
+PASS Point 39 [paras[1], 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 39 [paras[1], 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 39 [paras[1], 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 39 [paras[1], 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 39 [paras[1], 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 39 [paras[1], 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 39 [paras[1], 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 39 [paras[1], 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 39 [paras[1], 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 39 [paras[1], 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 39 [paras[1], 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 39 [paras[1], 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 39 [paras[1], 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 39 [paras[1], 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 39 [paras[1], 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 39 [paras[1], 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 39 [paras[1], 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 39 [paras[1], 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 39 [paras[1], 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 39 [paras[1], 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 39 [paras[1], 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 39 [paras[1], 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 39 [paras[1], 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 39 [paras[1], 1], range 49 [document, 1, document, 2]
+PASS Point 39 [paras[1], 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 39 [paras[1], 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 39 [paras[1], 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 39 [paras[1], 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 39 [paras[1], 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 39 [paras[1], 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 39 [paras[1], 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 39 [paras[1], 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 39 [paras[1], 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 39 [paras[1], 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 40 [paras[1], 2], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 40 [paras[1], 2], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 40 [paras[1], 2], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 40 [paras[1], 2], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 40 [paras[1], 2], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 40 [paras[1], 2], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 40 [paras[1], 2], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 40 [paras[1], 2], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 40 [paras[1], 2], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 40 [paras[1], 2], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 40 [paras[1], 2], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 40 [paras[1], 2], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 40 [paras[1], 2], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 40 [paras[1], 2], range 13 [document.head, 1, document.head, 1]
+PASS Point 40 [paras[1], 2], range 14 [document.body, 4, document.body, 5]
+PASS Point 40 [paras[1], 2], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 40 [paras[1], 2], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 40 [paras[1], 2], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 40 [paras[1], 2], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 40 [paras[1], 2], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 40 [paras[1], 2], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 40 [paras[1], 2], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 40 [paras[1], 2], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 40 [paras[1], 2], range 23 [document, 0, document, 1]
+PASS Point 40 [paras[1], 2], range 24 [document, 0, document, 2]
+PASS Point 40 [paras[1], 2], range 25 [comment, 2, comment, 3]
+PASS Point 40 [paras[1], 2], range 26 [testDiv, 0, comment, 5]
+PASS Point 40 [paras[1], 2], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 40 [paras[1], 2], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 40 [paras[1], 2], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 40 [paras[1], 2], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 40 [paras[1], 2], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 40 [paras[1], 2], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 40 [paras[1], 2], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 40 [paras[1], 2], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 40 [paras[1], 2], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 40 [paras[1], 2], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 40 [paras[1], 2], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 40 [paras[1], 2], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 40 [paras[1], 2], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 40 [paras[1], 2], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 40 [paras[1], 2], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 40 [paras[1], 2], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 40 [paras[1], 2], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 40 [paras[1], 2], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 40 [paras[1], 2], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 40 [paras[1], 2], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 40 [paras[1], 2], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 40 [paras[1], 2], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 40 [paras[1], 2], range 49 [document, 1, document, 2]
+PASS Point 40 [paras[1], 2], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 40 [paras[1], 2], range 51 [paras[3], 1, comment, 8]
+PASS Point 40 [paras[1], 2], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 40 [paras[1], 2], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 40 [paras[1], 2], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 40 [paras[1], 2], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 40 [paras[1], 2], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 40 [paras[1], 2], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 40 [paras[1], 2], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 40 [paras[1], 2], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 41 [detachedPara1, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 41 [detachedPara1, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 41 [detachedPara1, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 41 [detachedPara1, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 41 [detachedPara1, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 41 [detachedPara1, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 41 [detachedPara1, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 41 [detachedPara1, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 41 [detachedPara1, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 41 [detachedPara1, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 41 [detachedPara1, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 41 [detachedPara1, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 41 [detachedPara1, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 41 [detachedPara1, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 41 [detachedPara1, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 41 [detachedPara1, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 41 [detachedPara1, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 41 [detachedPara1, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 41 [detachedPara1, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 41 [detachedPara1, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 41 [detachedPara1, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 41 [detachedPara1, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 41 [detachedPara1, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 41 [detachedPara1, 0], range 23 [document, 0, document, 1]
+PASS Point 41 [detachedPara1, 0], range 24 [document, 0, document, 2]
+PASS Point 41 [detachedPara1, 0], range 25 [comment, 2, comment, 3]
+PASS Point 41 [detachedPara1, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 41 [detachedPara1, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 41 [detachedPara1, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 41 [detachedPara1, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 41 [detachedPara1, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 41 [detachedPara1, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 41 [detachedPara1, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 41 [detachedPara1, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 41 [detachedPara1, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 41 [detachedPara1, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 41 [detachedPara1, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 41 [detachedPara1, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 41 [detachedPara1, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 41 [detachedPara1, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 41 [detachedPara1, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 41 [detachedPara1, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 41 [detachedPara1, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 41 [detachedPara1, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 41 [detachedPara1, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 41 [detachedPara1, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 41 [detachedPara1, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 41 [detachedPara1, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 41 [detachedPara1, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 41 [detachedPara1, 0], range 49 [document, 1, document, 2]
+PASS Point 41 [detachedPara1, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 41 [detachedPara1, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 41 [detachedPara1, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 41 [detachedPara1, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 41 [detachedPara1, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 41 [detachedPara1, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 41 [detachedPara1, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 41 [detachedPara1, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 41 [detachedPara1, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 41 [detachedPara1, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 42 [detachedPara1, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 42 [detachedPara1, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 42 [detachedPara1, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 42 [detachedPara1, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 42 [detachedPara1, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 42 [detachedPara1, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 42 [detachedPara1, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 42 [detachedPara1, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 42 [detachedPara1, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 42 [detachedPara1, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 42 [detachedPara1, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 42 [detachedPara1, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 42 [detachedPara1, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 42 [detachedPara1, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 42 [detachedPara1, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 42 [detachedPara1, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 42 [detachedPara1, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 42 [detachedPara1, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 42 [detachedPara1, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 42 [detachedPara1, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 42 [detachedPara1, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 42 [detachedPara1, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 42 [detachedPara1, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 42 [detachedPara1, 1], range 23 [document, 0, document, 1]
+PASS Point 42 [detachedPara1, 1], range 24 [document, 0, document, 2]
+PASS Point 42 [detachedPara1, 1], range 25 [comment, 2, comment, 3]
+PASS Point 42 [detachedPara1, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 42 [detachedPara1, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 42 [detachedPara1, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 42 [detachedPara1, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 42 [detachedPara1, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 42 [detachedPara1, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 42 [detachedPara1, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 42 [detachedPara1, 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 42 [detachedPara1, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 42 [detachedPara1, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 42 [detachedPara1, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 42 [detachedPara1, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 42 [detachedPara1, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 42 [detachedPara1, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 42 [detachedPara1, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 42 [detachedPara1, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 42 [detachedPara1, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 42 [detachedPara1, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 42 [detachedPara1, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 42 [detachedPara1, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 42 [detachedPara1, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 42 [detachedPara1, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 42 [detachedPara1, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 42 [detachedPara1, 1], range 49 [document, 1, document, 2]
+PASS Point 42 [detachedPara1, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 42 [detachedPara1, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 42 [detachedPara1, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 42 [detachedPara1, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 42 [detachedPara1, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 42 [detachedPara1, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 42 [detachedPara1, 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 42 [detachedPara1, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 42 [detachedPara1, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 42 [detachedPara1, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 43 [testDiv, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 43 [testDiv, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 43 [testDiv, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 43 [testDiv, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 43 [testDiv, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 43 [testDiv, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 43 [testDiv, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 43 [testDiv, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 43 [testDiv, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 43 [testDiv, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 43 [testDiv, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 43 [testDiv, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 43 [testDiv, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 43 [testDiv, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 43 [testDiv, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 43 [testDiv, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 43 [testDiv, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 43 [testDiv, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 43 [testDiv, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 43 [testDiv, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 43 [testDiv, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 43 [testDiv, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 43 [testDiv, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 43 [testDiv, 0], range 23 [document, 0, document, 1]
+PASS Point 43 [testDiv, 0], range 24 [document, 0, document, 2]
+PASS Point 43 [testDiv, 0], range 25 [comment, 2, comment, 3]
+PASS Point 43 [testDiv, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 43 [testDiv, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 43 [testDiv, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 43 [testDiv, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 43 [testDiv, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 43 [testDiv, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 43 [testDiv, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 43 [testDiv, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 43 [testDiv, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 43 [testDiv, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 43 [testDiv, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 43 [testDiv, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 43 [testDiv, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 43 [testDiv, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 43 [testDiv, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 43 [testDiv, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 43 [testDiv, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 43 [testDiv, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 43 [testDiv, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 43 [testDiv, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 43 [testDiv, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 43 [testDiv, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 43 [testDiv, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 43 [testDiv, 0], range 49 [document, 1, document, 2]
+PASS Point 43 [testDiv, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 43 [testDiv, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 43 [testDiv, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 43 [testDiv, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 43 [testDiv, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 43 [testDiv, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 43 [testDiv, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 43 [testDiv, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 43 [testDiv, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 43 [testDiv, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 44 [testDiv, 3], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 44 [testDiv, 3], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 44 [testDiv, 3], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 44 [testDiv, 3], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 44 [testDiv, 3], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 44 [testDiv, 3], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 44 [testDiv, 3], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 44 [testDiv, 3], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 44 [testDiv, 3], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 44 [testDiv, 3], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 44 [testDiv, 3], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 44 [testDiv, 3], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 44 [testDiv, 3], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 44 [testDiv, 3], range 13 [document.head, 1, document.head, 1]
+PASS Point 44 [testDiv, 3], range 14 [document.body, 4, document.body, 5]
+PASS Point 44 [testDiv, 3], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 44 [testDiv, 3], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 44 [testDiv, 3], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 44 [testDiv, 3], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 44 [testDiv, 3], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 44 [testDiv, 3], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 44 [testDiv, 3], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 44 [testDiv, 3], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 44 [testDiv, 3], range 23 [document, 0, document, 1]
+PASS Point 44 [testDiv, 3], range 24 [document, 0, document, 2]
+PASS Point 44 [testDiv, 3], range 25 [comment, 2, comment, 3]
+PASS Point 44 [testDiv, 3], range 26 [testDiv, 0, comment, 5]
+PASS Point 44 [testDiv, 3], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 44 [testDiv, 3], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 44 [testDiv, 3], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 44 [testDiv, 3], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 44 [testDiv, 3], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 44 [testDiv, 3], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 44 [testDiv, 3], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 44 [testDiv, 3], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 44 [testDiv, 3], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 44 [testDiv, 3], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 44 [testDiv, 3], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 44 [testDiv, 3], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 44 [testDiv, 3], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 44 [testDiv, 3], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 44 [testDiv, 3], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 44 [testDiv, 3], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 44 [testDiv, 3], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 44 [testDiv, 3], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 44 [testDiv, 3], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 44 [testDiv, 3], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 44 [testDiv, 3], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 44 [testDiv, 3], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 44 [testDiv, 3], range 49 [document, 1, document, 2]
+PASS Point 44 [testDiv, 3], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 44 [testDiv, 3], range 51 [paras[3], 1, comment, 8]
+PASS Point 44 [testDiv, 3], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 44 [testDiv, 3], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 44 [testDiv, 3], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 44 [testDiv, 3], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 44 [testDiv, 3], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 44 [testDiv, 3], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 44 [testDiv, 3], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 44 [testDiv, 3], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 45 [document, -1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 45 [document, -1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 45 [document, -1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 45 [document, -1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 45 [document, -1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 45 [document, -1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 45 [document, -1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 45 [document, -1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 45 [document, -1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 45 [document, -1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 45 [document, -1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 45 [document, -1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 45 [document, -1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 45 [document, -1], range 13 [document.head, 1, document.head, 1]
+PASS Point 45 [document, -1], range 14 [document.body, 4, document.body, 5]
+PASS Point 45 [document, -1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 45 [document, -1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 45 [document, -1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 45 [document, -1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 45 [document, -1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 45 [document, -1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 45 [document, -1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 45 [document, -1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 45 [document, -1], range 23 [document, 0, document, 1]
+PASS Point 45 [document, -1], range 24 [document, 0, document, 2]
+PASS Point 45 [document, -1], range 25 [comment, 2, comment, 3]
+PASS Point 45 [document, -1], range 26 [testDiv, 0, comment, 5]
+PASS Point 45 [document, -1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 45 [document, -1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 45 [document, -1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 45 [document, -1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 45 [document, -1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 45 [document, -1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 45 [document, -1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 45 [document, -1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 45 [document, -1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 45 [document, -1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 45 [document, -1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 45 [document, -1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 45 [document, -1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 45 [document, -1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 45 [document, -1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 45 [document, -1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 45 [document, -1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 45 [document, -1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 45 [document, -1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 45 [document, -1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 45 [document, -1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 45 [document, -1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 45 [document, -1], range 49 [document, 1, document, 2]
+PASS Point 45 [document, -1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 45 [document, -1], range 51 [paras[3], 1, comment, 8]
+PASS Point 45 [document, -1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 45 [document, -1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 45 [document, -1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 45 [document, -1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 45 [document, -1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 45 [document, -1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 45 [document, -1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 45 [document, -1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 46 [document, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 46 [document, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 46 [document, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 46 [document, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 46 [document, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 46 [document, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 46 [document, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 46 [document, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 46 [document, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 46 [document, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 46 [document, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 46 [document, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 46 [document, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 46 [document, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 46 [document, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 46 [document, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 46 [document, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 46 [document, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 46 [document, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 46 [document, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 46 [document, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 46 [document, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 46 [document, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 46 [document, 0], range 23 [document, 0, document, 1]
+PASS Point 46 [document, 0], range 24 [document, 0, document, 2]
+PASS Point 46 [document, 0], range 25 [comment, 2, comment, 3]
+PASS Point 46 [document, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 46 [document, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 46 [document, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 46 [document, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 46 [document, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 46 [document, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 46 [document, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 46 [document, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 46 [document, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 46 [document, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 46 [document, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 46 [document, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 46 [document, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 46 [document, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 46 [document, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 46 [document, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 46 [document, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 46 [document, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 46 [document, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 46 [document, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 46 [document, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 46 [document, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 46 [document, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 46 [document, 0], range 49 [document, 1, document, 2]
+PASS Point 46 [document, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 46 [document, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 46 [document, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 46 [document, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 46 [document, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 46 [document, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 46 [document, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 46 [document, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 46 [document, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 46 [document, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 47 [document, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 47 [document, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 47 [document, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 47 [document, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 47 [document, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 47 [document, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 47 [document, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 47 [document, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 47 [document, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 47 [document, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 47 [document, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 47 [document, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 47 [document, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 47 [document, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 47 [document, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 47 [document, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 47 [document, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 47 [document, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 47 [document, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 47 [document, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 47 [document, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 47 [document, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 47 [document, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 47 [document, 1], range 23 [document, 0, document, 1]
+PASS Point 47 [document, 1], range 24 [document, 0, document, 2]
+PASS Point 47 [document, 1], range 25 [comment, 2, comment, 3]
+PASS Point 47 [document, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 47 [document, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 47 [document, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 47 [document, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 47 [document, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 47 [document, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 47 [document, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 47 [document, 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 47 [document, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 47 [document, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 47 [document, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 47 [document, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 47 [document, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 47 [document, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 47 [document, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 47 [document, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 47 [document, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 47 [document, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 47 [document, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 47 [document, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 47 [document, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 47 [document, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 47 [document, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 47 [document, 1], range 49 [document, 1, document, 2]
+PASS Point 47 [document, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 47 [document, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 47 [document, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 47 [document, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 47 [document, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 47 [document, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 47 [document, 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 47 [document, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 47 [document, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 47 [document, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 48 [document, 2], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 48 [document, 2], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 48 [document, 2], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 48 [document, 2], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 48 [document, 2], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 48 [document, 2], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 48 [document, 2], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 48 [document, 2], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 48 [document, 2], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 48 [document, 2], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 48 [document, 2], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 48 [document, 2], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 48 [document, 2], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 48 [document, 2], range 13 [document.head, 1, document.head, 1]
+PASS Point 48 [document, 2], range 14 [document.body, 4, document.body, 5]
+PASS Point 48 [document, 2], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 48 [document, 2], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 48 [document, 2], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 48 [document, 2], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 48 [document, 2], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 48 [document, 2], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 48 [document, 2], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 48 [document, 2], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 48 [document, 2], range 23 [document, 0, document, 1]
+PASS Point 48 [document, 2], range 24 [document, 0, document, 2]
+PASS Point 48 [document, 2], range 25 [comment, 2, comment, 3]
+PASS Point 48 [document, 2], range 26 [testDiv, 0, comment, 5]
+PASS Point 48 [document, 2], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 48 [document, 2], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 48 [document, 2], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 48 [document, 2], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 48 [document, 2], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 48 [document, 2], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 48 [document, 2], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 48 [document, 2], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 48 [document, 2], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 48 [document, 2], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 48 [document, 2], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 48 [document, 2], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 48 [document, 2], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 48 [document, 2], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 48 [document, 2], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 48 [document, 2], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 48 [document, 2], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 48 [document, 2], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 48 [document, 2], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 48 [document, 2], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 48 [document, 2], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 48 [document, 2], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 48 [document, 2], range 49 [document, 1, document, 2]
+PASS Point 48 [document, 2], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 48 [document, 2], range 51 [paras[3], 1, comment, 8]
+PASS Point 48 [document, 2], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 48 [document, 2], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 48 [document, 2], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 48 [document, 2], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 48 [document, 2], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 48 [document, 2], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 48 [document, 2], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 48 [document, 2], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 49 [document, 3], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 49 [document, 3], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 49 [document, 3], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 49 [document, 3], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 49 [document, 3], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 49 [document, 3], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 49 [document, 3], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 49 [document, 3], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 49 [document, 3], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 49 [document, 3], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 49 [document, 3], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 49 [document, 3], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 49 [document, 3], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 49 [document, 3], range 13 [document.head, 1, document.head, 1]
+PASS Point 49 [document, 3], range 14 [document.body, 4, document.body, 5]
+PASS Point 49 [document, 3], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 49 [document, 3], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 49 [document, 3], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 49 [document, 3], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 49 [document, 3], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 49 [document, 3], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 49 [document, 3], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 49 [document, 3], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 49 [document, 3], range 23 [document, 0, document, 1]
+PASS Point 49 [document, 3], range 24 [document, 0, document, 2]
+PASS Point 49 [document, 3], range 25 [comment, 2, comment, 3]
+PASS Point 49 [document, 3], range 26 [testDiv, 0, comment, 5]
+PASS Point 49 [document, 3], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 49 [document, 3], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 49 [document, 3], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 49 [document, 3], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 49 [document, 3], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 49 [document, 3], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 49 [document, 3], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 49 [document, 3], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 49 [document, 3], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 49 [document, 3], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 49 [document, 3], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 49 [document, 3], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 49 [document, 3], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 49 [document, 3], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 49 [document, 3], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 49 [document, 3], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 49 [document, 3], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 49 [document, 3], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 49 [document, 3], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 49 [document, 3], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 49 [document, 3], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 49 [document, 3], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 49 [document, 3], range 49 [document, 1, document, 2]
+PASS Point 49 [document, 3], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 49 [document, 3], range 51 [paras[3], 1, comment, 8]
+PASS Point 49 [document, 3], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 49 [document, 3], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 49 [document, 3], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 49 [document, 3], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 49 [document, 3], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 49 [document, 3], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 49 [document, 3], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 49 [document, 3], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 50 [comment, -1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 50 [comment, -1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 50 [comment, -1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 50 [comment, -1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 50 [comment, -1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 50 [comment, -1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 50 [comment, -1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 50 [comment, -1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 50 [comment, -1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 50 [comment, -1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 50 [comment, -1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 50 [comment, -1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 50 [comment, -1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 50 [comment, -1], range 13 [document.head, 1, document.head, 1]
+PASS Point 50 [comment, -1], range 14 [document.body, 4, document.body, 5]
+PASS Point 50 [comment, -1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 50 [comment, -1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 50 [comment, -1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 50 [comment, -1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 50 [comment, -1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 50 [comment, -1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 50 [comment, -1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 50 [comment, -1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 50 [comment, -1], range 23 [document, 0, document, 1]
+PASS Point 50 [comment, -1], range 24 [document, 0, document, 2]
+PASS Point 50 [comment, -1], range 25 [comment, 2, comment, 3]
+PASS Point 50 [comment, -1], range 26 [testDiv, 0, comment, 5]
+PASS Point 50 [comment, -1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 50 [comment, -1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 50 [comment, -1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 50 [comment, -1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 50 [comment, -1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 50 [comment, -1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 50 [comment, -1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 50 [comment, -1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 50 [comment, -1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 50 [comment, -1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 50 [comment, -1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 50 [comment, -1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 50 [comment, -1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 50 [comment, -1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 50 [comment, -1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 50 [comment, -1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 50 [comment, -1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 50 [comment, -1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 50 [comment, -1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 50 [comment, -1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 50 [comment, -1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 50 [comment, -1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 50 [comment, -1], range 49 [document, 1, document, 2]
+PASS Point 50 [comment, -1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 50 [comment, -1], range 51 [paras[3], 1, comment, 8]
+PASS Point 50 [comment, -1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 50 [comment, -1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 50 [comment, -1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 50 [comment, -1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 50 [comment, -1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 50 [comment, -1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 50 [comment, -1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 50 [comment, -1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 51 [comment, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 51 [comment, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 51 [comment, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 51 [comment, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 51 [comment, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 51 [comment, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 51 [comment, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 51 [comment, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 51 [comment, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 51 [comment, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 51 [comment, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 51 [comment, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 51 [comment, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 51 [comment, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 51 [comment, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 51 [comment, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 51 [comment, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 51 [comment, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 51 [comment, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 51 [comment, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 51 [comment, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 51 [comment, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 51 [comment, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 51 [comment, 0], range 23 [document, 0, document, 1]
+PASS Point 51 [comment, 0], range 24 [document, 0, document, 2]
+PASS Point 51 [comment, 0], range 25 [comment, 2, comment, 3]
+PASS Point 51 [comment, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 51 [comment, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 51 [comment, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 51 [comment, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 51 [comment, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 51 [comment, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 51 [comment, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 51 [comment, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 51 [comment, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 51 [comment, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 51 [comment, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 51 [comment, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 51 [comment, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 51 [comment, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 51 [comment, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 51 [comment, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 51 [comment, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 51 [comment, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 51 [comment, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 51 [comment, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 51 [comment, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 51 [comment, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 51 [comment, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 51 [comment, 0], range 49 [document, 1, document, 2]
+PASS Point 51 [comment, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 51 [comment, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 51 [comment, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 51 [comment, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 51 [comment, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 51 [comment, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 51 [comment, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 51 [comment, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 51 [comment, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 51 [comment, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 52 [comment, 4], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 52 [comment, 4], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 52 [comment, 4], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 52 [comment, 4], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 52 [comment, 4], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 52 [comment, 4], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 52 [comment, 4], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 52 [comment, 4], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 52 [comment, 4], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 52 [comment, 4], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 52 [comment, 4], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 52 [comment, 4], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 52 [comment, 4], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 52 [comment, 4], range 13 [document.head, 1, document.head, 1]
+PASS Point 52 [comment, 4], range 14 [document.body, 4, document.body, 5]
+PASS Point 52 [comment, 4], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 52 [comment, 4], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 52 [comment, 4], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 52 [comment, 4], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 52 [comment, 4], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 52 [comment, 4], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 52 [comment, 4], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 52 [comment, 4], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 52 [comment, 4], range 23 [document, 0, document, 1]
+PASS Point 52 [comment, 4], range 24 [document, 0, document, 2]
+PASS Point 52 [comment, 4], range 25 [comment, 2, comment, 3]
+PASS Point 52 [comment, 4], range 26 [testDiv, 0, comment, 5]
+PASS Point 52 [comment, 4], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 52 [comment, 4], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 52 [comment, 4], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 52 [comment, 4], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 52 [comment, 4], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 52 [comment, 4], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 52 [comment, 4], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 52 [comment, 4], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 52 [comment, 4], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 52 [comment, 4], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 52 [comment, 4], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 52 [comment, 4], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 52 [comment, 4], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 52 [comment, 4], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 52 [comment, 4], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 52 [comment, 4], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 52 [comment, 4], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 52 [comment, 4], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 52 [comment, 4], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 52 [comment, 4], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 52 [comment, 4], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 52 [comment, 4], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 52 [comment, 4], range 49 [document, 1, document, 2]
+PASS Point 52 [comment, 4], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 52 [comment, 4], range 51 [paras[3], 1, comment, 8]
+PASS Point 52 [comment, 4], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 52 [comment, 4], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 52 [comment, 4], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 52 [comment, 4], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 52 [comment, 4], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 52 [comment, 4], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 52 [comment, 4], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 52 [comment, 4], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 53 [comment, 96], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 53 [comment, 96], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 53 [comment, 96], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 53 [comment, 96], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 53 [comment, 96], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 53 [comment, 96], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 53 [comment, 96], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 53 [comment, 96], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 53 [comment, 96], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 53 [comment, 96], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 53 [comment, 96], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 53 [comment, 96], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 53 [comment, 96], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 53 [comment, 96], range 13 [document.head, 1, document.head, 1]
+PASS Point 53 [comment, 96], range 14 [document.body, 4, document.body, 5]
+PASS Point 53 [comment, 96], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 53 [comment, 96], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 53 [comment, 96], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 53 [comment, 96], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 53 [comment, 96], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 53 [comment, 96], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 53 [comment, 96], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 53 [comment, 96], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 53 [comment, 96], range 23 [document, 0, document, 1]
+PASS Point 53 [comment, 96], range 24 [document, 0, document, 2]
+PASS Point 53 [comment, 96], range 25 [comment, 2, comment, 3]
+PASS Point 53 [comment, 96], range 26 [testDiv, 0, comment, 5]
+PASS Point 53 [comment, 96], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 53 [comment, 96], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 53 [comment, 96], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 53 [comment, 96], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 53 [comment, 96], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 53 [comment, 96], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 53 [comment, 96], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 53 [comment, 96], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 53 [comment, 96], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 53 [comment, 96], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 53 [comment, 96], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 53 [comment, 96], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 53 [comment, 96], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 53 [comment, 96], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 53 [comment, 96], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 53 [comment, 96], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 53 [comment, 96], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 53 [comment, 96], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 53 [comment, 96], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 53 [comment, 96], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 53 [comment, 96], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 53 [comment, 96], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 53 [comment, 96], range 49 [document, 1, document, 2]
+PASS Point 53 [comment, 96], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 53 [comment, 96], range 51 [paras[3], 1, comment, 8]
+PASS Point 53 [comment, 96], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 53 [comment, 96], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 53 [comment, 96], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 53 [comment, 96], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 53 [comment, 96], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 53 [comment, 96], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 53 [comment, 96], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 53 [comment, 96], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 54 [foreignDoc, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 54 [foreignDoc, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 54 [foreignDoc, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 54 [foreignDoc, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 54 [foreignDoc, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 54 [foreignDoc, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 54 [foreignDoc, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 54 [foreignDoc, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 54 [foreignDoc, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 54 [foreignDoc, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 54 [foreignDoc, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 54 [foreignDoc, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 54 [foreignDoc, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 54 [foreignDoc, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 54 [foreignDoc, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 54 [foreignDoc, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 54 [foreignDoc, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 54 [foreignDoc, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 54 [foreignDoc, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 54 [foreignDoc, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 54 [foreignDoc, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 54 [foreignDoc, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 54 [foreignDoc, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 54 [foreignDoc, 0], range 23 [document, 0, document, 1]
+PASS Point 54 [foreignDoc, 0], range 24 [document, 0, document, 2]
+PASS Point 54 [foreignDoc, 0], range 25 [comment, 2, comment, 3]
+PASS Point 54 [foreignDoc, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 54 [foreignDoc, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 54 [foreignDoc, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 54 [foreignDoc, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 54 [foreignDoc, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 54 [foreignDoc, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 54 [foreignDoc, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 54 [foreignDoc, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 54 [foreignDoc, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 54 [foreignDoc, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 54 [foreignDoc, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 54 [foreignDoc, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 54 [foreignDoc, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 54 [foreignDoc, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 54 [foreignDoc, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 54 [foreignDoc, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 54 [foreignDoc, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 54 [foreignDoc, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 54 [foreignDoc, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 54 [foreignDoc, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 54 [foreignDoc, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 54 [foreignDoc, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 54 [foreignDoc, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 54 [foreignDoc, 0], range 49 [document, 1, document, 2]
+PASS Point 54 [foreignDoc, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 54 [foreignDoc, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 54 [foreignDoc, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 54 [foreignDoc, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 54 [foreignDoc, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 54 [foreignDoc, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 54 [foreignDoc, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 54 [foreignDoc, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 54 [foreignDoc, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 54 [foreignDoc, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 55 [foreignDoc, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 55 [foreignDoc, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 55 [foreignDoc, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 55 [foreignDoc, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 55 [foreignDoc, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 55 [foreignDoc, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 55 [foreignDoc, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 55 [foreignDoc, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 55 [foreignDoc, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 55 [foreignDoc, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 55 [foreignDoc, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 55 [foreignDoc, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 55 [foreignDoc, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 55 [foreignDoc, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 55 [foreignDoc, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 55 [foreignDoc, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 55 [foreignDoc, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 55 [foreignDoc, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 55 [foreignDoc, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 55 [foreignDoc, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 55 [foreignDoc, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 55 [foreignDoc, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 55 [foreignDoc, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 55 [foreignDoc, 1], range 23 [document, 0, document, 1]
+PASS Point 55 [foreignDoc, 1], range 24 [document, 0, document, 2]
+PASS Point 55 [foreignDoc, 1], range 25 [comment, 2, comment, 3]
+PASS Point 55 [foreignDoc, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 55 [foreignDoc, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 55 [foreignDoc, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 55 [foreignDoc, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 55 [foreignDoc, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 55 [foreignDoc, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 55 [foreignDoc, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 55 [foreignDoc, 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 55 [foreignDoc, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 55 [foreignDoc, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 55 [foreignDoc, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 55 [foreignDoc, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 55 [foreignDoc, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 55 [foreignDoc, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 55 [foreignDoc, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 55 [foreignDoc, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 55 [foreignDoc, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 55 [foreignDoc, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 55 [foreignDoc, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 55 [foreignDoc, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 55 [foreignDoc, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 55 [foreignDoc, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 55 [foreignDoc, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 55 [foreignDoc, 1], range 49 [document, 1, document, 2]
+PASS Point 55 [foreignDoc, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 55 [foreignDoc, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 55 [foreignDoc, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 55 [foreignDoc, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 55 [foreignDoc, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 55 [foreignDoc, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 55 [foreignDoc, 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 55 [foreignDoc, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 55 [foreignDoc, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 55 [foreignDoc, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 56 [foreignComment, 2], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 56 [foreignComment, 2], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 56 [foreignComment, 2], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 56 [foreignComment, 2], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 56 [foreignComment, 2], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 56 [foreignComment, 2], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 56 [foreignComment, 2], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 56 [foreignComment, 2], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 56 [foreignComment, 2], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 56 [foreignComment, 2], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 56 [foreignComment, 2], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 56 [foreignComment, 2], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 56 [foreignComment, 2], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 56 [foreignComment, 2], range 13 [document.head, 1, document.head, 1]
+PASS Point 56 [foreignComment, 2], range 14 [document.body, 4, document.body, 5]
+PASS Point 56 [foreignComment, 2], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 56 [foreignComment, 2], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 56 [foreignComment, 2], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 56 [foreignComment, 2], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 56 [foreignComment, 2], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 56 [foreignComment, 2], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 56 [foreignComment, 2], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 56 [foreignComment, 2], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 56 [foreignComment, 2], range 23 [document, 0, document, 1]
+PASS Point 56 [foreignComment, 2], range 24 [document, 0, document, 2]
+PASS Point 56 [foreignComment, 2], range 25 [comment, 2, comment, 3]
+PASS Point 56 [foreignComment, 2], range 26 [testDiv, 0, comment, 5]
+PASS Point 56 [foreignComment, 2], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 56 [foreignComment, 2], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 56 [foreignComment, 2], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 56 [foreignComment, 2], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 56 [foreignComment, 2], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 56 [foreignComment, 2], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 56 [foreignComment, 2], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 56 [foreignComment, 2], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 56 [foreignComment, 2], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 56 [foreignComment, 2], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 56 [foreignComment, 2], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 56 [foreignComment, 2], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 56 [foreignComment, 2], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 56 [foreignComment, 2], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 56 [foreignComment, 2], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 56 [foreignComment, 2], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 56 [foreignComment, 2], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 56 [foreignComment, 2], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 56 [foreignComment, 2], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 56 [foreignComment, 2], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 56 [foreignComment, 2], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 56 [foreignComment, 2], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 56 [foreignComment, 2], range 49 [document, 1, document, 2]
+PASS Point 56 [foreignComment, 2], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 56 [foreignComment, 2], range 51 [paras[3], 1, comment, 8]
+PASS Point 56 [foreignComment, 2], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 56 [foreignComment, 2], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 56 [foreignComment, 2], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 56 [foreignComment, 2], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 56 [foreignComment, 2], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 56 [foreignComment, 2], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 56 [foreignComment, 2], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 56 [foreignComment, 2], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 57 [foreignTextNode, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 57 [foreignTextNode, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 57 [foreignTextNode, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 57 [foreignTextNode, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 57 [foreignTextNode, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 57 [foreignTextNode, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 57 [foreignTextNode, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 57 [foreignTextNode, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 57 [foreignTextNode, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 57 [foreignTextNode, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 57 [foreignTextNode, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 57 [foreignTextNode, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 57 [foreignTextNode, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 57 [foreignTextNode, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 57 [foreignTextNode, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 57 [foreignTextNode, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 57 [foreignTextNode, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 57 [foreignTextNode, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 57 [foreignTextNode, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 57 [foreignTextNode, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 57 [foreignTextNode, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 57 [foreignTextNode, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 57 [foreignTextNode, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 57 [foreignTextNode, 0], range 23 [document, 0, document, 1]
+PASS Point 57 [foreignTextNode, 0], range 24 [document, 0, document, 2]
+PASS Point 57 [foreignTextNode, 0], range 25 [comment, 2, comment, 3]
+PASS Point 57 [foreignTextNode, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 57 [foreignTextNode, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 57 [foreignTextNode, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 57 [foreignTextNode, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 57 [foreignTextNode, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 57 [foreignTextNode, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 57 [foreignTextNode, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 57 [foreignTextNode, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 57 [foreignTextNode, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 57 [foreignTextNode, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 57 [foreignTextNode, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 57 [foreignTextNode, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 57 [foreignTextNode, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 57 [foreignTextNode, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 57 [foreignTextNode, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 57 [foreignTextNode, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 57 [foreignTextNode, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 57 [foreignTextNode, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 57 [foreignTextNode, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 57 [foreignTextNode, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 57 [foreignTextNode, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 57 [foreignTextNode, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 57 [foreignTextNode, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 57 [foreignTextNode, 0], range 49 [document, 1, document, 2]
+PASS Point 57 [foreignTextNode, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 57 [foreignTextNode, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 57 [foreignTextNode, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 57 [foreignTextNode, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 57 [foreignTextNode, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 57 [foreignTextNode, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 57 [foreignTextNode, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 57 [foreignTextNode, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 57 [foreignTextNode, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 57 [foreignTextNode, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 58 [foreignTextNode, 36], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 58 [foreignTextNode, 36], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 58 [foreignTextNode, 36], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 58 [foreignTextNode, 36], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 58 [foreignTextNode, 36], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 58 [foreignTextNode, 36], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 58 [foreignTextNode, 36], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 58 [foreignTextNode, 36], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 58 [foreignTextNode, 36], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 58 [foreignTextNode, 36], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 58 [foreignTextNode, 36], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 58 [foreignTextNode, 36], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 58 [foreignTextNode, 36], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 58 [foreignTextNode, 36], range 13 [document.head, 1, document.head, 1]
+PASS Point 58 [foreignTextNode, 36], range 14 [document.body, 4, document.body, 5]
+PASS Point 58 [foreignTextNode, 36], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 58 [foreignTextNode, 36], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 58 [foreignTextNode, 36], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 58 [foreignTextNode, 36], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 58 [foreignTextNode, 36], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 58 [foreignTextNode, 36], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 58 [foreignTextNode, 36], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 58 [foreignTextNode, 36], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 58 [foreignTextNode, 36], range 23 [document, 0, document, 1]
+PASS Point 58 [foreignTextNode, 36], range 24 [document, 0, document, 2]
+PASS Point 58 [foreignTextNode, 36], range 25 [comment, 2, comment, 3]
+PASS Point 58 [foreignTextNode, 36], range 26 [testDiv, 0, comment, 5]
+PASS Point 58 [foreignTextNode, 36], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 58 [foreignTextNode, 36], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 58 [foreignTextNode, 36], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 58 [foreignTextNode, 36], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 58 [foreignTextNode, 36], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 58 [foreignTextNode, 36], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 58 [foreignTextNode, 36], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 58 [foreignTextNode, 36], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 58 [foreignTextNode, 36], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 58 [foreignTextNode, 36], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 58 [foreignTextNode, 36], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 58 [foreignTextNode, 36], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 58 [foreignTextNode, 36], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 58 [foreignTextNode, 36], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 58 [foreignTextNode, 36], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 58 [foreignTextNode, 36], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 58 [foreignTextNode, 36], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 58 [foreignTextNode, 36], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 58 [foreignTextNode, 36], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 58 [foreignTextNode, 36], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 58 [foreignTextNode, 36], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 58 [foreignTextNode, 36], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 58 [foreignTextNode, 36], range 49 [document, 1, document, 2]
+PASS Point 58 [foreignTextNode, 36], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 58 [foreignTextNode, 36], range 51 [paras[3], 1, comment, 8]
+PASS Point 58 [foreignTextNode, 36], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 58 [foreignTextNode, 36], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 58 [foreignTextNode, 36], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 58 [foreignTextNode, 36], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 58 [foreignTextNode, 36], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 58 [foreignTextNode, 36], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 58 [foreignTextNode, 36], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 58 [foreignTextNode, 36], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 59 [xmlDoc, -1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 59 [xmlDoc, -1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 59 [xmlDoc, -1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 59 [xmlDoc, -1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 59 [xmlDoc, -1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 59 [xmlDoc, -1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 59 [xmlDoc, -1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 59 [xmlDoc, -1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 59 [xmlDoc, -1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 59 [xmlDoc, -1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 59 [xmlDoc, -1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 59 [xmlDoc, -1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 59 [xmlDoc, -1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 59 [xmlDoc, -1], range 13 [document.head, 1, document.head, 1]
+PASS Point 59 [xmlDoc, -1], range 14 [document.body, 4, document.body, 5]
+PASS Point 59 [xmlDoc, -1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 59 [xmlDoc, -1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 59 [xmlDoc, -1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 59 [xmlDoc, -1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 59 [xmlDoc, -1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 59 [xmlDoc, -1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 59 [xmlDoc, -1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 59 [xmlDoc, -1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 59 [xmlDoc, -1], range 23 [document, 0, document, 1]
+PASS Point 59 [xmlDoc, -1], range 24 [document, 0, document, 2]
+PASS Point 59 [xmlDoc, -1], range 25 [comment, 2, comment, 3]
+PASS Point 59 [xmlDoc, -1], range 26 [testDiv, 0, comment, 5]
+PASS Point 59 [xmlDoc, -1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 59 [xmlDoc, -1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 59 [xmlDoc, -1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 59 [xmlDoc, -1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 59 [xmlDoc, -1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 59 [xmlDoc, -1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 59 [xmlDoc, -1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 59 [xmlDoc, -1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 59 [xmlDoc, -1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 59 [xmlDoc, -1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 59 [xmlDoc, -1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 59 [xmlDoc, -1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 59 [xmlDoc, -1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 59 [xmlDoc, -1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 59 [xmlDoc, -1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 59 [xmlDoc, -1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 59 [xmlDoc, -1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 59 [xmlDoc, -1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 59 [xmlDoc, -1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 59 [xmlDoc, -1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 59 [xmlDoc, -1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 59 [xmlDoc, -1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 59 [xmlDoc, -1], range 49 [document, 1, document, 2]
+PASS Point 59 [xmlDoc, -1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 59 [xmlDoc, -1], range 51 [paras[3], 1, comment, 8]
+PASS Point 59 [xmlDoc, -1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 59 [xmlDoc, -1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 59 [xmlDoc, -1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 59 [xmlDoc, -1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 59 [xmlDoc, -1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 59 [xmlDoc, -1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 59 [xmlDoc, -1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 59 [xmlDoc, -1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 60 [xmlDoc, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 60 [xmlDoc, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 60 [xmlDoc, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 60 [xmlDoc, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 60 [xmlDoc, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 60 [xmlDoc, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 60 [xmlDoc, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 60 [xmlDoc, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 60 [xmlDoc, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 60 [xmlDoc, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 60 [xmlDoc, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 60 [xmlDoc, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 60 [xmlDoc, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 60 [xmlDoc, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 60 [xmlDoc, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 60 [xmlDoc, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 60 [xmlDoc, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 60 [xmlDoc, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 60 [xmlDoc, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 60 [xmlDoc, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 60 [xmlDoc, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 60 [xmlDoc, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 60 [xmlDoc, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 60 [xmlDoc, 0], range 23 [document, 0, document, 1]
+PASS Point 60 [xmlDoc, 0], range 24 [document, 0, document, 2]
+PASS Point 60 [xmlDoc, 0], range 25 [comment, 2, comment, 3]
+PASS Point 60 [xmlDoc, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 60 [xmlDoc, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 60 [xmlDoc, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 60 [xmlDoc, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 60 [xmlDoc, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 60 [xmlDoc, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 60 [xmlDoc, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 60 [xmlDoc, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 60 [xmlDoc, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 60 [xmlDoc, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 60 [xmlDoc, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 60 [xmlDoc, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 60 [xmlDoc, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 60 [xmlDoc, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 60 [xmlDoc, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 60 [xmlDoc, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 60 [xmlDoc, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 60 [xmlDoc, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 60 [xmlDoc, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 60 [xmlDoc, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 60 [xmlDoc, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 60 [xmlDoc, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 60 [xmlDoc, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 60 [xmlDoc, 0], range 49 [document, 1, document, 2]
+PASS Point 60 [xmlDoc, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 60 [xmlDoc, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 60 [xmlDoc, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 60 [xmlDoc, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 60 [xmlDoc, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 60 [xmlDoc, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 60 [xmlDoc, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 60 [xmlDoc, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 60 [xmlDoc, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 60 [xmlDoc, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 61 [xmlDoc, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 61 [xmlDoc, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 61 [xmlDoc, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 61 [xmlDoc, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 61 [xmlDoc, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 61 [xmlDoc, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 61 [xmlDoc, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 61 [xmlDoc, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 61 [xmlDoc, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 61 [xmlDoc, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 61 [xmlDoc, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 61 [xmlDoc, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 61 [xmlDoc, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 61 [xmlDoc, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 61 [xmlDoc, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 61 [xmlDoc, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 61 [xmlDoc, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 61 [xmlDoc, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 61 [xmlDoc, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 61 [xmlDoc, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 61 [xmlDoc, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 61 [xmlDoc, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 61 [xmlDoc, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 61 [xmlDoc, 1], range 23 [document, 0, document, 1]
+PASS Point 61 [xmlDoc, 1], range 24 [document, 0, document, 2]
+PASS Point 61 [xmlDoc, 1], range 25 [comment, 2, comment, 3]
+PASS Point 61 [xmlDoc, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 61 [xmlDoc, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 61 [xmlDoc, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 61 [xmlDoc, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 61 [xmlDoc, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 61 [xmlDoc, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 61 [xmlDoc, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 61 [xmlDoc, 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 61 [xmlDoc, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 61 [xmlDoc, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 61 [xmlDoc, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 61 [xmlDoc, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 61 [xmlDoc, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 61 [xmlDoc, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 61 [xmlDoc, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 61 [xmlDoc, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 61 [xmlDoc, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 61 [xmlDoc, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 61 [xmlDoc, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 61 [xmlDoc, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 61 [xmlDoc, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 61 [xmlDoc, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 61 [xmlDoc, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 61 [xmlDoc, 1], range 49 [document, 1, document, 2]
+PASS Point 61 [xmlDoc, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 61 [xmlDoc, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 61 [xmlDoc, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 61 [xmlDoc, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 61 [xmlDoc, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 61 [xmlDoc, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 61 [xmlDoc, 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 61 [xmlDoc, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 61 [xmlDoc, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 61 [xmlDoc, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 62 [xmlDoc, 5], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 62 [xmlDoc, 5], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 62 [xmlDoc, 5], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 62 [xmlDoc, 5], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 62 [xmlDoc, 5], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 62 [xmlDoc, 5], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 62 [xmlDoc, 5], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 62 [xmlDoc, 5], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 62 [xmlDoc, 5], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 62 [xmlDoc, 5], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 62 [xmlDoc, 5], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 62 [xmlDoc, 5], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 62 [xmlDoc, 5], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 62 [xmlDoc, 5], range 13 [document.head, 1, document.head, 1]
+PASS Point 62 [xmlDoc, 5], range 14 [document.body, 4, document.body, 5]
+PASS Point 62 [xmlDoc, 5], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 62 [xmlDoc, 5], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 62 [xmlDoc, 5], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 62 [xmlDoc, 5], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 62 [xmlDoc, 5], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 62 [xmlDoc, 5], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 62 [xmlDoc, 5], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 62 [xmlDoc, 5], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 62 [xmlDoc, 5], range 23 [document, 0, document, 1]
+PASS Point 62 [xmlDoc, 5], range 24 [document, 0, document, 2]
+PASS Point 62 [xmlDoc, 5], range 25 [comment, 2, comment, 3]
+PASS Point 62 [xmlDoc, 5], range 26 [testDiv, 0, comment, 5]
+PASS Point 62 [xmlDoc, 5], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 62 [xmlDoc, 5], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 62 [xmlDoc, 5], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 62 [xmlDoc, 5], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 62 [xmlDoc, 5], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 62 [xmlDoc, 5], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 62 [xmlDoc, 5], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 62 [xmlDoc, 5], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 62 [xmlDoc, 5], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 62 [xmlDoc, 5], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 62 [xmlDoc, 5], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 62 [xmlDoc, 5], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 62 [xmlDoc, 5], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 62 [xmlDoc, 5], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 62 [xmlDoc, 5], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 62 [xmlDoc, 5], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 62 [xmlDoc, 5], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 62 [xmlDoc, 5], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 62 [xmlDoc, 5], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 62 [xmlDoc, 5], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 62 [xmlDoc, 5], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 62 [xmlDoc, 5], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 62 [xmlDoc, 5], range 49 [document, 1, document, 2]
+PASS Point 62 [xmlDoc, 5], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 62 [xmlDoc, 5], range 51 [paras[3], 1, comment, 8]
+PASS Point 62 [xmlDoc, 5], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 62 [xmlDoc, 5], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 62 [xmlDoc, 5], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 62 [xmlDoc, 5], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 62 [xmlDoc, 5], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 62 [xmlDoc, 5], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 62 [xmlDoc, 5], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 62 [xmlDoc, 5], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 63 [xmlComment, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 63 [xmlComment, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 63 [xmlComment, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 63 [xmlComment, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 63 [xmlComment, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 63 [xmlComment, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 63 [xmlComment, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 63 [xmlComment, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 63 [xmlComment, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 63 [xmlComment, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 63 [xmlComment, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 63 [xmlComment, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 63 [xmlComment, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 63 [xmlComment, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 63 [xmlComment, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 63 [xmlComment, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 63 [xmlComment, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 63 [xmlComment, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 63 [xmlComment, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 63 [xmlComment, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 63 [xmlComment, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 63 [xmlComment, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 63 [xmlComment, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 63 [xmlComment, 0], range 23 [document, 0, document, 1]
+PASS Point 63 [xmlComment, 0], range 24 [document, 0, document, 2]
+PASS Point 63 [xmlComment, 0], range 25 [comment, 2, comment, 3]
+PASS Point 63 [xmlComment, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 63 [xmlComment, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 63 [xmlComment, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 63 [xmlComment, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 63 [xmlComment, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 63 [xmlComment, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 63 [xmlComment, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 63 [xmlComment, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 63 [xmlComment, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 63 [xmlComment, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 63 [xmlComment, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 63 [xmlComment, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 63 [xmlComment, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 63 [xmlComment, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 63 [xmlComment, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 63 [xmlComment, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 63 [xmlComment, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 63 [xmlComment, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 63 [xmlComment, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 63 [xmlComment, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 63 [xmlComment, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 63 [xmlComment, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 63 [xmlComment, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 63 [xmlComment, 0], range 49 [document, 1, document, 2]
+PASS Point 63 [xmlComment, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 63 [xmlComment, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 63 [xmlComment, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 63 [xmlComment, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 63 [xmlComment, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 63 [xmlComment, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 63 [xmlComment, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 63 [xmlComment, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 63 [xmlComment, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 63 [xmlComment, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 64 [xmlComment, 4], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 64 [xmlComment, 4], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 64 [xmlComment, 4], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 64 [xmlComment, 4], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 64 [xmlComment, 4], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 64 [xmlComment, 4], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 64 [xmlComment, 4], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 64 [xmlComment, 4], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 64 [xmlComment, 4], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 64 [xmlComment, 4], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 64 [xmlComment, 4], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 64 [xmlComment, 4], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 64 [xmlComment, 4], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 64 [xmlComment, 4], range 13 [document.head, 1, document.head, 1]
+PASS Point 64 [xmlComment, 4], range 14 [document.body, 4, document.body, 5]
+PASS Point 64 [xmlComment, 4], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 64 [xmlComment, 4], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 64 [xmlComment, 4], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 64 [xmlComment, 4], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 64 [xmlComment, 4], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 64 [xmlComment, 4], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 64 [xmlComment, 4], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 64 [xmlComment, 4], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 64 [xmlComment, 4], range 23 [document, 0, document, 1]
+PASS Point 64 [xmlComment, 4], range 24 [document, 0, document, 2]
+PASS Point 64 [xmlComment, 4], range 25 [comment, 2, comment, 3]
+PASS Point 64 [xmlComment, 4], range 26 [testDiv, 0, comment, 5]
+PASS Point 64 [xmlComment, 4], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 64 [xmlComment, 4], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 64 [xmlComment, 4], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 64 [xmlComment, 4], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 64 [xmlComment, 4], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 64 [xmlComment, 4], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 64 [xmlComment, 4], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 64 [xmlComment, 4], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 64 [xmlComment, 4], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 64 [xmlComment, 4], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 64 [xmlComment, 4], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 64 [xmlComment, 4], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 64 [xmlComment, 4], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 64 [xmlComment, 4], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 64 [xmlComment, 4], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 64 [xmlComment, 4], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 64 [xmlComment, 4], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 64 [xmlComment, 4], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 64 [xmlComment, 4], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 64 [xmlComment, 4], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 64 [xmlComment, 4], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 64 [xmlComment, 4], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 64 [xmlComment, 4], range 49 [document, 1, document, 2]
+PASS Point 64 [xmlComment, 4], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 64 [xmlComment, 4], range 51 [paras[3], 1, comment, 8]
+PASS Point 64 [xmlComment, 4], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 64 [xmlComment, 4], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 64 [xmlComment, 4], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 64 [xmlComment, 4], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 64 [xmlComment, 4], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 64 [xmlComment, 4], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 64 [xmlComment, 4], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 64 [xmlComment, 4], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 65 [processingInstruction, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 65 [processingInstruction, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 65 [processingInstruction, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 65 [processingInstruction, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 65 [processingInstruction, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 65 [processingInstruction, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 65 [processingInstruction, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 65 [processingInstruction, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 65 [processingInstruction, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 65 [processingInstruction, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 65 [processingInstruction, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 65 [processingInstruction, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 65 [processingInstruction, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 65 [processingInstruction, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 65 [processingInstruction, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 65 [processingInstruction, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 65 [processingInstruction, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 65 [processingInstruction, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 65 [processingInstruction, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 65 [processingInstruction, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 65 [processingInstruction, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 65 [processingInstruction, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 65 [processingInstruction, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 65 [processingInstruction, 0], range 23 [document, 0, document, 1]
+PASS Point 65 [processingInstruction, 0], range 24 [document, 0, document, 2]
+PASS Point 65 [processingInstruction, 0], range 25 [comment, 2, comment, 3]
+PASS Point 65 [processingInstruction, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 65 [processingInstruction, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 65 [processingInstruction, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 65 [processingInstruction, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 65 [processingInstruction, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 65 [processingInstruction, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 65 [processingInstruction, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 65 [processingInstruction, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 65 [processingInstruction, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 65 [processingInstruction, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 65 [processingInstruction, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 65 [processingInstruction, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 65 [processingInstruction, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 65 [processingInstruction, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 65 [processingInstruction, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 65 [processingInstruction, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 65 [processingInstruction, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 65 [processingInstruction, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 65 [processingInstruction, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 65 [processingInstruction, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 65 [processingInstruction, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 65 [processingInstruction, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 65 [processingInstruction, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 65 [processingInstruction, 0], range 49 [document, 1, document, 2]
+PASS Point 65 [processingInstruction, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 65 [processingInstruction, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 65 [processingInstruction, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 65 [processingInstruction, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 65 [processingInstruction, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 65 [processingInstruction, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 65 [processingInstruction, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 65 [processingInstruction, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 65 [processingInstruction, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 65 [processingInstruction, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 66 [processingInstruction, 5], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 66 [processingInstruction, 5], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 66 [processingInstruction, 5], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 66 [processingInstruction, 5], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 66 [processingInstruction, 5], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 66 [processingInstruction, 5], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 66 [processingInstruction, 5], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 66 [processingInstruction, 5], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 66 [processingInstruction, 5], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 66 [processingInstruction, 5], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 66 [processingInstruction, 5], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 66 [processingInstruction, 5], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 66 [processingInstruction, 5], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 66 [processingInstruction, 5], range 13 [document.head, 1, document.head, 1]
+PASS Point 66 [processingInstruction, 5], range 14 [document.body, 4, document.body, 5]
+PASS Point 66 [processingInstruction, 5], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 66 [processingInstruction, 5], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 66 [processingInstruction, 5], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 66 [processingInstruction, 5], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 66 [processingInstruction, 5], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 66 [processingInstruction, 5], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 66 [processingInstruction, 5], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 66 [processingInstruction, 5], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 66 [processingInstruction, 5], range 23 [document, 0, document, 1]
+PASS Point 66 [processingInstruction, 5], range 24 [document, 0, document, 2]
+PASS Point 66 [processingInstruction, 5], range 25 [comment, 2, comment, 3]
+PASS Point 66 [processingInstruction, 5], range 26 [testDiv, 0, comment, 5]
+PASS Point 66 [processingInstruction, 5], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 66 [processingInstruction, 5], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 66 [processingInstruction, 5], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 66 [processingInstruction, 5], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 66 [processingInstruction, 5], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 66 [processingInstruction, 5], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 66 [processingInstruction, 5], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 66 [processingInstruction, 5], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 66 [processingInstruction, 5], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 66 [processingInstruction, 5], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 66 [processingInstruction, 5], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 66 [processingInstruction, 5], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 66 [processingInstruction, 5], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 66 [processingInstruction, 5], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 66 [processingInstruction, 5], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 66 [processingInstruction, 5], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 66 [processingInstruction, 5], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 66 [processingInstruction, 5], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 66 [processingInstruction, 5], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 66 [processingInstruction, 5], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 66 [processingInstruction, 5], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 66 [processingInstruction, 5], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 66 [processingInstruction, 5], range 49 [document, 1, document, 2]
+PASS Point 66 [processingInstruction, 5], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 66 [processingInstruction, 5], range 51 [paras[3], 1, comment, 8]
+PASS Point 66 [processingInstruction, 5], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 66 [processingInstruction, 5], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 66 [processingInstruction, 5], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 66 [processingInstruction, 5], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 66 [processingInstruction, 5], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 66 [processingInstruction, 5], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 66 [processingInstruction, 5], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 66 [processingInstruction, 5], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 67 [processingInstruction, 9], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 67 [processingInstruction, 9], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 67 [processingInstruction, 9], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 67 [processingInstruction, 9], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 67 [processingInstruction, 9], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 67 [processingInstruction, 9], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 67 [processingInstruction, 9], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 67 [processingInstruction, 9], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 67 [processingInstruction, 9], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 67 [processingInstruction, 9], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 67 [processingInstruction, 9], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 67 [processingInstruction, 9], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 67 [processingInstruction, 9], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 67 [processingInstruction, 9], range 13 [document.head, 1, document.head, 1]
+PASS Point 67 [processingInstruction, 9], range 14 [document.body, 4, document.body, 5]
+PASS Point 67 [processingInstruction, 9], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 67 [processingInstruction, 9], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 67 [processingInstruction, 9], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 67 [processingInstruction, 9], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 67 [processingInstruction, 9], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 67 [processingInstruction, 9], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 67 [processingInstruction, 9], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 67 [processingInstruction, 9], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 67 [processingInstruction, 9], range 23 [document, 0, document, 1]
+PASS Point 67 [processingInstruction, 9], range 24 [document, 0, document, 2]
+PASS Point 67 [processingInstruction, 9], range 25 [comment, 2, comment, 3]
+PASS Point 67 [processingInstruction, 9], range 26 [testDiv, 0, comment, 5]
+PASS Point 67 [processingInstruction, 9], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 67 [processingInstruction, 9], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 67 [processingInstruction, 9], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 67 [processingInstruction, 9], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 67 [processingInstruction, 9], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 67 [processingInstruction, 9], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 67 [processingInstruction, 9], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 67 [processingInstruction, 9], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 67 [processingInstruction, 9], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 67 [processingInstruction, 9], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 67 [processingInstruction, 9], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 67 [processingInstruction, 9], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 67 [processingInstruction, 9], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 67 [processingInstruction, 9], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 67 [processingInstruction, 9], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 67 [processingInstruction, 9], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 67 [processingInstruction, 9], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 67 [processingInstruction, 9], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 67 [processingInstruction, 9], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 67 [processingInstruction, 9], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 67 [processingInstruction, 9], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 67 [processingInstruction, 9], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 67 [processingInstruction, 9], range 49 [document, 1, document, 2]
+PASS Point 67 [processingInstruction, 9], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 67 [processingInstruction, 9], range 51 [paras[3], 1, comment, 8]
+PASS Point 67 [processingInstruction, 9], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 67 [processingInstruction, 9], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 67 [processingInstruction, 9], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 67 [processingInstruction, 9], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 67 [processingInstruction, 9], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 67 [processingInstruction, 9], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 67 [processingInstruction, 9], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 67 [processingInstruction, 9], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 68 [detachedTextNode, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 68 [detachedTextNode, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 68 [detachedTextNode, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 68 [detachedTextNode, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 68 [detachedTextNode, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 68 [detachedTextNode, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 68 [detachedTextNode, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 68 [detachedTextNode, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 68 [detachedTextNode, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 68 [detachedTextNode, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 68 [detachedTextNode, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 68 [detachedTextNode, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 68 [detachedTextNode, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 68 [detachedTextNode, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 68 [detachedTextNode, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 68 [detachedTextNode, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 68 [detachedTextNode, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 68 [detachedTextNode, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 68 [detachedTextNode, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 68 [detachedTextNode, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 68 [detachedTextNode, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 68 [detachedTextNode, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 68 [detachedTextNode, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 68 [detachedTextNode, 0], range 23 [document, 0, document, 1]
+PASS Point 68 [detachedTextNode, 0], range 24 [document, 0, document, 2]
+PASS Point 68 [detachedTextNode, 0], range 25 [comment, 2, comment, 3]
+PASS Point 68 [detachedTextNode, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 68 [detachedTextNode, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 68 [detachedTextNode, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 68 [detachedTextNode, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 68 [detachedTextNode, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 68 [detachedTextNode, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 68 [detachedTextNode, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 68 [detachedTextNode, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 68 [detachedTextNode, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 68 [detachedTextNode, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 68 [detachedTextNode, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 68 [detachedTextNode, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 68 [detachedTextNode, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 68 [detachedTextNode, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 68 [detachedTextNode, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 68 [detachedTextNode, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 68 [detachedTextNode, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 68 [detachedTextNode, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 68 [detachedTextNode, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 68 [detachedTextNode, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 68 [detachedTextNode, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 68 [detachedTextNode, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 68 [detachedTextNode, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 68 [detachedTextNode, 0], range 49 [document, 1, document, 2]
+PASS Point 68 [detachedTextNode, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 68 [detachedTextNode, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 68 [detachedTextNode, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 68 [detachedTextNode, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 68 [detachedTextNode, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 68 [detachedTextNode, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 68 [detachedTextNode, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 68 [detachedTextNode, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 68 [detachedTextNode, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 68 [detachedTextNode, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 69 [detachedTextNode, 8], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 69 [detachedTextNode, 8], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 69 [detachedTextNode, 8], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 69 [detachedTextNode, 8], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 69 [detachedTextNode, 8], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 69 [detachedTextNode, 8], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 69 [detachedTextNode, 8], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 69 [detachedTextNode, 8], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 69 [detachedTextNode, 8], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 69 [detachedTextNode, 8], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 69 [detachedTextNode, 8], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 69 [detachedTextNode, 8], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 69 [detachedTextNode, 8], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 69 [detachedTextNode, 8], range 13 [document.head, 1, document.head, 1]
+PASS Point 69 [detachedTextNode, 8], range 14 [document.body, 4, document.body, 5]
+PASS Point 69 [detachedTextNode, 8], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 69 [detachedTextNode, 8], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 69 [detachedTextNode, 8], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 69 [detachedTextNode, 8], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 69 [detachedTextNode, 8], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 69 [detachedTextNode, 8], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 69 [detachedTextNode, 8], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 69 [detachedTextNode, 8], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 69 [detachedTextNode, 8], range 23 [document, 0, document, 1]
+PASS Point 69 [detachedTextNode, 8], range 24 [document, 0, document, 2]
+PASS Point 69 [detachedTextNode, 8], range 25 [comment, 2, comment, 3]
+PASS Point 69 [detachedTextNode, 8], range 26 [testDiv, 0, comment, 5]
+PASS Point 69 [detachedTextNode, 8], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 69 [detachedTextNode, 8], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 69 [detachedTextNode, 8], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 69 [detachedTextNode, 8], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 69 [detachedTextNode, 8], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 69 [detachedTextNode, 8], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 69 [detachedTextNode, 8], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 69 [detachedTextNode, 8], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 69 [detachedTextNode, 8], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 69 [detachedTextNode, 8], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 69 [detachedTextNode, 8], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 69 [detachedTextNode, 8], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 69 [detachedTextNode, 8], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 69 [detachedTextNode, 8], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 69 [detachedTextNode, 8], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 69 [detachedTextNode, 8], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 69 [detachedTextNode, 8], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 69 [detachedTextNode, 8], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 69 [detachedTextNode, 8], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 69 [detachedTextNode, 8], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 69 [detachedTextNode, 8], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 69 [detachedTextNode, 8], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 69 [detachedTextNode, 8], range 49 [document, 1, document, 2]
+PASS Point 69 [detachedTextNode, 8], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 69 [detachedTextNode, 8], range 51 [paras[3], 1, comment, 8]
+PASS Point 69 [detachedTextNode, 8], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 69 [detachedTextNode, 8], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 69 [detachedTextNode, 8], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 69 [detachedTextNode, 8], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 69 [detachedTextNode, 8], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 69 [detachedTextNode, 8], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 69 [detachedTextNode, 8], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 69 [detachedTextNode, 8], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 70 [detachedForeignTextNode, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 70 [detachedForeignTextNode, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 70 [detachedForeignTextNode, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 70 [detachedForeignTextNode, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 70 [detachedForeignTextNode, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 70 [detachedForeignTextNode, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 70 [detachedForeignTextNode, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 70 [detachedForeignTextNode, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 70 [detachedForeignTextNode, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 70 [detachedForeignTextNode, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 23 [document, 0, document, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 24 [document, 0, document, 2]
+PASS Point 70 [detachedForeignTextNode, 0], range 25 [comment, 2, comment, 3]
+PASS Point 70 [detachedForeignTextNode, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 70 [detachedForeignTextNode, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 70 [detachedForeignTextNode, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 70 [detachedForeignTextNode, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 70 [detachedForeignTextNode, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 70 [detachedForeignTextNode, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 70 [detachedForeignTextNode, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 70 [detachedForeignTextNode, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 70 [detachedForeignTextNode, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 70 [detachedForeignTextNode, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 70 [detachedForeignTextNode, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 70 [detachedForeignTextNode, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 49 [document, 1, document, 2]
+PASS Point 70 [detachedForeignTextNode, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 70 [detachedForeignTextNode, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 70 [detachedForeignTextNode, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 70 [detachedForeignTextNode, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 70 [detachedForeignTextNode, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 70 [detachedForeignTextNode, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 70 [detachedForeignTextNode, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 71 [detachedForeignTextNode, 8], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 71 [detachedForeignTextNode, 8], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 71 [detachedForeignTextNode, 8], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 71 [detachedForeignTextNode, 8], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 71 [detachedForeignTextNode, 8], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 71 [detachedForeignTextNode, 8], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 71 [detachedForeignTextNode, 8], range 13 [document.head, 1, document.head, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 14 [document.body, 4, document.body, 5]
+PASS Point 71 [detachedForeignTextNode, 8], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 71 [detachedForeignTextNode, 8], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 71 [detachedForeignTextNode, 8], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 23 [document, 0, document, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 24 [document, 0, document, 2]
+PASS Point 71 [detachedForeignTextNode, 8], range 25 [comment, 2, comment, 3]
+PASS Point 71 [detachedForeignTextNode, 8], range 26 [testDiv, 0, comment, 5]
+PASS Point 71 [detachedForeignTextNode, 8], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 71 [detachedForeignTextNode, 8], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 71 [detachedForeignTextNode, 8], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 71 [detachedForeignTextNode, 8], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 71 [detachedForeignTextNode, 8], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 71 [detachedForeignTextNode, 8], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 71 [detachedForeignTextNode, 8], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 71 [detachedForeignTextNode, 8], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 71 [detachedForeignTextNode, 8], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 71 [detachedForeignTextNode, 8], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 71 [detachedForeignTextNode, 8], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 49 [document, 1, document, 2]
+PASS Point 71 [detachedForeignTextNode, 8], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 71 [detachedForeignTextNode, 8], range 51 [paras[3], 1, comment, 8]
+PASS Point 71 [detachedForeignTextNode, 8], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 71 [detachedForeignTextNode, 8], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 71 [detachedForeignTextNode, 8], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 71 [detachedForeignTextNode, 8], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 71 [detachedForeignTextNode, 8], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 72 [detachedXmlTextNode, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 72 [detachedXmlTextNode, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 72 [detachedXmlTextNode, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 72 [detachedXmlTextNode, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 72 [detachedXmlTextNode, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 72 [detachedXmlTextNode, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 72 [detachedXmlTextNode, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 72 [detachedXmlTextNode, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 72 [detachedXmlTextNode, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 72 [detachedXmlTextNode, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 23 [document, 0, document, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 24 [document, 0, document, 2]
+PASS Point 72 [detachedXmlTextNode, 0], range 25 [comment, 2, comment, 3]
+PASS Point 72 [detachedXmlTextNode, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 72 [detachedXmlTextNode, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 72 [detachedXmlTextNode, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 72 [detachedXmlTextNode, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 72 [detachedXmlTextNode, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 72 [detachedXmlTextNode, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 72 [detachedXmlTextNode, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 72 [detachedXmlTextNode, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 72 [detachedXmlTextNode, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 72 [detachedXmlTextNode, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 72 [detachedXmlTextNode, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 72 [detachedXmlTextNode, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 49 [document, 1, document, 2]
+PASS Point 72 [detachedXmlTextNode, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 72 [detachedXmlTextNode, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 72 [detachedXmlTextNode, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 72 [detachedXmlTextNode, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 72 [detachedXmlTextNode, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 72 [detachedXmlTextNode, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 72 [detachedXmlTextNode, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 73 [detachedXmlTextNode, 8], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 73 [detachedXmlTextNode, 8], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 73 [detachedXmlTextNode, 8], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 73 [detachedXmlTextNode, 8], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 73 [detachedXmlTextNode, 8], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 73 [detachedXmlTextNode, 8], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 73 [detachedXmlTextNode, 8], range 13 [document.head, 1, document.head, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 14 [document.body, 4, document.body, 5]
+PASS Point 73 [detachedXmlTextNode, 8], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 73 [detachedXmlTextNode, 8], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 73 [detachedXmlTextNode, 8], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 23 [document, 0, document, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 24 [document, 0, document, 2]
+PASS Point 73 [detachedXmlTextNode, 8], range 25 [comment, 2, comment, 3]
+PASS Point 73 [detachedXmlTextNode, 8], range 26 [testDiv, 0, comment, 5]
+PASS Point 73 [detachedXmlTextNode, 8], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 73 [detachedXmlTextNode, 8], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 73 [detachedXmlTextNode, 8], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 73 [detachedXmlTextNode, 8], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 73 [detachedXmlTextNode, 8], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 73 [detachedXmlTextNode, 8], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 73 [detachedXmlTextNode, 8], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 73 [detachedXmlTextNode, 8], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 73 [detachedXmlTextNode, 8], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 73 [detachedXmlTextNode, 8], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 73 [detachedXmlTextNode, 8], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 49 [document, 1, document, 2]
+PASS Point 73 [detachedXmlTextNode, 8], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 73 [detachedXmlTextNode, 8], range 51 [paras[3], 1, comment, 8]
+PASS Point 73 [detachedXmlTextNode, 8], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 73 [detachedXmlTextNode, 8], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 73 [detachedXmlTextNode, 8], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 73 [detachedXmlTextNode, 8], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 73 [detachedXmlTextNode, 8], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 74 [detachedProcessingInstruction, 12], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 74 [detachedProcessingInstruction, 12], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 74 [detachedProcessingInstruction, 12], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 74 [detachedProcessingInstruction, 12], range 13 [document.head, 1, document.head, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 14 [document.body, 4, document.body, 5]
+PASS Point 74 [detachedProcessingInstruction, 12], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 74 [detachedProcessingInstruction, 12], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 23 [document, 0, document, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 24 [document, 0, document, 2]
+PASS Point 74 [detachedProcessingInstruction, 12], range 25 [comment, 2, comment, 3]
+PASS Point 74 [detachedProcessingInstruction, 12], range 26 [testDiv, 0, comment, 5]
+PASS Point 74 [detachedProcessingInstruction, 12], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 74 [detachedProcessingInstruction, 12], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 74 [detachedProcessingInstruction, 12], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 74 [detachedProcessingInstruction, 12], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 74 [detachedProcessingInstruction, 12], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 74 [detachedProcessingInstruction, 12], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 74 [detachedProcessingInstruction, 12], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 49 [document, 1, document, 2]
+PASS Point 74 [detachedProcessingInstruction, 12], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 74 [detachedProcessingInstruction, 12], range 51 [paras[3], 1, comment, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 74 [detachedProcessingInstruction, 12], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 74 [detachedProcessingInstruction, 12], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 74 [detachedProcessingInstruction, 12], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 74 [detachedProcessingInstruction, 12], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 75 [detachedComment, 3], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 75 [detachedComment, 3], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 75 [detachedComment, 3], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 75 [detachedComment, 3], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 75 [detachedComment, 3], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 75 [detachedComment, 3], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 75 [detachedComment, 3], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 75 [detachedComment, 3], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 75 [detachedComment, 3], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 75 [detachedComment, 3], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 75 [detachedComment, 3], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 75 [detachedComment, 3], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 75 [detachedComment, 3], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 75 [detachedComment, 3], range 13 [document.head, 1, document.head, 1]
+PASS Point 75 [detachedComment, 3], range 14 [document.body, 4, document.body, 5]
+PASS Point 75 [detachedComment, 3], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 75 [detachedComment, 3], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 75 [detachedComment, 3], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 75 [detachedComment, 3], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 75 [detachedComment, 3], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 75 [detachedComment, 3], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 75 [detachedComment, 3], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 75 [detachedComment, 3], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 75 [detachedComment, 3], range 23 [document, 0, document, 1]
+PASS Point 75 [detachedComment, 3], range 24 [document, 0, document, 2]
+PASS Point 75 [detachedComment, 3], range 25 [comment, 2, comment, 3]
+PASS Point 75 [detachedComment, 3], range 26 [testDiv, 0, comment, 5]
+PASS Point 75 [detachedComment, 3], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 75 [detachedComment, 3], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 75 [detachedComment, 3], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 75 [detachedComment, 3], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 75 [detachedComment, 3], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 75 [detachedComment, 3], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 75 [detachedComment, 3], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 75 [detachedComment, 3], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 75 [detachedComment, 3], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 75 [detachedComment, 3], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 75 [detachedComment, 3], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 75 [detachedComment, 3], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 75 [detachedComment, 3], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 75 [detachedComment, 3], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 75 [detachedComment, 3], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 75 [detachedComment, 3], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 75 [detachedComment, 3], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 75 [detachedComment, 3], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 75 [detachedComment, 3], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 75 [detachedComment, 3], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 75 [detachedComment, 3], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 75 [detachedComment, 3], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 75 [detachedComment, 3], range 49 [document, 1, document, 2]
+PASS Point 75 [detachedComment, 3], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 75 [detachedComment, 3], range 51 [paras[3], 1, comment, 8]
+PASS Point 75 [detachedComment, 3], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 75 [detachedComment, 3], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 75 [detachedComment, 3], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 75 [detachedComment, 3], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 75 [detachedComment, 3], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 75 [detachedComment, 3], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 75 [detachedComment, 3], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 75 [detachedComment, 3], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 76 [detachedComment, 5], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 76 [detachedComment, 5], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 76 [detachedComment, 5], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 76 [detachedComment, 5], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 76 [detachedComment, 5], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 76 [detachedComment, 5], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 76 [detachedComment, 5], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 76 [detachedComment, 5], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 76 [detachedComment, 5], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 76 [detachedComment, 5], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 76 [detachedComment, 5], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 76 [detachedComment, 5], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 76 [detachedComment, 5], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 76 [detachedComment, 5], range 13 [document.head, 1, document.head, 1]
+PASS Point 76 [detachedComment, 5], range 14 [document.body, 4, document.body, 5]
+PASS Point 76 [detachedComment, 5], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 76 [detachedComment, 5], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 76 [detachedComment, 5], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 76 [detachedComment, 5], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 76 [detachedComment, 5], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 76 [detachedComment, 5], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 76 [detachedComment, 5], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 76 [detachedComment, 5], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 76 [detachedComment, 5], range 23 [document, 0, document, 1]
+PASS Point 76 [detachedComment, 5], range 24 [document, 0, document, 2]
+PASS Point 76 [detachedComment, 5], range 25 [comment, 2, comment, 3]
+PASS Point 76 [detachedComment, 5], range 26 [testDiv, 0, comment, 5]
+PASS Point 76 [detachedComment, 5], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 76 [detachedComment, 5], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 76 [detachedComment, 5], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 76 [detachedComment, 5], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 76 [detachedComment, 5], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 76 [detachedComment, 5], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 76 [detachedComment, 5], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 76 [detachedComment, 5], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 76 [detachedComment, 5], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 76 [detachedComment, 5], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 76 [detachedComment, 5], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 76 [detachedComment, 5], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 76 [detachedComment, 5], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 76 [detachedComment, 5], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 76 [detachedComment, 5], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 76 [detachedComment, 5], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 76 [detachedComment, 5], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 76 [detachedComment, 5], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 76 [detachedComment, 5], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 76 [detachedComment, 5], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 76 [detachedComment, 5], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 76 [detachedComment, 5], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 76 [detachedComment, 5], range 49 [document, 1, document, 2]
+PASS Point 76 [detachedComment, 5], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 76 [detachedComment, 5], range 51 [paras[3], 1, comment, 8]
+PASS Point 76 [detachedComment, 5], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 76 [detachedComment, 5], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 76 [detachedComment, 5], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 76 [detachedComment, 5], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 76 [detachedComment, 5], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 76 [detachedComment, 5], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 76 [detachedComment, 5], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 76 [detachedComment, 5], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 77 [detachedForeignComment, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 77 [detachedForeignComment, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 77 [detachedForeignComment, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 77 [detachedForeignComment, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 77 [detachedForeignComment, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 77 [detachedForeignComment, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 77 [detachedForeignComment, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 77 [detachedForeignComment, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 77 [detachedForeignComment, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 77 [detachedForeignComment, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 77 [detachedForeignComment, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 77 [detachedForeignComment, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 77 [detachedForeignComment, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 77 [detachedForeignComment, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 77 [detachedForeignComment, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 77 [detachedForeignComment, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 77 [detachedForeignComment, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 77 [detachedForeignComment, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 77 [detachedForeignComment, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 77 [detachedForeignComment, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 77 [detachedForeignComment, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 77 [detachedForeignComment, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 77 [detachedForeignComment, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 77 [detachedForeignComment, 0], range 23 [document, 0, document, 1]
+PASS Point 77 [detachedForeignComment, 0], range 24 [document, 0, document, 2]
+PASS Point 77 [detachedForeignComment, 0], range 25 [comment, 2, comment, 3]
+PASS Point 77 [detachedForeignComment, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 77 [detachedForeignComment, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 77 [detachedForeignComment, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 77 [detachedForeignComment, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 77 [detachedForeignComment, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 77 [detachedForeignComment, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 77 [detachedForeignComment, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 77 [detachedForeignComment, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 77 [detachedForeignComment, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 77 [detachedForeignComment, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 77 [detachedForeignComment, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 77 [detachedForeignComment, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 77 [detachedForeignComment, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 77 [detachedForeignComment, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 77 [detachedForeignComment, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 77 [detachedForeignComment, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 77 [detachedForeignComment, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 77 [detachedForeignComment, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 77 [detachedForeignComment, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 77 [detachedForeignComment, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 77 [detachedForeignComment, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 77 [detachedForeignComment, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 77 [detachedForeignComment, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 77 [detachedForeignComment, 0], range 49 [document, 1, document, 2]
+PASS Point 77 [detachedForeignComment, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 77 [detachedForeignComment, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 77 [detachedForeignComment, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 77 [detachedForeignComment, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 77 [detachedForeignComment, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 77 [detachedForeignComment, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 77 [detachedForeignComment, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 77 [detachedForeignComment, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 77 [detachedForeignComment, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 77 [detachedForeignComment, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 78 [detachedForeignComment, 4], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 78 [detachedForeignComment, 4], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 78 [detachedForeignComment, 4], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 78 [detachedForeignComment, 4], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 78 [detachedForeignComment, 4], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 78 [detachedForeignComment, 4], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 78 [detachedForeignComment, 4], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 78 [detachedForeignComment, 4], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 78 [detachedForeignComment, 4], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 78 [detachedForeignComment, 4], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 78 [detachedForeignComment, 4], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 78 [detachedForeignComment, 4], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 78 [detachedForeignComment, 4], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 78 [detachedForeignComment, 4], range 13 [document.head, 1, document.head, 1]
+PASS Point 78 [detachedForeignComment, 4], range 14 [document.body, 4, document.body, 5]
+PASS Point 78 [detachedForeignComment, 4], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 78 [detachedForeignComment, 4], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 78 [detachedForeignComment, 4], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 78 [detachedForeignComment, 4], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 78 [detachedForeignComment, 4], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 78 [detachedForeignComment, 4], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 78 [detachedForeignComment, 4], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 78 [detachedForeignComment, 4], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 78 [detachedForeignComment, 4], range 23 [document, 0, document, 1]
+PASS Point 78 [detachedForeignComment, 4], range 24 [document, 0, document, 2]
+PASS Point 78 [detachedForeignComment, 4], range 25 [comment, 2, comment, 3]
+PASS Point 78 [detachedForeignComment, 4], range 26 [testDiv, 0, comment, 5]
+PASS Point 78 [detachedForeignComment, 4], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 78 [detachedForeignComment, 4], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 78 [detachedForeignComment, 4], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 78 [detachedForeignComment, 4], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 78 [detachedForeignComment, 4], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 78 [detachedForeignComment, 4], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 78 [detachedForeignComment, 4], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 78 [detachedForeignComment, 4], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 78 [detachedForeignComment, 4], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 78 [detachedForeignComment, 4], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 78 [detachedForeignComment, 4], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 78 [detachedForeignComment, 4], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 78 [detachedForeignComment, 4], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 78 [detachedForeignComment, 4], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 78 [detachedForeignComment, 4], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 78 [detachedForeignComment, 4], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 78 [detachedForeignComment, 4], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 78 [detachedForeignComment, 4], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 78 [detachedForeignComment, 4], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 78 [detachedForeignComment, 4], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 78 [detachedForeignComment, 4], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 78 [detachedForeignComment, 4], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 78 [detachedForeignComment, 4], range 49 [document, 1, document, 2]
+PASS Point 78 [detachedForeignComment, 4], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 78 [detachedForeignComment, 4], range 51 [paras[3], 1, comment, 8]
+PASS Point 78 [detachedForeignComment, 4], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 78 [detachedForeignComment, 4], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 78 [detachedForeignComment, 4], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 78 [detachedForeignComment, 4], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 78 [detachedForeignComment, 4], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 78 [detachedForeignComment, 4], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 78 [detachedForeignComment, 4], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 78 [detachedForeignComment, 4], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 79 [detachedXmlComment, 2], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 79 [detachedXmlComment, 2], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 79 [detachedXmlComment, 2], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 79 [detachedXmlComment, 2], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 79 [detachedXmlComment, 2], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 79 [detachedXmlComment, 2], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 79 [detachedXmlComment, 2], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 79 [detachedXmlComment, 2], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 79 [detachedXmlComment, 2], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 79 [detachedXmlComment, 2], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 79 [detachedXmlComment, 2], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 79 [detachedXmlComment, 2], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 79 [detachedXmlComment, 2], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 79 [detachedXmlComment, 2], range 13 [document.head, 1, document.head, 1]
+PASS Point 79 [detachedXmlComment, 2], range 14 [document.body, 4, document.body, 5]
+PASS Point 79 [detachedXmlComment, 2], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 79 [detachedXmlComment, 2], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 79 [detachedXmlComment, 2], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 79 [detachedXmlComment, 2], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 79 [detachedXmlComment, 2], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 79 [detachedXmlComment, 2], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 79 [detachedXmlComment, 2], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 79 [detachedXmlComment, 2], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 79 [detachedXmlComment, 2], range 23 [document, 0, document, 1]
+PASS Point 79 [detachedXmlComment, 2], range 24 [document, 0, document, 2]
+PASS Point 79 [detachedXmlComment, 2], range 25 [comment, 2, comment, 3]
+PASS Point 79 [detachedXmlComment, 2], range 26 [testDiv, 0, comment, 5]
+PASS Point 79 [detachedXmlComment, 2], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 79 [detachedXmlComment, 2], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 79 [detachedXmlComment, 2], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 79 [detachedXmlComment, 2], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 79 [detachedXmlComment, 2], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 79 [detachedXmlComment, 2], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 79 [detachedXmlComment, 2], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 79 [detachedXmlComment, 2], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 79 [detachedXmlComment, 2], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 79 [detachedXmlComment, 2], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 79 [detachedXmlComment, 2], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 79 [detachedXmlComment, 2], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 79 [detachedXmlComment, 2], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 79 [detachedXmlComment, 2], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 79 [detachedXmlComment, 2], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 79 [detachedXmlComment, 2], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 79 [detachedXmlComment, 2], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 79 [detachedXmlComment, 2], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 79 [detachedXmlComment, 2], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 79 [detachedXmlComment, 2], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 79 [detachedXmlComment, 2], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 79 [detachedXmlComment, 2], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 79 [detachedXmlComment, 2], range 49 [document, 1, document, 2]
+PASS Point 79 [detachedXmlComment, 2], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 79 [detachedXmlComment, 2], range 51 [paras[3], 1, comment, 8]
+PASS Point 79 [detachedXmlComment, 2], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 79 [detachedXmlComment, 2], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 79 [detachedXmlComment, 2], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 79 [detachedXmlComment, 2], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 79 [detachedXmlComment, 2], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 79 [detachedXmlComment, 2], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 79 [detachedXmlComment, 2], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 79 [detachedXmlComment, 2], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 80 [docfrag, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 80 [docfrag, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 80 [docfrag, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 80 [docfrag, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 80 [docfrag, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 80 [docfrag, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 80 [docfrag, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 80 [docfrag, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 80 [docfrag, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 80 [docfrag, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 80 [docfrag, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 80 [docfrag, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 80 [docfrag, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 80 [docfrag, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 80 [docfrag, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 80 [docfrag, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 80 [docfrag, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 80 [docfrag, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 80 [docfrag, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 80 [docfrag, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 80 [docfrag, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 80 [docfrag, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 80 [docfrag, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 80 [docfrag, 0], range 23 [document, 0, document, 1]
+PASS Point 80 [docfrag, 0], range 24 [document, 0, document, 2]
+PASS Point 80 [docfrag, 0], range 25 [comment, 2, comment, 3]
+PASS Point 80 [docfrag, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 80 [docfrag, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 80 [docfrag, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 80 [docfrag, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 80 [docfrag, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 80 [docfrag, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 80 [docfrag, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 80 [docfrag, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 80 [docfrag, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 80 [docfrag, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 80 [docfrag, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 80 [docfrag, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 80 [docfrag, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 80 [docfrag, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 80 [docfrag, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 80 [docfrag, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 80 [docfrag, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 80 [docfrag, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 80 [docfrag, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 80 [docfrag, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 80 [docfrag, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 80 [docfrag, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 80 [docfrag, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 80 [docfrag, 0], range 49 [document, 1, document, 2]
+PASS Point 80 [docfrag, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 80 [docfrag, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 80 [docfrag, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 80 [docfrag, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 80 [docfrag, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 80 [docfrag, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 80 [docfrag, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 80 [docfrag, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 80 [docfrag, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 80 [docfrag, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 81 [foreignDocfrag, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 81 [foreignDocfrag, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 81 [foreignDocfrag, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 81 [foreignDocfrag, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 81 [foreignDocfrag, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 81 [foreignDocfrag, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 81 [foreignDocfrag, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 81 [foreignDocfrag, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 81 [foreignDocfrag, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 81 [foreignDocfrag, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 81 [foreignDocfrag, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 81 [foreignDocfrag, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 81 [foreignDocfrag, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 81 [foreignDocfrag, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 81 [foreignDocfrag, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 81 [foreignDocfrag, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 81 [foreignDocfrag, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 81 [foreignDocfrag, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 81 [foreignDocfrag, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 81 [foreignDocfrag, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 81 [foreignDocfrag, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 81 [foreignDocfrag, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 81 [foreignDocfrag, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 81 [foreignDocfrag, 0], range 23 [document, 0, document, 1]
+PASS Point 81 [foreignDocfrag, 0], range 24 [document, 0, document, 2]
+PASS Point 81 [foreignDocfrag, 0], range 25 [comment, 2, comment, 3]
+PASS Point 81 [foreignDocfrag, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 81 [foreignDocfrag, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 81 [foreignDocfrag, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 81 [foreignDocfrag, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 81 [foreignDocfrag, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 81 [foreignDocfrag, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 81 [foreignDocfrag, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 81 [foreignDocfrag, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 81 [foreignDocfrag, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 81 [foreignDocfrag, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 81 [foreignDocfrag, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 81 [foreignDocfrag, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 81 [foreignDocfrag, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 81 [foreignDocfrag, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 81 [foreignDocfrag, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 81 [foreignDocfrag, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 81 [foreignDocfrag, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 81 [foreignDocfrag, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 81 [foreignDocfrag, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 81 [foreignDocfrag, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 81 [foreignDocfrag, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 81 [foreignDocfrag, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 81 [foreignDocfrag, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 81 [foreignDocfrag, 0], range 49 [document, 1, document, 2]
+PASS Point 81 [foreignDocfrag, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 81 [foreignDocfrag, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 81 [foreignDocfrag, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 81 [foreignDocfrag, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 81 [foreignDocfrag, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 81 [foreignDocfrag, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 81 [foreignDocfrag, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 81 [foreignDocfrag, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 81 [foreignDocfrag, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 81 [foreignDocfrag, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 82 [xmlDocfrag, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 82 [xmlDocfrag, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 82 [xmlDocfrag, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 82 [xmlDocfrag, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 82 [xmlDocfrag, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 82 [xmlDocfrag, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 82 [xmlDocfrag, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 82 [xmlDocfrag, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 82 [xmlDocfrag, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 82 [xmlDocfrag, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 82 [xmlDocfrag, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 82 [xmlDocfrag, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 82 [xmlDocfrag, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 82 [xmlDocfrag, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 82 [xmlDocfrag, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 82 [xmlDocfrag, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 82 [xmlDocfrag, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 82 [xmlDocfrag, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 82 [xmlDocfrag, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 82 [xmlDocfrag, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 82 [xmlDocfrag, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 82 [xmlDocfrag, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 82 [xmlDocfrag, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 82 [xmlDocfrag, 0], range 23 [document, 0, document, 1]
+PASS Point 82 [xmlDocfrag, 0], range 24 [document, 0, document, 2]
+PASS Point 82 [xmlDocfrag, 0], range 25 [comment, 2, comment, 3]
+PASS Point 82 [xmlDocfrag, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 82 [xmlDocfrag, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 82 [xmlDocfrag, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 82 [xmlDocfrag, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 82 [xmlDocfrag, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 82 [xmlDocfrag, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 82 [xmlDocfrag, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 82 [xmlDocfrag, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 82 [xmlDocfrag, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 82 [xmlDocfrag, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 82 [xmlDocfrag, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 82 [xmlDocfrag, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 82 [xmlDocfrag, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 82 [xmlDocfrag, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 82 [xmlDocfrag, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 82 [xmlDocfrag, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 82 [xmlDocfrag, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 82 [xmlDocfrag, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 82 [xmlDocfrag, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 82 [xmlDocfrag, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 82 [xmlDocfrag, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 82 [xmlDocfrag, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 82 [xmlDocfrag, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 82 [xmlDocfrag, 0], range 49 [document, 1, document, 2]
+PASS Point 82 [xmlDocfrag, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 82 [xmlDocfrag, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 82 [xmlDocfrag, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 82 [xmlDocfrag, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 82 [xmlDocfrag, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 82 [xmlDocfrag, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 82 [xmlDocfrag, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 82 [xmlDocfrag, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 82 [xmlDocfrag, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 82 [xmlDocfrag, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 83 [doctype, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 10 [document.documentElement, 0, document.documentElement, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 11 [document.documentElement, 0, document.documentElement, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 12 [document.documentElement, 1, document.documentElement, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 13 [document.head, 1, document.head, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 14 [document.body, 4, document.body, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 16 [paras[0], 0, paras[0], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 17 [detachedPara1, 0, detachedPara1, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 20 [paras[0].firstChild, 3, paras[3], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 21 [paras[0], 0, paras[0].firstChild, 7] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 22 [testDiv, 2, paras[4], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 23 [document, 0, document, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 24 [document, 0, document, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 25 [comment, 2, comment, 3] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 26 [testDiv, 0, comment, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 27 [foreignDoc, 1, foreignComment, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 29 [xmlDoc, 1, xmlComment, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 33 [detachedComment, 3, detachedComment, 4] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 36 [docfrag, 0, docfrag, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 37 [processingInstruction, 0, processingInstruction, 4] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 44 [paras[0], 0, paras[0], 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 45 [detachedPara1, 0, detachedPara1, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 46 [testDiv, 1, paras[2].firstChild, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 47 [document.documentElement, 1, document.body, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 49 [document, 1, document, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 50 [paras[2].firstChild, 4, comment, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 51 [paras[3], 1, comment, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 52 [foreignDoc, 0, foreignDoc, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 53 [xmlDoc, 0, xmlDoc, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 56 [detachedComment, 5, detachedComment, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 10 [document.documentElement, 0, document.documentElement, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 11 [document.documentElement, 0, document.documentElement, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 12 [document.documentElement, 1, document.documentElement, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 13 [document.head, 1, document.head, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 14 [document.body, 4, document.body, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 16 [paras[0], 0, paras[0], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 17 [detachedPara1, 0, detachedPara1, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 20 [paras[0].firstChild, 3, paras[3], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 21 [paras[0], 0, paras[0].firstChild, 7] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 22 [testDiv, 2, paras[4], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 23 [document, 0, document, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 24 [document, 0, document, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 25 [comment, 2, comment, 3] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 26 [testDiv, 0, comment, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 27 [foreignDoc, 1, foreignComment, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 28 [foreignDoc.body, 0, foreignTextNode, 36] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 29 [xmlDoc, 1, xmlComment, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 30 [detachedTextNode, 0, detachedTextNode, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 33 [detachedComment, 3, detachedComment, 4] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 35 [detachedXmlComment, 2, detachedXmlComment, 6] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 36 [docfrag, 0, docfrag, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 37 [processingInstruction, 0, processingInstruction, 4] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 42 [foreignDoc.head, 1, foreignDoc.head, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 43 [foreignDoc.body, 0, foreignDoc.body, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 44 [paras[0], 0, paras[0], 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 45 [detachedPara1, 0, detachedPara1, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 46 [testDiv, 1, paras[2].firstChild, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 47 [document.documentElement, 1, document.body, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 49 [document, 1, document, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 50 [paras[2].firstChild, 4, comment, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 51 [paras[3], 1, comment, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 52 [foreignDoc, 0, foreignDoc, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 53 [xmlDoc, 0, xmlDoc, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 56 [detachedComment, 5, detachedComment, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 59 [xmlDocfrag, 0, xmlDocfrag, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 10 [document.documentElement, 0, document.documentElement, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 11 [document.documentElement, 0, document.documentElement, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 12 [document.documentElement, 1, document.documentElement, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 13 [document.head, 1, document.head, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 14 [document.body, 4, document.body, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 16 [paras[0], 0, paras[0], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 17 [detachedPara1, 0, detachedPara1, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 20 [paras[0].firstChild, 3, paras[3], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 21 [paras[0], 0, paras[0].firstChild, 7] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 22 [testDiv, 2, paras[4], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 23 [document, 0, document, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 24 [document, 0, document, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 25 [comment, 2, comment, 3] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 26 [testDiv, 0, comment, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 27 [foreignDoc, 1, foreignComment, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 29 [xmlDoc, 1, xmlComment, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 33 [detachedComment, 3, detachedComment, 4] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 36 [docfrag, 0, docfrag, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 37 [processingInstruction, 0, processingInstruction, 4] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 44 [paras[0], 0, paras[0], 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 45 [detachedPara1, 0, detachedPara1, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 46 [testDiv, 1, paras[2].firstChild, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 47 [document.documentElement, 1, document.body, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 49 [document, 1, document, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 50 [paras[2].firstChild, 4, comment, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 51 [paras[3], 1, comment, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 52 [foreignDoc, 0, foreignDoc, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 53 [xmlDoc, 0, xmlDoc, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 56 [detachedComment, 5, detachedComment, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.comparePoint(node, offset);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 86 [foreignDoctype, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 86 [foreignDoctype, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 86 [foreignDoctype, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 86 [foreignDoctype, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 86 [foreignDoctype, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 86 [foreignDoctype, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 86 [foreignDoctype, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 86 [foreignDoctype, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 86 [foreignDoctype, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 86 [foreignDoctype, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 86 [foreignDoctype, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 86 [foreignDoctype, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 86 [foreignDoctype, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 86 [foreignDoctype, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 86 [foreignDoctype, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 86 [foreignDoctype, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 86 [foreignDoctype, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 86 [foreignDoctype, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 86 [foreignDoctype, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 86 [foreignDoctype, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 86 [foreignDoctype, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 86 [foreignDoctype, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 86 [foreignDoctype, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 86 [foreignDoctype, 0], range 23 [document, 0, document, 1]
+PASS Point 86 [foreignDoctype, 0], range 24 [document, 0, document, 2]
+PASS Point 86 [foreignDoctype, 0], range 25 [comment, 2, comment, 3]
+PASS Point 86 [foreignDoctype, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 86 [foreignDoctype, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 86 [foreignDoctype, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 86 [foreignDoctype, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 86 [foreignDoctype, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 86 [foreignDoctype, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 86 [foreignDoctype, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 86 [foreignDoctype, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 86 [foreignDoctype, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 86 [foreignDoctype, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 86 [foreignDoctype, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 86 [foreignDoctype, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 86 [foreignDoctype, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 86 [foreignDoctype, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 86 [foreignDoctype, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 86 [foreignDoctype, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 86 [foreignDoctype, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 86 [foreignDoctype, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 86 [foreignDoctype, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 86 [foreignDoctype, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 86 [foreignDoctype, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 86 [foreignDoctype, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 86 [foreignDoctype, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 86 [foreignDoctype, 0], range 49 [document, 1, document, 2]
+PASS Point 86 [foreignDoctype, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 86 [foreignDoctype, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 86 [foreignDoctype, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 86 [foreignDoctype, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 86 [foreignDoctype, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 86 [foreignDoctype, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 86 [foreignDoctype, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 86 [foreignDoctype, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 86 [foreignDoctype, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 86 [foreignDoctype, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 87 [xmlDoctype, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 87 [xmlDoctype, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 87 [xmlDoctype, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 87 [xmlDoctype, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 87 [xmlDoctype, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 87 [xmlDoctype, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 87 [xmlDoctype, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 87 [xmlDoctype, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 87 [xmlDoctype, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 87 [xmlDoctype, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 87 [xmlDoctype, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 87 [xmlDoctype, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 87 [xmlDoctype, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 87 [xmlDoctype, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 87 [xmlDoctype, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 87 [xmlDoctype, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 87 [xmlDoctype, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 87 [xmlDoctype, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 87 [xmlDoctype, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 87 [xmlDoctype, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 87 [xmlDoctype, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 87 [xmlDoctype, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 87 [xmlDoctype, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 87 [xmlDoctype, 0], range 23 [document, 0, document, 1]
+PASS Point 87 [xmlDoctype, 0], range 24 [document, 0, document, 2]
+PASS Point 87 [xmlDoctype, 0], range 25 [comment, 2, comment, 3]
+PASS Point 87 [xmlDoctype, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 87 [xmlDoctype, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 87 [xmlDoctype, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 87 [xmlDoctype, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 87 [xmlDoctype, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 87 [xmlDoctype, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 87 [xmlDoctype, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 87 [xmlDoctype, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 87 [xmlDoctype, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 87 [xmlDoctype, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 87 [xmlDoctype, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 87 [xmlDoctype, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 87 [xmlDoctype, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 87 [xmlDoctype, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 87 [xmlDoctype, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 87 [xmlDoctype, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 87 [xmlDoctype, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 87 [xmlDoctype, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 87 [xmlDoctype, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 87 [xmlDoctype, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 87 [xmlDoctype, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 87 [xmlDoctype, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 87 [xmlDoctype, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 87 [xmlDoctype, 0], range 49 [document, 1, document, 2]
+PASS Point 87 [xmlDoctype, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 87 [xmlDoctype, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 87 [xmlDoctype, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 87 [xmlDoctype, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 87 [xmlDoctype, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 87 [xmlDoctype, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 87 [xmlDoctype, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 87 [xmlDoctype, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 87 [xmlDoctype, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 87 [xmlDoctype, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangecomparePointhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,92 @@
</span><ins>+<!doctype html>
+<title>Range.comparePoint() tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+// Will be filled in on the first run for that range
+var testRangesCached = [];
+
+for (var i = 0; i < testPoints.length; i++) {
+ var node = eval(testPoints[i])[0];
+ var offset = eval(testPoints[i])[1];
+
+ // comparePoint is an unsigned long, so per WebIDL, we need to treat it as
+ // though it wrapped to an unsigned 32-bit integer.
+ var normalizedOffset = offset % Math.pow(2, 32);
+ if (normalizedOffset < 0) {
+ normalizedOffset += Math.pow(2, 32);
+ }
+
+ for (var j = 0; j < testRanges.length; j++) {
+ test(function() {
+ if (testRangesCached[j] === undefined) {
+ try {
+ testRangesCached[j] = rangeFromEndpoints(eval(testRanges[i]));
+ } catch(e) {
+ testRangesCached[j] = null;
+ }
+ }
+ assert_not_equals(testRangesCached[j], null,
+ "Setting up the range failed");
+
+ var range = testRangesCached[j].cloneRange();
+
+ // "If node's root is different from the context object's root,
+ // throw a "WrongDocumentError" exception and terminate these
+ // steps."
+ if (furthestAncestor(node) !== furthestAncestor(range.startContainer)) {
+ assert_throws("WRONG_DOCUMENT_ERR", function() {
+ range.comparePoint(node, offset);
+ }, "Must throw WrongDocumentError if node and range have different roots");
+ return;
+ }
+
+ // "If node is a doctype, throw an "InvalidNodeTypeError" exception
+ // and terminate these steps."
+ if (node.nodeType == Node.DOCUMENT_TYPE_NODE) {
+ assert_throws("INVALID_NODE_TYPE_ERR", function() {
+ range.comparePoint(node, offset);
+ }, "Must throw InvalidNodeTypeError if node is a doctype");
+ return;
+ }
+
+ // "If offset is greater than node's length, throw an
+ // "IndexSizeError" exception and terminate these steps."
+ if (normalizedOffset > nodeLength(node)) {
+ assert_throws("INDEX_SIZE_ERR", function() {
+ range.comparePoint(node, offset);
+ }, "Must throw IndexSizeError if offset is greater than length");
+ return;
+ }
+
+ // "If (node, offset) is before start, return −1 and terminate
+ // these steps."
+ if (getPosition(node, normalizedOffset, range.startContainer, range.startOffset) === "before") {
+ assert_equals(range.comparePoint(node, offset), -1,
+ "Must return -1 if point is before start");
+ return;
+ }
+
+ // "If (node, offset) is after end, return 1 and terminate these
+ // steps."
+ if (getPosition(node, normalizedOffset, range.endContainer, range.endOffset) === "after") {
+ assert_equals(range.comparePoint(node, offset), 1,
+ "Must return 1 if point is after end");
+ return;
+ }
+
+ // "Return 0."
+ assert_equals(range.comparePoint(node, offset), 0,
+ "Must return 0 if point is neither before start nor after end");
+ }, "Point " + i + " " + testPoints[i] + ", range " + j + " " + testRanges[j]);
+ }
+}
+
+testDiv.style.display = "none";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangedeleteContentsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-deleteContents-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-deleteContents-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-deleteContents-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,125 @@
</span><ins>+To debug test failures, add a query parameter "subtest" with the test id (like "?subtest=5"). Only that test will be run. Then you can look at the resulting iframe in the DOM.
+
+
+FAIL Detached Range InvalidStateError: DOM Exception 11
+PASS Resulting DOM for range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Resulting cursor position for range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Resulting DOM for range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Resulting cursor position for range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Resulting DOM for range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Resulting cursor position for range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Resulting DOM for range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Resulting cursor position for range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Resulting DOM for range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Resulting cursor position for range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Resulting DOM for range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Resulting cursor position for range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Resulting DOM for range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Resulting cursor position for range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Resulting DOM for range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Resulting cursor position for range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Resulting DOM for range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Resulting cursor position for range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Resulting DOM for range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Resulting cursor position for range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Resulting DOM for range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Resulting cursor position for range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Resulting DOM for range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Resulting cursor position for range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Resulting DOM for range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Resulting cursor position for range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Resulting DOM for range 13 [document.head, 1, document.head, 1]
+PASS Resulting cursor position for range 13 [document.head, 1, document.head, 1]
+PASS Resulting DOM for range 14 [document.body, 4, document.body, 5]
+PASS Resulting cursor position for range 14 [document.body, 4, document.body, 5]
+PASS Resulting DOM for range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Resulting cursor position for range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Resulting DOM for range 16 [paras[0], 0, paras[0], 1]
+PASS Resulting cursor position for range 16 [paras[0], 0, paras[0], 1]
+PASS Resulting DOM for range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Resulting cursor position for range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Resulting DOM for range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Resulting cursor position for range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Resulting DOM for range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Resulting cursor position for range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Resulting DOM for range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Resulting cursor position for range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Resulting DOM for range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Resulting cursor position for range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Resulting DOM for range 22 [testDiv, 2, paras[4], 1]
+PASS Resulting cursor position for range 22 [testDiv, 2, paras[4], 1]
+FAIL Resulting DOM for range 23 [document, 0, document, 1] HierarchyRequestError: DOM Exception 3
+FAIL Resulting cursor position for range 23 [document, 0, document, 1] undefined is not an object (evaluating 'actualRoots')
+FAIL Resulting DOM for range 24 [document, 0, document, 2] HierarchyRequestError: DOM Exception 3
+FAIL Resulting cursor position for range 24 [document, 0, document, 2] undefined is not an object (evaluating 'actualRoots')
+PASS Resulting DOM for range 25 [comment, 2, comment, 3]
+PASS Resulting cursor position for range 25 [comment, 2, comment, 3]
+PASS Resulting DOM for range 26 [testDiv, 0, comment, 5]
+PASS Resulting cursor position for range 26 [testDiv, 0, comment, 5]
+PASS Resulting DOM for range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Resulting cursor position for range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Resulting DOM for range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Resulting cursor position for range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Resulting DOM for range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Resulting cursor position for range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Resulting DOM for range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Resulting cursor position for range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Resulting DOM for range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Resulting cursor position for range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Resulting DOM for range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Resulting cursor position for range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Resulting DOM for range 33 [detachedComment, 3, detachedComment, 4]
+PASS Resulting cursor position for range 33 [detachedComment, 3, detachedComment, 4]
+PASS Resulting DOM for range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Resulting cursor position for range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Resulting DOM for range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Resulting cursor position for range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Resulting DOM for range 36 [docfrag, 0, docfrag, 0]
+PASS Resulting cursor position for range 36 [docfrag, 0, docfrag, 0]
+FAIL Resulting DOM for range 37 [processingInstruction, 0, processingInstruction, 4] assert_equals: Actual and expected mismatch for tree root. First difference: differing nodeValue (nodeName = "somePI") expected "Did you know that \":syn sync fromstart\" is very useful when using vim to edit large amounts of JavaScript embedded in HTML?" but got "you know that \":syn sync fromstart\" is very useful when using vim to edit large amounts of JavaScript embedded in HTML?"
+FAIL Resulting cursor position for range 37 [processingInstruction, 0, processingInstruction, 4] assert_true: The resulting DOMs were not equal, so comparing positions makes no sense expected true got false
+PASS Resulting DOM for range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Resulting cursor position for range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Resulting DOM for range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Resulting cursor position for range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Resulting DOM for range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Resulting cursor position for range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Resulting DOM for range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Resulting cursor position for range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Resulting DOM for range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Resulting cursor position for range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Resulting DOM for range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Resulting cursor position for range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Resulting DOM for range 44 [paras[0], 0, paras[0], 0]
+PASS Resulting cursor position for range 44 [paras[0], 0, paras[0], 0]
+PASS Resulting DOM for range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Resulting cursor position for range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Resulting DOM for range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Resulting cursor position for range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Resulting DOM for range 47 [document.documentElement, 1, document.body, 0]
+PASS Resulting cursor position for range 47 [document.documentElement, 1, document.body, 0]
+PASS Resulting DOM for range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Resulting cursor position for range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Resulting DOM for range 49 [document, 1, document, 2]
+PASS Resulting cursor position for range 49 [document, 1, document, 2]
+PASS Resulting DOM for range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Resulting cursor position for range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Resulting DOM for range 51 [paras[3], 1, comment, 8]
+PASS Resulting cursor position for range 51 [paras[3], 1, comment, 8]
+PASS Resulting DOM for range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Resulting cursor position for range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Resulting DOM for range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Resulting cursor position for range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Resulting DOM for range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Resulting cursor position for range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Resulting DOM for range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Resulting cursor position for range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Resulting DOM for range 56 [detachedComment, 5, detachedComment, 5]
+PASS Resulting cursor position for range 56 [detachedComment, 5, detachedComment, 5]
+PASS Resulting DOM for range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Resulting cursor position for range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Resulting DOM for range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Resulting cursor position for range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Resulting DOM for range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Resulting cursor position for range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangedeleteContentshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-deleteContents.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-deleteContents.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-deleteContents.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,331 @@
</span><ins>+<!doctype html>
+<title>Range.deleteContents() tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<p>To debug test failures, add a query parameter "subtest" with the test id (like
+"?subtest=5"). Only that test will be run. Then you can look at the resulting
+iframe in the DOM.
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+testDiv.parentNode.removeChild(testDiv);
+
+var actualIframe = document.createElement("iframe");
+actualIframe.style.display = "none";
+document.body.appendChild(actualIframe);
+
+var expectedIframe = document.createElement("iframe");
+expectedIframe.style.display = "none";
+document.body.appendChild(expectedIframe);
+
+function restoreIframe(iframe, i) {
+ // Most of this function is designed to work around the fact that Opera
+ // doesn't let you add a doctype to a document that no longer has one, in
+ // any way I can figure out. I eventually compromised on something that
+ // will still let Opera pass most tests that don't actually involve
+ // doctypes.
+ while (iframe.contentDocument.firstChild
+ && iframe.contentDocument.firstChild.nodeType != Node.DOCUMENT_TYPE_NODE) {
+ iframe.contentDocument.removeChild(iframe.contentDocument.firstChild);
+ }
+
+ while (iframe.contentDocument.lastChild
+ && iframe.contentDocument.lastChild.nodeType != Node.DOCUMENT_TYPE_NODE) {
+ iframe.contentDocument.removeChild(iframe.contentDocument.lastChild);
+ }
+
+ if (!iframe.contentDocument.firstChild) {
+ // This will throw an exception in Opera if we reach here, which is why
+ // I try to avoid it. It will never happen in a browser that obeys the
+ // spec, so it's really just insurance. I don't think it actually gets
+ // hit by anything.
+ iframe.contentDocument.appendChild(iframe.contentDocument.implementation.createDocumentType("html", "", ""));
+ }
+ iframe.contentDocument.appendChild(referenceDoc.documentElement.cloneNode(true));
+ iframe.contentWindow.setupRangeTests();
+ iframe.contentWindow.testRangeInput = testRanges[i];
+ iframe.contentWindow.run();
+}
+
+function myDeleteContents(range) {
+ // "If the context object's start and end are the same, abort this method."
+ if (range.startContainer == range.endContainer
+ && range.startOffset == range.endOffset) {
+ return;
+ }
+
+ // "Let original start node, original start offset, original end node, and
+ // original end offset be the context object's start and end nodes and
+ // offsets, respectively."
+ var originalStartNode = range.startContainer;
+ var originalStartOffset = range.startOffset;
+ var originalEndNode = range.endContainer;
+ var originalEndOffset = range.endOffset;
+
+ // "If original start node and original end node are the same, and they are
+ // a Text or Comment node, call deleteData(original start offset, original
+ // end offset − original start offset) on that node, and abort these
+ // steps."
+ if (originalStartNode == originalEndNode
+ && (range.startContainer.nodeType == Node.TEXT_NODE
+ || range.startContainer.nodeType == Node.COMMENT_NODE)) {
+ originalStartNode.deleteData(originalStartOffset, originalEndOffset - originalStartOffset);
+ return;
+ }
+
+ // "Let nodes to remove be a list of all the Nodes that are contained in
+ // the context object, in tree order, omitting any Node whose parent is
+ // also contained in the context object."
+ //
+ // We rely on the fact that the contained nodes must lie in tree order
+ // between the start node, and the end node's last descendant (inclusive).
+ var nodesToRemove = [];
+ var stop = nextNodeDescendants(range.endContainer);
+ for (var node = range.startContainer; node != stop; node = nextNode(node)) {
+ if (isContained(node, range)
+ && !(node.parentNode && isContained(node.parentNode, range))) {
+ nodesToRemove.push(node);
+ }
+ }
+
+ // "If original start node is an ancestor container of original end node,
+ // set new node to original start node and new offset to original start
+ // offset."
+ var newNode;
+ var newOffset;
+ if (originalStartNode == originalEndNode
+ || originalEndNode.compareDocumentPosition(originalStartNode) & Node.DOCUMENT_POSITION_CONTAINS) {
+ newNode = originalStartNode;
+ newOffset = originalStartOffset;
+ // "Otherwise:"
+ } else {
+ // "Let reference node equal original start node."
+ var referenceNode = originalStartNode;
+
+ // "While reference node's parent is not null and is not an ancestor
+ // container of original end node, set reference node to its parent."
+ while (referenceNode.parentNode
+ && referenceNode.parentNode != originalEndNode
+ && !(originalEndNode.compareDocumentPosition(referenceNode.parentNode) & Node.DOCUMENT_POSITION_CONTAINS)) {
+ referenceNode = referenceNode.parentNode;
+ }
+
+ // "Set new node to the parent of reference node, and new offset to one
+ // plus the index of reference node."
+ newNode = referenceNode.parentNode;
+ newOffset = 1 + indexOf(referenceNode);
+ }
+
+ // "If original start node is a Text or Comment node, run deleteData() on
+ // it, with original start offset as the first argument and (length of
+ // original start node − original start offset) as the second."
+ if (originalStartNode.nodeType == Node.TEXT_NODE
+ || originalStartNode.nodeType == Node.COMMENT_NODE) {
+ originalStartNode.deleteData(originalStartOffset, nodeLength(originalStartNode) - originalStartOffset);
+ }
+
+ // "For each node in nodes to remove, in order, remove node from its
+ // parent."
+ for (var i = 0; i < nodesToRemove.length; i++) {
+ nodesToRemove[i].parentNode.removeChild(nodesToRemove[i]);
+ }
+
+ // "If original end node is a Text or Comment node, run deleteData(0,
+ // original end offset) on it."
+ if (originalEndNode.nodeType == Node.TEXT_NODE
+ || originalEndNode.nodeType == Node.COMMENT_NODE) {
+ originalEndNode.deleteData(0, originalEndOffset);
+ }
+
+ // "Set the context object's start and end to (new node, new offset)."
+ range.setStart(newNode, newOffset);
+ range.setEnd(newNode, newOffset);
+}
+
+function testDeleteContents(i) {
+ restoreIframe(actualIframe, i);
+ restoreIframe(expectedIframe, i);
+
+ var actualRange = actualIframe.contentWindow.testRange;
+ var expectedRange = expectedIframe.contentWindow.testRange;
+ var actualRoots, expectedRoots;
+
+ domTests[i].step(function() {
+ assert_equals(actualIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for actual deleteContents()");
+ assert_equals(expectedIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for simulated deleteContents()");
+ assert_equals(typeof actualRange, "object",
+ "typeof Range produced in actual iframe");
+ assert_equals(typeof expectedRange, "object",
+ "typeof Range produced in expected iframe");
+
+ // Just to be pedantic, we'll test not only that the tree we're
+ // modifying is the same in expected vs. actual, but also that all the
+ // nodes originally in it were the same. Typically some nodes will
+ // become detached when the algorithm is run, but they still exist and
+ // references can still be kept to them, so they should also remain the
+ // same.
+ //
+ // We initialize the list to all nodes, and later on remove all the
+ // ones which still have parents, since the parents will presumably be
+ // tested for isEqualNode() and checking the children would be
+ // redundant.
+ var actualAllNodes = [];
+ var node = furthestAncestor(actualRange.startContainer);
+ do {
+ actualAllNodes.push(node);
+ } while (node = nextNode(node));
+
+ var expectedAllNodes = [];
+ var node = furthestAncestor(expectedRange.startContainer);
+ do {
+ expectedAllNodes.push(node);
+ } while (node = nextNode(node));
+
+ actualRange.deleteContents();
+ myDeleteContents(expectedRange);
+
+ actualRoots = [];
+ for (var j = 0; j < actualAllNodes.length; j++) {
+ if (!actualAllNodes[j].parentNode) {
+ actualRoots.push(actualAllNodes[j]);
+ }
+ }
+
+ expectedRoots = [];
+ for (var j = 0; j < expectedAllNodes.length; j++) {
+ if (!expectedAllNodes[j].parentNode) {
+ expectedRoots.push(expectedAllNodes[j]);
+ }
+ }
+
+ for (var j = 0; j < actualRoots.length; j++) {
+ if (!actualRoots[j].isEqualNode(expectedRoots[j])) {
+ var msg = j ? "detached node #" + j : "tree root";
+ msg = "Actual and expected mismatch for " + msg + ". ";
+
+ // Find the specific error
+ var actual = actualRoots[j];
+ var expected = expectedRoots[j];
+
+ while (actual && expected) {
+ assert_equals(actual.nodeType, expected.nodeType,
+ msg + "First difference: differing nodeType");
+ assert_equals(actual.nodeName, expected.nodeName,
+ msg + "First difference: differing nodeName");
+ assert_equals(actual.nodeValue, expected.nodeValue,
+ msg + 'First difference: differing nodeValue (nodeName = "' + actual.nodeName + '")');
+ assert_equals(actual.childNodes.length, expected.childNodes.length,
+ msg + 'First difference: differing number of children (nodeName = "' + actual.nodeName + '")');
+ actual = nextNode(actual);
+ expected = nextNode(expected);
+ }
+
+ assert_unreached("DOMs were not equal but we couldn't figure out why");
+ }
+
+ if (j == 0) {
+ // Clearly something is wrong if the node lists are different
+ // lengths. We want to report this only after we've already
+ // checked the main tree for equality, though, so it doesn't
+ // mask more interesting errors.
+ assert_equals(actualRoots.length, expectedRoots.length,
+ "Actual and expected DOMs were broken up into a different number of pieces by deleteContents() (this probably means you created or detached nodes when you weren't supposed to)");
+ }
+ }
+ });
+ domTests[i].done();
+
+ positionTests[i].step(function() {
+ assert_equals(actualIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for actual deleteContents()");
+ assert_equals(expectedIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for simulated deleteContents()");
+ assert_equals(typeof actualRange, "object",
+ "typeof Range produced in actual iframe");
+ assert_equals(typeof expectedRange, "object",
+ "typeof Range produced in expected iframe");
+ assert_true(actualRoots[0].isEqualNode(expectedRoots[0]),
+ "The resulting DOMs were not equal, so comparing positions makes no sense");
+
+ assert_equals(actualRange.startContainer, actualRange.endContainer,
+ "startContainer and endContainer must always be the same after deleteContents()");
+ assert_equals(actualRange.startOffset, actualRange.endOffset,
+ "startOffset and endOffset must always be the same after deleteContents()");
+ assert_equals(expectedRange.startContainer, expectedRange.endContainer,
+ "Test bug! Expected startContainer and endContainer must always be the same after deleteContents()");
+ assert_equals(expectedRange.startOffset, expectedRange.endOffset,
+ "Test bug! Expected startOffset and endOffset must always be the same after deleteContents()");
+
+ assert_equals(actualRange.startOffset, expectedRange.startOffset,
+ "Unexpected startOffset after deleteContents()");
+ // How do we decide that the two nodes are equal, since they're in
+ // different trees? Since the DOMs are the same, it's enough to check
+ // that the index in the parent is the same all the way up the tree.
+ // But we can first cheat by just checking they're actually equal.
+ assert_true(actualRange.startContainer.isEqualNode(expectedRange.startContainer),
+ "Unexpected startContainer after deleteContents(), expected " +
+ expectedRange.startContainer.nodeName.toLowerCase() + " but got " +
+ actualRange.startContainer.nodeName.toLowerCase());
+ var currentActual = actualRange.startContainer;
+ var currentExpected = expectedRange.startContainer;
+ var actual = "";
+ var expected = "";
+ while (currentActual && currentExpected) {
+ actual = indexOf(currentActual) + "-" + actual;
+ expected = indexOf(currentExpected) + "-" + expected;
+
+ currentActual = currentActual.parentNode;
+ currentExpected = currentExpected.parentNode;
+ }
+ actual = actual.substr(0, actual.length - 1);
+ expected = expected.substr(0, expected.length - 1);
+ assert_equals(actual, expected,
+ "startContainer superficially looks right but is actually the wrong node if you trace back its index in all its ancestors (I'm surprised this actually happened");
+ });
+ positionTests[i].done();
+}
+
+// First test a detached Range, synchronously
+test(function() {
+ var range = document.createRange();
+ range.detach();
+ range.deleteContents();
+}, "Detached Range");
+
+var iStart = 0;
+var iStop = testRanges.length;
+
+if (/subtest=[0-9]+/.test(location.search)) {
+ var matches = /subtest=([0-9]+)/.exec(location.search);
+ iStart = Number(matches[1]);
+ iStop = Number(matches[1]) + 1;
+}
+
+var domTests = [];
+var positionTests = [];
+
+for (var i = iStart; i < iStop; i++) {
+ domTests[i] = async_test("Resulting DOM for range " + i + " " + testRanges[i]);
+ positionTests[i] = async_test("Resulting cursor position for range " + i + " " + testRanges[i]);
+}
+
+var referenceDoc = document.implementation.createHTMLDocument("");
+referenceDoc.removeChild(referenceDoc.documentElement);
+
+actualIframe.onload = function() {
+ expectedIframe.onload = function() {
+ for (var i = iStart; i < iStop; i++) {
+ testDeleteContents(i);
+ }
+ }
+ expectedIframe.src = "resources/Range-test-iframe.html";
+ referenceDoc.appendChild(actualIframe.contentDocument.documentElement.cloneNode(true));
+}
+actualIframe.src = "resources/Range-test-iframe.html";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangedetachexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-detach-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-detach-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-detach-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+FAIL Range.detach InvalidStateError: DOM Exception 11
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangedetachhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-detach.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-detach.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-detach.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+<!DOCTYPE html>
+<title>Range.detach</title>
+<link rel="author" title="Ms2ger" href="mailto:ms2ger@gmail.com">
+<meta name=timeout content=long>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<script>
+test(function() {
+ var r = document.createRange();
+ r.detach()
+ r.detach()
+})
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangeextractContentsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-extractContents-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-extractContents-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-extractContents-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,185 @@
</span><ins>+To debug test failures, add a query parameter "subtest" with the test id (like "?subtest=5"). Only that test will be run. Then you can look at the resulting iframe in the DOM.
+
+
+FAIL Detached Range InvalidStateError: DOM Exception 11
+PASS Resulting DOM for range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Resulting cursor position for range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Returned fragment for range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Resulting DOM for range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Resulting cursor position for range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Returned fragment for range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Resulting DOM for range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Resulting cursor position for range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Returned fragment for range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Resulting DOM for range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Resulting cursor position for range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Returned fragment for range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Resulting DOM for range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Resulting cursor position for range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Returned fragment for range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Resulting DOM for range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Resulting cursor position for range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Returned fragment for range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Resulting DOM for range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Resulting cursor position for range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Returned fragment for range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Resulting DOM for range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Resulting cursor position for range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Returned fragment for range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Resulting DOM for range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Resulting cursor position for range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Returned fragment for range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Resulting DOM for range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Resulting cursor position for range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Returned fragment for range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Resulting DOM for range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Resulting cursor position for range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Returned fragment for range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Resulting DOM for range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Resulting cursor position for range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Returned fragment for range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Resulting DOM for range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Resulting cursor position for range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Returned fragment for range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Resulting DOM for range 13 [document.head, 1, document.head, 1]
+PASS Resulting cursor position for range 13 [document.head, 1, document.head, 1]
+PASS Returned fragment for range 13 [document.head, 1, document.head, 1]
+PASS Resulting DOM for range 14 [document.body, 4, document.body, 5]
+PASS Resulting cursor position for range 14 [document.body, 4, document.body, 5]
+PASS Returned fragment for range 14 [document.body, 4, document.body, 5]
+PASS Resulting DOM for range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Resulting cursor position for range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Returned fragment for range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Resulting DOM for range 16 [paras[0], 0, paras[0], 1]
+PASS Resulting cursor position for range 16 [paras[0], 0, paras[0], 1]
+PASS Returned fragment for range 16 [paras[0], 0, paras[0], 1]
+PASS Resulting DOM for range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Resulting cursor position for range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Returned fragment for range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Resulting DOM for range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Resulting cursor position for range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Returned fragment for range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Resulting DOM for range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Resulting cursor position for range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Returned fragment for range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Resulting DOM for range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Resulting cursor position for range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Returned fragment for range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Resulting DOM for range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Resulting cursor position for range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Returned fragment for range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Resulting DOM for range 22 [testDiv, 2, paras[4], 1]
+PASS Resulting cursor position for range 22 [testDiv, 2, paras[4], 1]
+PASS Returned fragment for range 22 [testDiv, 2, paras[4], 1]
+PASS Resulting DOM for range 23 [document, 0, document, 1]
+PASS Resulting cursor position for range 23 [document, 0, document, 1]
+PASS Returned fragment for range 23 [document, 0, document, 1]
+PASS Resulting DOM for range 24 [document, 0, document, 2]
+PASS Resulting cursor position for range 24 [document, 0, document, 2]
+PASS Returned fragment for range 24 [document, 0, document, 2]
+PASS Resulting DOM for range 25 [comment, 2, comment, 3]
+PASS Resulting cursor position for range 25 [comment, 2, comment, 3]
+PASS Returned fragment for range 25 [comment, 2, comment, 3]
+PASS Resulting DOM for range 26 [testDiv, 0, comment, 5]
+PASS Resulting cursor position for range 26 [testDiv, 0, comment, 5]
+PASS Returned fragment for range 26 [testDiv, 0, comment, 5]
+PASS Resulting DOM for range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Resulting cursor position for range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Returned fragment for range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Resulting DOM for range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Resulting cursor position for range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Returned fragment for range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Resulting DOM for range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Resulting cursor position for range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Returned fragment for range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Resulting DOM for range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Resulting cursor position for range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Returned fragment for range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Resulting DOM for range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Resulting cursor position for range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Returned fragment for range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Resulting DOM for range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Resulting cursor position for range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Returned fragment for range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Resulting DOM for range 33 [detachedComment, 3, detachedComment, 4]
+PASS Resulting cursor position for range 33 [detachedComment, 3, detachedComment, 4]
+PASS Returned fragment for range 33 [detachedComment, 3, detachedComment, 4]
+PASS Resulting DOM for range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Resulting cursor position for range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Returned fragment for range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Resulting DOM for range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Resulting cursor position for range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Returned fragment for range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Resulting DOM for range 36 [docfrag, 0, docfrag, 0]
+PASS Resulting cursor position for range 36 [docfrag, 0, docfrag, 0]
+PASS Returned fragment for range 36 [docfrag, 0, docfrag, 0]
+FAIL Resulting DOM for range 37 [processingInstruction, 0, processingInstruction, 4] assert_true: First differing node: expected ProcessingInstruction node with target "somePI" and data "Did you know that \":syn sync fromstart\" is very useful wh...", got ProcessingInstruction node with target "somePI" and data "you know that \":syn sync fromstart\" is very useful when u..." [Actual and expected mismatch for tree root. ] expected true got false
+FAIL Resulting cursor position for range 37 [processingInstruction, 0, processingInstruction, 4] assert_true: The resulting DOMs were not equal, so comparing positions makes no sense expected true got false
+FAIL Returned fragment for range 37 [processingInstruction, 0, processingInstruction, 4] assert_unreached: DOMs were not equal but we couldn't figure out why Reached unreachable code
+PASS Resulting DOM for range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Resulting cursor position for range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Returned fragment for range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Resulting DOM for range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Resulting cursor position for range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Returned fragment for range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Resulting DOM for range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Resulting cursor position for range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Returned fragment for range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Resulting DOM for range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Resulting cursor position for range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Returned fragment for range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Resulting DOM for range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Resulting cursor position for range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Returned fragment for range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Resulting DOM for range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Resulting cursor position for range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Returned fragment for range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Resulting DOM for range 44 [paras[0], 0, paras[0], 0]
+PASS Resulting cursor position for range 44 [paras[0], 0, paras[0], 0]
+PASS Returned fragment for range 44 [paras[0], 0, paras[0], 0]
+PASS Resulting DOM for range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Resulting cursor position for range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Returned fragment for range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Resulting DOM for range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Resulting cursor position for range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Returned fragment for range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Resulting DOM for range 47 [document.documentElement, 1, document.body, 0]
+PASS Resulting cursor position for range 47 [document.documentElement, 1, document.body, 0]
+PASS Returned fragment for range 47 [document.documentElement, 1, document.body, 0]
+PASS Resulting DOM for range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Resulting cursor position for range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Returned fragment for range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Resulting DOM for range 49 [document, 1, document, 2]
+PASS Resulting cursor position for range 49 [document, 1, document, 2]
+PASS Returned fragment for range 49 [document, 1, document, 2]
+PASS Resulting DOM for range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Resulting cursor position for range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Returned fragment for range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Resulting DOM for range 51 [paras[3], 1, comment, 8]
+PASS Resulting cursor position for range 51 [paras[3], 1, comment, 8]
+PASS Returned fragment for range 51 [paras[3], 1, comment, 8]
+PASS Resulting DOM for range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Resulting cursor position for range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Returned fragment for range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Resulting DOM for range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Resulting cursor position for range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Returned fragment for range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Resulting DOM for range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Resulting cursor position for range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Returned fragment for range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Resulting DOM for range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Resulting cursor position for range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Returned fragment for range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Resulting DOM for range 56 [detachedComment, 5, detachedComment, 5]
+PASS Resulting cursor position for range 56 [detachedComment, 5, detachedComment, 5]
+PASS Returned fragment for range 56 [detachedComment, 5, detachedComment, 5]
+PASS Resulting DOM for range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Resulting cursor position for range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Returned fragment for range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Resulting DOM for range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Resulting cursor position for range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Returned fragment for range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Resulting DOM for range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Resulting cursor position for range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Returned fragment for range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangeextractContentshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-extractContents.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-extractContents.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-extractContents.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,248 @@
</span><ins>+<!doctype html>
+<title>Range.extractContents() tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<p>To debug test failures, add a query parameter "subtest" with the test id (like
+"?subtest=5"). Only that test will be run. Then you can look at the resulting
+iframe in the DOM.
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+testDiv.parentNode.removeChild(testDiv);
+
+var actualIframe = document.createElement("iframe");
+actualIframe.style.display = "none";
+document.body.appendChild(actualIframe);
+
+var expectedIframe = document.createElement("iframe");
+expectedIframe.style.display = "none";
+document.body.appendChild(expectedIframe);
+
+function restoreIframe(iframe, i) {
+ // Most of this function is designed to work around the fact that Opera
+ // doesn't let you add a doctype to a document that no longer has one, in
+ // any way I can figure out. I eventually compromised on something that
+ // will still let Opera pass most tests that don't actually involve
+ // doctypes.
+ while (iframe.contentDocument.firstChild
+ && iframe.contentDocument.firstChild.nodeType != Node.DOCUMENT_TYPE_NODE) {
+ iframe.contentDocument.removeChild(iframe.contentDocument.firstChild);
+ }
+
+ while (iframe.contentDocument.lastChild
+ && iframe.contentDocument.lastChild.nodeType != Node.DOCUMENT_TYPE_NODE) {
+ iframe.contentDocument.removeChild(iframe.contentDocument.lastChild);
+ }
+
+ if (!iframe.contentDocument.firstChild) {
+ // This will throw an exception in Opera if we reach here, which is why
+ // I try to avoid it. It will never happen in a browser that obeys the
+ // spec, so it's really just insurance. I don't think it actually gets
+ // hit by anything.
+ iframe.contentDocument.appendChild(iframe.contentDocument.implementation.createDocumentType("html", "", ""));
+ }
+ iframe.contentDocument.appendChild(referenceDoc.documentElement.cloneNode(true));
+ iframe.contentWindow.setupRangeTests();
+ iframe.contentWindow.testRangeInput = testRanges[i];
+ iframe.contentWindow.run();
+}
+
+function testExtractContents(i) {
+ restoreIframe(actualIframe, i);
+ restoreIframe(expectedIframe, i);
+
+ var actualRange = actualIframe.contentWindow.testRange;
+ var expectedRange = expectedIframe.contentWindow.testRange;
+ var actualFrag, expectedFrag;
+ var actualRoots, expectedRoots;
+
+ domTests[i].step(function() {
+ assert_equals(actualIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for actual extractContents()");
+ assert_equals(expectedIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for simulated extractContents()");
+ assert_equals(typeof actualRange, "object",
+ "typeof Range produced in actual iframe");
+ assert_equals(typeof expectedRange, "object",
+ "typeof Range produced in expected iframe");
+
+ // Just to be pedantic, we'll test not only that the tree we're
+ // modifying is the same in expected vs. actual, but also that all the
+ // nodes originally in it were the same. Typically some nodes will
+ // become detached when the algorithm is run, but they still exist and
+ // references can still be kept to them, so they should also remain the
+ // same.
+ //
+ // We initialize the list to all nodes, and later on remove all the
+ // ones which still have parents, since the parents will presumably be
+ // tested for isEqualNode() and checking the children would be
+ // redundant.
+ var actualAllNodes = [];
+ var node = furthestAncestor(actualRange.startContainer);
+ do {
+ actualAllNodes.push(node);
+ } while (node = nextNode(node));
+
+ var expectedAllNodes = [];
+ var node = furthestAncestor(expectedRange.startContainer);
+ do {
+ expectedAllNodes.push(node);
+ } while (node = nextNode(node));
+
+ expectedFrag = myExtractContents(expectedRange);
+ if (typeof expectedFrag == "string") {
+ assert_throws(expectedFrag, function() {
+ actualRange.extractContents();
+ });
+ } else {
+ actualFrag = actualRange.extractContents();
+ }
+
+ actualRoots = [];
+ for (var j = 0; j < actualAllNodes.length; j++) {
+ if (!actualAllNodes[j].parentNode) {
+ actualRoots.push(actualAllNodes[j]);
+ }
+ }
+
+ expectedRoots = [];
+ for (var j = 0; j < expectedAllNodes.length; j++) {
+ if (!expectedAllNodes[j].parentNode) {
+ expectedRoots.push(expectedAllNodes[j]);
+ }
+ }
+
+ for (var j = 0; j < actualRoots.length; j++) {
+ assertNodesEqual(actualRoots[j], expectedRoots[j], j ? "detached node #" + j : "tree root");
+
+ if (j == 0) {
+ // Clearly something is wrong if the node lists are different
+ // lengths. We want to report this only after we've already
+ // checked the main tree for equality, though, so it doesn't
+ // mask more interesting errors.
+ assert_equals(actualRoots.length, expectedRoots.length,
+ "Actual and expected DOMs were broken up into a different number of pieces by extractContents() (this probably means you created or detached nodes when you weren't supposed to)");
+ }
+ }
+ });
+ domTests[i].done();
+
+ positionTests[i].step(function() {
+ assert_equals(actualIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for actual extractContents()");
+ assert_equals(expectedIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for simulated extractContents()");
+ assert_equals(typeof actualRange, "object",
+ "typeof Range produced in actual iframe");
+ assert_equals(typeof expectedRange, "object",
+ "typeof Range produced in expected iframe");
+
+ assert_true(actualRoots[0].isEqualNode(expectedRoots[0]),
+ "The resulting DOMs were not equal, so comparing positions makes no sense");
+
+ if (typeof expectedFrag == "string") {
+ // It's no longer true that, e.g., startContainer and endContainer
+ // must always be the same
+ return;
+ }
+ assert_equals(actualRange.startContainer, actualRange.endContainer,
+ "startContainer and endContainer must always be the same after extractContents()");
+ assert_equals(actualRange.startOffset, actualRange.endOffset,
+ "startOffset and endOffset must always be the same after extractContents()");
+ assert_equals(expectedRange.startContainer, expectedRange.endContainer,
+ "Test bug! Expected startContainer and endContainer must always be the same after extractContents()");
+ assert_equals(expectedRange.startOffset, expectedRange.endOffset,
+ "Test bug! Expected startOffset and endOffset must always be the same after extractContents()");
+
+ assert_equals(actualRange.startOffset, expectedRange.startOffset,
+ "Unexpected startOffset after extractContents()");
+ // How do we decide that the two nodes are equal, since they're in
+ // different trees? Since the DOMs are the same, it's enough to check
+ // that the index in the parent is the same all the way up the tree.
+ // But we can first cheat by just checking they're actually equal.
+ assert_true(actualRange.startContainer.isEqualNode(expectedRange.startContainer),
+ "Unexpected startContainer after extractContents(), expected " +
+ expectedRange.startContainer.nodeName.toLowerCase() + " but got " +
+ actualRange.startContainer.nodeName.toLowerCase());
+ var currentActual = actualRange.startContainer;
+ var currentExpected = expectedRange.startContainer;
+ var actual = "";
+ var expected = "";
+ while (currentActual && currentExpected) {
+ actual = indexOf(currentActual) + "-" + actual;
+ expected = indexOf(currentExpected) + "-" + expected;
+
+ currentActual = currentActual.parentNode;
+ currentExpected = currentExpected.parentNode;
+ }
+ actual = actual.substr(0, actual.length - 1);
+ expected = expected.substr(0, expected.length - 1);
+ assert_equals(actual, expected,
+ "startContainer superficially looks right but is actually the wrong node if you trace back its index in all its ancestors (I'm surprised this actually happened");
+ });
+ positionTests[i].done();
+
+ fragTests[i].step(function() {
+ assert_equals(actualIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for actual extractContents()");
+ assert_equals(expectedIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for simulated extractContents()");
+ assert_equals(typeof actualRange, "object",
+ "typeof Range produced in actual iframe");
+ assert_equals(typeof expectedRange, "object",
+ "typeof Range produced in expected iframe");
+
+ if (typeof expectedFrag == "string") {
+ // Comparing makes no sense
+ return;
+ }
+ assertNodesEqual(actualFrag, expectedFrag,
+ "returned fragment");
+ });
+ fragTests[i].done();
+}
+
+// First test a detached Range, synchronously
+test(function() {
+ var range = document.createRange();
+ range.detach();
+ assert_array_equals(range.extractContents().childNodes, []);
+}, "Detached Range");
+
+var iStart = 0;
+var iStop = testRanges.length;
+
+if (/subtest=[0-9]+/.test(location.search)) {
+ var matches = /subtest=([0-9]+)/.exec(location.search);
+ iStart = Number(matches[1]);
+ iStop = Number(matches[1]) + 1;
+}
+
+var domTests = [];
+var positionTests = [];
+var fragTests = [];
+
+for (var i = iStart; i < iStop; i++) {
+ domTests[i] = async_test("Resulting DOM for range " + i + " " + testRanges[i]);
+ positionTests[i] = async_test("Resulting cursor position for range " + i + " " + testRanges[i]);
+ fragTests[i] = async_test("Returned fragment for range " + i + " " + testRanges[i]);
+}
+
+var referenceDoc = document.implementation.createHTMLDocument("");
+referenceDoc.removeChild(referenceDoc.documentElement);
+
+actualIframe.onload = function() {
+ expectedIframe.onload = function() {
+ for (var i = iStart; i < iStop; i++) {
+ testExtractContents(i);
+ }
+ }
+ expectedIframe.src = "resources/Range-test-iframe.html";
+ referenceDoc.appendChild(actualIframe.contentDocument.documentElement.cloneNode(true));
+}
+actualIframe.src = "resources/Range-test-iframe.html";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangeinsertNodeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-insertNode-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-insertNode-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-insertNode-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,1685 @@
</span><ins>+To debug test failures, add a query parameter "subtest" with the test id (like "?subtest=5,16"). Only that test will be run. Then you can look at the resulting iframes in the DOM.
+
+
+PASS 0,0: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node paras[0]
+PASS 0,0: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node paras[0]
+FAIL 0,1: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node paras[0].firstChild HierarchyRequestError: DOM Exception 3
+FAIL 0,1: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node paras[0].firstChild assert_true: First differing node: expected Text node "", got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 0,2: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node paras[1].firstChild
+FAIL 0,2: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node paras[1].firstChild assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 0,3: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignPara1
+FAIL 0,3: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignPara1 assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 0,4: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignPara1.firstChild
+FAIL 0,4: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignPara1.firstChild assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 0,5: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedPara1
+FAIL 0,5: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedPara1 assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 0,6: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedPara1.firstChild
+FAIL 0,6: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedPara1.firstChild assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 0,7: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node document
+PASS 0,7: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node document
+PASS 0,8: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedDiv
+FAIL 0,8: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedDiv assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 0,9: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignDoc
+PASS 0,9: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignDoc
+PASS 0,10: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignPara2
+FAIL 0,10: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignPara2 assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 0,11: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node xmlDoc
+PASS 0,11: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node xmlDoc
+PASS 0,12: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node xmlElement
+FAIL 0,12: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node xmlElement assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 0,13: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedTextNode
+FAIL 0,13: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedTextNode assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 0,14: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignTextNode
+FAIL 0,14: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignTextNode assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 0,15: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node processingInstruction
+FAIL 0,15: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node processingInstruction assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 0,16: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedProcessingInstruction
+FAIL 0,16: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedProcessingInstruction assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 0,17: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node comment
+FAIL 0,17: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node comment assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 0,18: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedComment
+FAIL 0,18: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedComment assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 0,19: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node docfrag
+FAIL 0,19: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node docfrag assert_equals: Unexpected endOffset after insertNode() expected 1 but got 0
+PASS 0,20: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node doctype
+PASS 0,20: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node doctype
+PASS 0,21: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignDoctype
+PASS 0,21: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignDoctype
+PASS 1,0: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node paras[0]
+PASS 1,0: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node paras[0]
+FAIL 1,1: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node paras[0].firstChild HierarchyRequestError: DOM Exception 3
+FAIL 1,1: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node paras[0].firstChild assert_true: First differing node: expected Text node "", got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 1,2: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node paras[1].firstChild
+PASS 1,2: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node paras[1].firstChild
+PASS 1,3: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignPara1
+PASS 1,3: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignPara1
+PASS 1,4: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignPara1.firstChild
+PASS 1,4: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignPara1.firstChild
+PASS 1,5: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedPara1
+PASS 1,5: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedPara1
+PASS 1,6: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedPara1.firstChild
+PASS 1,6: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedPara1.firstChild
+PASS 1,7: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node document
+PASS 1,7: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node document
+PASS 1,8: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedDiv
+PASS 1,8: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedDiv
+PASS 1,9: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignDoc
+PASS 1,9: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignDoc
+PASS 1,10: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignPara2
+PASS 1,10: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignPara2
+PASS 1,11: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node xmlDoc
+PASS 1,11: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node xmlDoc
+PASS 1,12: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node xmlElement
+PASS 1,12: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node xmlElement
+PASS 1,13: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedTextNode
+PASS 1,13: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedTextNode
+PASS 1,14: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignTextNode
+PASS 1,14: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignTextNode
+PASS 1,15: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node processingInstruction
+PASS 1,15: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node processingInstruction
+PASS 1,16: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedProcessingInstruction
+PASS 1,16: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedProcessingInstruction
+PASS 1,17: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node comment
+PASS 1,17: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node comment
+PASS 1,18: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedComment
+PASS 1,18: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedComment
+PASS 1,19: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node docfrag
+PASS 1,19: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node docfrag
+PASS 1,20: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node doctype
+PASS 1,20: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node doctype
+PASS 1,21: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignDoctype
+PASS 1,21: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignDoctype
+PASS 2,0: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node paras[0]
+PASS 2,0: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node paras[0]
+FAIL 2,1: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node paras[0].firstChild HierarchyRequestError: DOM Exception 3
+FAIL 2,1: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node paras[0].firstChild assert_true: First differing node: expected Text node "Ä", got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 2,2: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node paras[1].firstChild
+PASS 2,2: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node paras[1].firstChild
+PASS 2,3: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignPara1
+PASS 2,3: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignPara1
+PASS 2,4: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignPara1.firstChild
+PASS 2,4: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignPara1.firstChild
+PASS 2,5: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedPara1
+PASS 2,5: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedPara1
+PASS 2,6: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedPara1.firstChild
+PASS 2,6: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedPara1.firstChild
+PASS 2,7: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node document
+PASS 2,7: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node document
+PASS 2,8: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedDiv
+PASS 2,8: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedDiv
+PASS 2,9: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignDoc
+PASS 2,9: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignDoc
+PASS 2,10: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignPara2
+PASS 2,10: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignPara2
+PASS 2,11: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node xmlDoc
+PASS 2,11: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node xmlDoc
+PASS 2,12: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node xmlElement
+PASS 2,12: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node xmlElement
+PASS 2,13: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedTextNode
+PASS 2,13: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedTextNode
+PASS 2,14: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignTextNode
+PASS 2,14: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignTextNode
+PASS 2,15: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node processingInstruction
+PASS 2,15: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node processingInstruction
+PASS 2,16: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedProcessingInstruction
+PASS 2,16: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedProcessingInstruction
+PASS 2,17: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node comment
+PASS 2,17: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node comment
+PASS 2,18: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedComment
+PASS 2,18: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedComment
+PASS 2,19: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node docfrag
+PASS 2,19: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node docfrag
+PASS 2,20: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node doctype
+PASS 2,20: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node doctype
+PASS 2,21: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignDoctype
+PASS 2,21: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignDoctype
+PASS 3,0: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node paras[0]
+PASS 3,0: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node paras[0]
+FAIL 3,1: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node paras[0].firstChild HierarchyRequestError: DOM Exception 3
+FAIL 3,1: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node paras[0].firstChild assert_true: First differing node: expected Text node "Ä", got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 3,2: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node paras[1].firstChild
+PASS 3,2: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node paras[1].firstChild
+PASS 3,3: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignPara1
+PASS 3,3: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignPara1
+PASS 3,4: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignPara1.firstChild
+PASS 3,4: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignPara1.firstChild
+PASS 3,5: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedPara1
+PASS 3,5: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedPara1
+PASS 3,6: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedPara1.firstChild
+PASS 3,6: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedPara1.firstChild
+PASS 3,7: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node document
+PASS 3,7: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node document
+PASS 3,8: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedDiv
+PASS 3,8: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedDiv
+PASS 3,9: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignDoc
+PASS 3,9: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignDoc
+PASS 3,10: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignPara2
+PASS 3,10: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignPara2
+PASS 3,11: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node xmlDoc
+PASS 3,11: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node xmlDoc
+PASS 3,12: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node xmlElement
+PASS 3,12: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node xmlElement
+PASS 3,13: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedTextNode
+PASS 3,13: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedTextNode
+PASS 3,14: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignTextNode
+PASS 3,14: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignTextNode
+PASS 3,15: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node processingInstruction
+PASS 3,15: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node processingInstruction
+PASS 3,16: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedProcessingInstruction
+PASS 3,16: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedProcessingInstruction
+PASS 3,17: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node comment
+PASS 3,17: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node comment
+PASS 3,18: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedComment
+PASS 3,18: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedComment
+PASS 3,19: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node docfrag
+PASS 3,19: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node docfrag
+PASS 3,20: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node doctype
+PASS 3,20: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node doctype
+PASS 3,21: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignDoctype
+PASS 3,21: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignDoctype
+PASS 4,0: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node paras[0]
+FAIL 4,0: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node paras[0] assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 4,1: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node paras[0].firstChild
+FAIL 4,1: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node paras[0].firstChild assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+FAIL 4,2: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node paras[1].firstChild HierarchyRequestError: DOM Exception 3
+FAIL 4,2: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node paras[1].firstChild assert_true: First differing node: expected Text node "", got Text node "Ijklmnop
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 4,3: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignPara1
+FAIL 4,3: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignPara1 assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 4,4: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignPara1.firstChild
+FAIL 4,4: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignPara1.firstChild assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 4,5: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedPara1
+FAIL 4,5: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedPara1 assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 4,6: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedPara1.firstChild
+FAIL 4,6: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedPara1.firstChild assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 4,7: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node document
+PASS 4,7: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node document
+PASS 4,8: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedDiv
+FAIL 4,8: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedDiv assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 4,9: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignDoc
+PASS 4,9: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignDoc
+PASS 4,10: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignPara2
+FAIL 4,10: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignPara2 assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 4,11: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node xmlDoc
+PASS 4,11: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node xmlDoc
+PASS 4,12: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node xmlElement
+FAIL 4,12: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node xmlElement assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 4,13: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedTextNode
+FAIL 4,13: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedTextNode assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 4,14: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignTextNode
+FAIL 4,14: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignTextNode assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 4,15: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node processingInstruction
+FAIL 4,15: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node processingInstruction assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 4,16: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedProcessingInstruction
+FAIL 4,16: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedProcessingInstruction assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 4,17: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node comment
+FAIL 4,17: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node comment assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 4,18: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedComment
+FAIL 4,18: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedComment assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 4,19: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node docfrag
+FAIL 4,19: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node docfrag assert_equals: Unexpected endOffset after insertNode() expected 1 but got 0
+PASS 4,20: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node doctype
+PASS 4,20: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node doctype
+PASS 4,21: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignDoctype
+PASS 4,21: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignDoctype
+PASS 5,0: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node paras[0]
+PASS 5,0: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node paras[0]
+PASS 5,1: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node paras[0].firstChild
+PASS 5,1: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node paras[0].firstChild
+FAIL 5,2: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node paras[1].firstChild HierarchyRequestError: DOM Exception 3
+FAIL 5,2: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node paras[1].firstChild assert_true: First differing node: expected Text node "Ij", got Text node "Ijklmnop
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 5,3: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignPara1
+PASS 5,3: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignPara1
+PASS 5,4: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignPara1.firstChild
+PASS 5,4: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignPara1.firstChild
+PASS 5,5: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedPara1
+PASS 5,5: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedPara1
+PASS 5,6: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedPara1.firstChild
+PASS 5,6: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedPara1.firstChild
+PASS 5,7: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node document
+PASS 5,7: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node document
+PASS 5,8: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedDiv
+PASS 5,8: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedDiv
+PASS 5,9: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignDoc
+PASS 5,9: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignDoc
+PASS 5,10: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignPara2
+PASS 5,10: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignPara2
+PASS 5,11: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node xmlDoc
+PASS 5,11: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node xmlDoc
+PASS 5,12: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node xmlElement
+PASS 5,12: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node xmlElement
+PASS 5,13: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedTextNode
+PASS 5,13: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedTextNode
+PASS 5,14: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignTextNode
+PASS 5,14: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignTextNode
+PASS 5,15: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node processingInstruction
+PASS 5,15: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node processingInstruction
+PASS 5,16: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedProcessingInstruction
+PASS 5,16: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedProcessingInstruction
+PASS 5,17: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node comment
+PASS 5,17: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node comment
+PASS 5,18: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedComment
+PASS 5,18: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedComment
+PASS 5,19: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node docfrag
+PASS 5,19: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node docfrag
+PASS 5,20: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node doctype
+PASS 5,20: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node doctype
+PASS 5,21: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignDoctype
+PASS 5,21: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignDoctype
+PASS 6,0: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node paras[0]
+FAIL 6,0: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node paras[0] assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 6,1: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node paras[0].firstChild
+FAIL 6,1: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node paras[0].firstChild assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 6,2: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node paras[1].firstChild
+FAIL 6,2: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node paras[1].firstChild assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 6,3: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignPara1
+FAIL 6,3: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignPara1 assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 6,4: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignPara1.firstChild
+FAIL 6,4: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignPara1.firstChild assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 6,5: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedPara1
+PASS 6,5: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedPara1
+FAIL 6,6: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedPara1.firstChild HierarchyRequestError: DOM Exception 3
+FAIL 6,6: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Opqrstuv" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 6,7: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node document
+PASS 6,7: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node document
+PASS 6,8: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedDiv
+PASS 6,8: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedDiv
+PASS 6,9: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignDoc
+PASS 6,9: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignDoc
+PASS 6,10: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignPara2
+FAIL 6,10: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignPara2 assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 6,11: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node xmlDoc
+PASS 6,11: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node xmlDoc
+PASS 6,12: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node xmlElement
+FAIL 6,12: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node xmlElement assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 6,13: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedTextNode
+FAIL 6,13: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedTextNode assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 6,14: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignTextNode
+FAIL 6,14: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignTextNode assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 6,15: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node processingInstruction
+FAIL 6,15: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node processingInstruction assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 6,16: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedProcessingInstruction
+FAIL 6,16: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedProcessingInstruction assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 6,17: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node comment
+FAIL 6,17: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node comment assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 6,18: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedComment
+FAIL 6,18: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedComment assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 6,19: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node docfrag
+FAIL 6,19: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node docfrag assert_equals: Unexpected endOffset after insertNode() expected 1 but got 0
+PASS 6,20: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node doctype
+PASS 6,20: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node doctype
+PASS 6,21: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignDoctype
+PASS 6,21: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignDoctype
+PASS 7,0: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node paras[0]
+PASS 7,0: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node paras[0]
+PASS 7,1: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node paras[0].firstChild
+PASS 7,1: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node paras[0].firstChild
+PASS 7,2: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node paras[1].firstChild
+PASS 7,2: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node paras[1].firstChild
+PASS 7,3: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignPara1
+PASS 7,3: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignPara1
+PASS 7,4: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignPara1.firstChild
+PASS 7,4: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignPara1.firstChild
+PASS 7,5: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedPara1
+PASS 7,5: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedPara1
+FAIL 7,6: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedPara1.firstChild HierarchyRequestError: DOM Exception 3
+FAIL 7,6: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedPara1.firstChild assert_true: First differing node: expected Text node "Op", got Text node "Opqrstuv" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 7,7: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node document
+PASS 7,7: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node document
+PASS 7,8: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedDiv
+PASS 7,8: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedDiv
+PASS 7,9: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignDoc
+PASS 7,9: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignDoc
+PASS 7,10: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignPara2
+PASS 7,10: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignPara2
+PASS 7,11: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node xmlDoc
+PASS 7,11: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node xmlDoc
+PASS 7,12: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node xmlElement
+PASS 7,12: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node xmlElement
+PASS 7,13: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedTextNode
+PASS 7,13: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedTextNode
+PASS 7,14: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignTextNode
+PASS 7,14: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignTextNode
+PASS 7,15: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node processingInstruction
+PASS 7,15: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node processingInstruction
+PASS 7,16: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedProcessingInstruction
+PASS 7,16: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedProcessingInstruction
+PASS 7,17: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node comment
+PASS 7,17: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node comment
+PASS 7,18: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedComment
+PASS 7,18: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedComment
+PASS 7,19: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node docfrag
+PASS 7,19: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node docfrag
+PASS 7,20: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node doctype
+PASS 7,20: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node doctype
+PASS 7,21: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignDoctype
+PASS 7,21: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignDoctype
+PASS 8,0: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node paras[0]
+FAIL 8,0: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node paras[0] assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 8,1: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node paras[0].firstChild
+FAIL 8,1: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node paras[0].firstChild assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 8,2: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node paras[1].firstChild
+FAIL 8,2: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node paras[1].firstChild assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 8,3: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignPara1
+PASS 8,3: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignPara1
+FAIL 8,4: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignPara1.firstChild HierarchyRequestError: DOM Exception 3
+FAIL 8,4: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Efghijkl" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 8,5: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedPara1
+FAIL 8,5: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedPara1 assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 8,6: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedPara1.firstChild
+FAIL 8,6: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedPara1.firstChild assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 8,7: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node document
+PASS 8,7: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node document
+PASS 8,8: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedDiv
+FAIL 8,8: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedDiv assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 8,9: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignDoc
+PASS 8,9: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignDoc
+PASS 8,10: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignPara2
+FAIL 8,10: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignPara2 assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 8,11: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node xmlDoc
+PASS 8,11: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node xmlDoc
+PASS 8,12: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node xmlElement
+FAIL 8,12: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node xmlElement assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 8,13: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedTextNode
+FAIL 8,13: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedTextNode assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 8,14: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignTextNode
+FAIL 8,14: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignTextNode assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 8,15: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node processingInstruction
+FAIL 8,15: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node processingInstruction assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 8,16: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedProcessingInstruction
+FAIL 8,16: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedProcessingInstruction assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 8,17: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node comment
+FAIL 8,17: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node comment assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 8,18: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedComment
+FAIL 8,18: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedComment assert_equals: Unexpected endOffset after insertNode() expected 2 but got 0
+PASS 8,19: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node docfrag
+FAIL 8,19: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node docfrag assert_equals: Unexpected endOffset after insertNode() expected 1 but got 0
+PASS 8,20: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node doctype
+PASS 8,20: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node doctype
+PASS 8,21: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignDoctype
+PASS 8,21: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignDoctype
+PASS 9,0: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node paras[0]
+PASS 9,0: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node paras[0]
+PASS 9,1: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node paras[0].firstChild
+PASS 9,1: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node paras[0].firstChild
+PASS 9,2: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node paras[1].firstChild
+PASS 9,2: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node paras[1].firstChild
+PASS 9,3: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignPara1
+PASS 9,3: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignPara1
+FAIL 9,4: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignPara1.firstChild HierarchyRequestError: DOM Exception 3
+FAIL 9,4: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignPara1.firstChild assert_true: First differing node: expected Text node "Ef", got Text node "Efghijkl" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 9,5: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedPara1
+PASS 9,5: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedPara1
+PASS 9,6: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedPara1.firstChild
+PASS 9,6: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedPara1.firstChild
+PASS 9,7: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node document
+PASS 9,7: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node document
+PASS 9,8: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedDiv
+PASS 9,8: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedDiv
+PASS 9,9: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignDoc
+PASS 9,9: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignDoc
+PASS 9,10: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignPara2
+PASS 9,10: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignPara2
+PASS 9,11: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node xmlDoc
+PASS 9,11: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node xmlDoc
+PASS 9,12: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node xmlElement
+PASS 9,12: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node xmlElement
+PASS 9,13: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedTextNode
+PASS 9,13: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedTextNode
+PASS 9,14: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignTextNode
+PASS 9,14: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignTextNode
+PASS 9,15: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node processingInstruction
+PASS 9,15: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node processingInstruction
+PASS 9,16: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedProcessingInstruction
+PASS 9,16: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedProcessingInstruction
+PASS 9,17: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node comment
+PASS 9,17: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node comment
+PASS 9,18: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedComment
+PASS 9,18: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedComment
+PASS 9,19: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node docfrag
+PASS 9,19: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node docfrag
+PASS 9,20: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node doctype
+PASS 9,20: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node doctype
+PASS 9,21: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignDoctype
+PASS 9,21: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignDoctype
+PASS 10,0: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node paras[0]
+PASS 10,0: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node paras[0]
+PASS 10,1: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node paras[0].firstChild
+PASS 10,1: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node paras[0].firstChild
+PASS 10,2: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node paras[1].firstChild
+PASS 10,2: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node paras[1].firstChild
+PASS 10,3: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node foreignPara1
+PASS 10,3: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node foreignPara1
+PASS 10,4: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node foreignPara1.firstChild
+PASS 10,4: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node foreignPara1.firstChild
+PASS 10,5: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node detachedPara1
+PASS 10,5: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node detachedPara1
+PASS 10,6: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node detachedPara1.firstChild
+PASS 10,6: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node detachedPara1.firstChild
+PASS 10,7: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node document
+PASS 10,7: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node document
+PASS 10,8: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node detachedDiv
+PASS 10,8: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node detachedDiv
+PASS 10,9: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node foreignDoc
+PASS 10,9: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node foreignDoc
+PASS 10,10: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node foreignPara2
+PASS 10,10: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node foreignPara2
+PASS 10,11: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node xmlDoc
+PASS 10,11: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node xmlDoc
+PASS 10,12: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node xmlElement
+PASS 10,12: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node xmlElement
+PASS 10,13: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node detachedTextNode
+PASS 10,13: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node detachedTextNode
+PASS 10,14: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node foreignTextNode
+PASS 10,14: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node foreignTextNode
+PASS 10,15: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node processingInstruction
+PASS 10,15: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node processingInstruction
+PASS 10,16: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node detachedProcessingInstruction
+PASS 10,16: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node detachedProcessingInstruction
+PASS 10,17: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node comment
+PASS 10,17: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node comment
+PASS 10,18: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node detachedComment
+PASS 10,18: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node detachedComment
+PASS 10,19: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node docfrag
+PASS 10,19: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node docfrag
+PASS 10,20: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node doctype
+PASS 10,20: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node doctype
+PASS 10,21: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node foreignDoctype
+PASS 10,21: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node foreignDoctype
+PASS 11,0: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node paras[0]
+PASS 11,0: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node paras[0]
+PASS 11,1: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node paras[0].firstChild
+PASS 11,1: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node paras[0].firstChild
+PASS 11,2: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node paras[1].firstChild
+PASS 11,2: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node paras[1].firstChild
+PASS 11,3: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node foreignPara1
+PASS 11,3: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node foreignPara1
+PASS 11,4: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node foreignPara1.firstChild
+PASS 11,4: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node foreignPara1.firstChild
+PASS 11,5: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node detachedPara1
+PASS 11,5: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node detachedPara1
+PASS 11,6: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node detachedPara1.firstChild
+PASS 11,6: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node detachedPara1.firstChild
+PASS 11,7: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node document
+PASS 11,7: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node document
+PASS 11,8: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node detachedDiv
+PASS 11,8: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node detachedDiv
+PASS 11,9: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node foreignDoc
+PASS 11,9: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node foreignDoc
+PASS 11,10: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node foreignPara2
+PASS 11,10: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node foreignPara2
+PASS 11,11: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node xmlDoc
+PASS 11,11: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node xmlDoc
+PASS 11,12: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node xmlElement
+PASS 11,12: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node xmlElement
+PASS 11,13: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node detachedTextNode
+PASS 11,13: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node detachedTextNode
+PASS 11,14: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node foreignTextNode
+PASS 11,14: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node foreignTextNode
+PASS 11,15: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node processingInstruction
+PASS 11,15: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node processingInstruction
+PASS 11,16: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node detachedProcessingInstruction
+PASS 11,16: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node detachedProcessingInstruction
+PASS 11,17: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node comment
+PASS 11,17: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node comment
+PASS 11,18: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node detachedComment
+PASS 11,18: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node detachedComment
+PASS 11,19: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node docfrag
+PASS 11,19: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node docfrag
+PASS 11,20: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node doctype
+PASS 11,20: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node doctype
+PASS 11,21: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node foreignDoctype
+PASS 11,21: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node foreignDoctype
+PASS 12,0: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node paras[0]
+PASS 12,0: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node paras[0]
+PASS 12,1: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node paras[0].firstChild
+PASS 12,1: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node paras[0].firstChild
+PASS 12,2: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node paras[1].firstChild
+PASS 12,2: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node paras[1].firstChild
+PASS 12,3: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node foreignPara1
+PASS 12,3: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node foreignPara1
+PASS 12,4: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node foreignPara1.firstChild
+PASS 12,4: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node foreignPara1.firstChild
+PASS 12,5: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node detachedPara1
+PASS 12,5: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node detachedPara1
+PASS 12,6: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node detachedPara1.firstChild
+PASS 12,6: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node detachedPara1.firstChild
+PASS 12,7: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node document
+PASS 12,7: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node document
+PASS 12,8: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node detachedDiv
+PASS 12,8: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node detachedDiv
+PASS 12,9: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node foreignDoc
+PASS 12,9: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node foreignDoc
+PASS 12,10: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node foreignPara2
+PASS 12,10: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node foreignPara2
+PASS 12,11: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node xmlDoc
+PASS 12,11: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node xmlDoc
+PASS 12,12: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node xmlElement
+PASS 12,12: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node xmlElement
+PASS 12,13: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node detachedTextNode
+PASS 12,13: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node detachedTextNode
+PASS 12,14: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node foreignTextNode
+PASS 12,14: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node foreignTextNode
+PASS 12,15: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node processingInstruction
+PASS 12,15: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node processingInstruction
+PASS 12,16: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node detachedProcessingInstruction
+PASS 12,16: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node detachedProcessingInstruction
+PASS 12,17: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node comment
+PASS 12,17: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node comment
+PASS 12,18: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node detachedComment
+PASS 12,18: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node detachedComment
+PASS 12,19: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node docfrag
+PASS 12,19: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node docfrag
+PASS 12,20: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node doctype
+PASS 12,20: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node doctype
+PASS 12,21: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node foreignDoctype
+PASS 12,21: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node foreignDoctype
+PASS 13,0: resulting DOM for range [document.head, 1, document.head, 1], node paras[0]
+PASS 13,0: resulting range position for range [document.head, 1, document.head, 1], node paras[0]
+PASS 13,1: resulting DOM for range [document.head, 1, document.head, 1], node paras[0].firstChild
+PASS 13,1: resulting range position for range [document.head, 1, document.head, 1], node paras[0].firstChild
+PASS 13,2: resulting DOM for range [document.head, 1, document.head, 1], node paras[1].firstChild
+PASS 13,2: resulting range position for range [document.head, 1, document.head, 1], node paras[1].firstChild
+PASS 13,3: resulting DOM for range [document.head, 1, document.head, 1], node foreignPara1
+PASS 13,3: resulting range position for range [document.head, 1, document.head, 1], node foreignPara1
+PASS 13,4: resulting DOM for range [document.head, 1, document.head, 1], node foreignPara1.firstChild
+PASS 13,4: resulting range position for range [document.head, 1, document.head, 1], node foreignPara1.firstChild
+PASS 13,5: resulting DOM for range [document.head, 1, document.head, 1], node detachedPara1
+PASS 13,5: resulting range position for range [document.head, 1, document.head, 1], node detachedPara1
+PASS 13,6: resulting DOM for range [document.head, 1, document.head, 1], node detachedPara1.firstChild
+PASS 13,6: resulting range position for range [document.head, 1, document.head, 1], node detachedPara1.firstChild
+PASS 13,7: resulting DOM for range [document.head, 1, document.head, 1], node document
+PASS 13,7: resulting range position for range [document.head, 1, document.head, 1], node document
+PASS 13,8: resulting DOM for range [document.head, 1, document.head, 1], node detachedDiv
+PASS 13,8: resulting range position for range [document.head, 1, document.head, 1], node detachedDiv
+PASS 13,9: resulting DOM for range [document.head, 1, document.head, 1], node foreignDoc
+PASS 13,9: resulting range position for range [document.head, 1, document.head, 1], node foreignDoc
+PASS 13,10: resulting DOM for range [document.head, 1, document.head, 1], node foreignPara2
+PASS 13,10: resulting range position for range [document.head, 1, document.head, 1], node foreignPara2
+PASS 13,11: resulting DOM for range [document.head, 1, document.head, 1], node xmlDoc
+PASS 13,11: resulting range position for range [document.head, 1, document.head, 1], node xmlDoc
+PASS 13,12: resulting DOM for range [document.head, 1, document.head, 1], node xmlElement
+PASS 13,12: resulting range position for range [document.head, 1, document.head, 1], node xmlElement
+PASS 13,13: resulting DOM for range [document.head, 1, document.head, 1], node detachedTextNode
+PASS 13,13: resulting range position for range [document.head, 1, document.head, 1], node detachedTextNode
+PASS 13,14: resulting DOM for range [document.head, 1, document.head, 1], node foreignTextNode
+PASS 13,14: resulting range position for range [document.head, 1, document.head, 1], node foreignTextNode
+PASS 13,15: resulting DOM for range [document.head, 1, document.head, 1], node processingInstruction
+PASS 13,15: resulting range position for range [document.head, 1, document.head, 1], node processingInstruction
+PASS 13,16: resulting DOM for range [document.head, 1, document.head, 1], node detachedProcessingInstruction
+PASS 13,16: resulting range position for range [document.head, 1, document.head, 1], node detachedProcessingInstruction
+PASS 13,17: resulting DOM for range [document.head, 1, document.head, 1], node comment
+PASS 13,17: resulting range position for range [document.head, 1, document.head, 1], node comment
+PASS 13,18: resulting DOM for range [document.head, 1, document.head, 1], node detachedComment
+PASS 13,18: resulting range position for range [document.head, 1, document.head, 1], node detachedComment
+PASS 13,19: resulting DOM for range [document.head, 1, document.head, 1], node docfrag
+PASS 13,19: resulting range position for range [document.head, 1, document.head, 1], node docfrag
+PASS 13,20: resulting DOM for range [document.head, 1, document.head, 1], node doctype
+PASS 13,20: resulting range position for range [document.head, 1, document.head, 1], node doctype
+PASS 13,21: resulting DOM for range [document.head, 1, document.head, 1], node foreignDoctype
+PASS 13,21: resulting range position for range [document.head, 1, document.head, 1], node foreignDoctype
+PASS 14,0: resulting DOM for range [document.body, 4, document.body, 5], node paras[0]
+PASS 14,0: resulting range position for range [document.body, 4, document.body, 5], node paras[0]
+PASS 14,1: resulting DOM for range [document.body, 4, document.body, 5], node paras[0].firstChild
+PASS 14,1: resulting range position for range [document.body, 4, document.body, 5], node paras[0].firstChild
+PASS 14,2: resulting DOM for range [document.body, 4, document.body, 5], node paras[1].firstChild
+PASS 14,2: resulting range position for range [document.body, 4, document.body, 5], node paras[1].firstChild
+PASS 14,3: resulting DOM for range [document.body, 4, document.body, 5], node foreignPara1
+PASS 14,3: resulting range position for range [document.body, 4, document.body, 5], node foreignPara1
+PASS 14,4: resulting DOM for range [document.body, 4, document.body, 5], node foreignPara1.firstChild
+PASS 14,4: resulting range position for range [document.body, 4, document.body, 5], node foreignPara1.firstChild
+PASS 14,5: resulting DOM for range [document.body, 4, document.body, 5], node detachedPara1
+PASS 14,5: resulting range position for range [document.body, 4, document.body, 5], node detachedPara1
+PASS 14,6: resulting DOM for range [document.body, 4, document.body, 5], node detachedPara1.firstChild
+PASS 14,6: resulting range position for range [document.body, 4, document.body, 5], node detachedPara1.firstChild
+PASS 14,7: resulting DOM for range [document.body, 4, document.body, 5], node document
+PASS 14,7: resulting range position for range [document.body, 4, document.body, 5], node document
+PASS 14,8: resulting DOM for range [document.body, 4, document.body, 5], node detachedDiv
+PASS 14,8: resulting range position for range [document.body, 4, document.body, 5], node detachedDiv
+PASS 14,9: resulting DOM for range [document.body, 4, document.body, 5], node foreignDoc
+PASS 14,9: resulting range position for range [document.body, 4, document.body, 5], node foreignDoc
+PASS 14,10: resulting DOM for range [document.body, 4, document.body, 5], node foreignPara2
+PASS 14,10: resulting range position for range [document.body, 4, document.body, 5], node foreignPara2
+PASS 14,11: resulting DOM for range [document.body, 4, document.body, 5], node xmlDoc
+PASS 14,11: resulting range position for range [document.body, 4, document.body, 5], node xmlDoc
+PASS 14,12: resulting DOM for range [document.body, 4, document.body, 5], node xmlElement
+PASS 14,12: resulting range position for range [document.body, 4, document.body, 5], node xmlElement
+PASS 14,13: resulting DOM for range [document.body, 4, document.body, 5], node detachedTextNode
+PASS 14,13: resulting range position for range [document.body, 4, document.body, 5], node detachedTextNode
+PASS 14,14: resulting DOM for range [document.body, 4, document.body, 5], node foreignTextNode
+PASS 14,14: resulting range position for range [document.body, 4, document.body, 5], node foreignTextNode
+PASS 14,15: resulting DOM for range [document.body, 4, document.body, 5], node processingInstruction
+PASS 14,15: resulting range position for range [document.body, 4, document.body, 5], node processingInstruction
+PASS 14,16: resulting DOM for range [document.body, 4, document.body, 5], node detachedProcessingInstruction
+PASS 14,16: resulting range position for range [document.body, 4, document.body, 5], node detachedProcessingInstruction
+PASS 14,17: resulting DOM for range [document.body, 4, document.body, 5], node comment
+PASS 14,17: resulting range position for range [document.body, 4, document.body, 5], node comment
+PASS 14,18: resulting DOM for range [document.body, 4, document.body, 5], node detachedComment
+PASS 14,18: resulting range position for range [document.body, 4, document.body, 5], node detachedComment
+PASS 14,19: resulting DOM for range [document.body, 4, document.body, 5], node docfrag
+PASS 14,19: resulting range position for range [document.body, 4, document.body, 5], node docfrag
+PASS 14,20: resulting DOM for range [document.body, 4, document.body, 5], node doctype
+PASS 14,20: resulting range position for range [document.body, 4, document.body, 5], node doctype
+PASS 14,21: resulting DOM for range [document.body, 4, document.body, 5], node foreignDoctype
+PASS 14,21: resulting range position for range [document.body, 4, document.body, 5], node foreignDoctype
+PASS 15,0: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node paras[0]
+PASS 15,0: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node paras[0]
+PASS 15,1: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node paras[0].firstChild
+PASS 15,1: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node paras[0].firstChild
+PASS 15,2: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node paras[1].firstChild
+PASS 15,2: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node paras[1].firstChild
+PASS 15,3: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignPara1
+PASS 15,3: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignPara1
+PASS 15,4: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignPara1.firstChild
+PASS 15,4: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignPara1.firstChild
+PASS 15,5: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedPara1
+PASS 15,5: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedPara1
+PASS 15,6: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedPara1.firstChild
+PASS 15,6: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedPara1.firstChild
+PASS 15,7: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node document
+PASS 15,7: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node document
+PASS 15,8: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedDiv
+PASS 15,8: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedDiv
+PASS 15,9: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignDoc
+PASS 15,9: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignDoc
+PASS 15,10: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignPara2
+PASS 15,10: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignPara2
+PASS 15,11: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node xmlDoc
+PASS 15,11: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node xmlDoc
+PASS 15,12: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node xmlElement
+PASS 15,12: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node xmlElement
+PASS 15,13: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedTextNode
+PASS 15,13: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedTextNode
+PASS 15,14: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignTextNode
+PASS 15,14: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignTextNode
+PASS 15,15: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node processingInstruction
+PASS 15,15: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node processingInstruction
+PASS 15,16: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedProcessingInstruction
+PASS 15,16: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedProcessingInstruction
+PASS 15,17: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node comment
+PASS 15,17: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node comment
+PASS 15,18: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedComment
+PASS 15,18: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedComment
+PASS 15,19: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node docfrag
+PASS 15,19: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node docfrag
+PASS 15,20: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node doctype
+PASS 15,20: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node doctype
+PASS 15,21: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignDoctype
+PASS 15,21: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignDoctype
+PASS 16,0: resulting DOM for range [paras[0], 0, paras[0], 1], node paras[0]
+PASS 16,0: resulting range position for range [paras[0], 0, paras[0], 1], node paras[0]
+PASS 16,1: resulting DOM for range [paras[0], 0, paras[0], 1], node paras[0].firstChild
+PASS 16,1: resulting range position for range [paras[0], 0, paras[0], 1], node paras[0].firstChild
+PASS 16,2: resulting DOM for range [paras[0], 0, paras[0], 1], node paras[1].firstChild
+PASS 16,2: resulting range position for range [paras[0], 0, paras[0], 1], node paras[1].firstChild
+PASS 16,3: resulting DOM for range [paras[0], 0, paras[0], 1], node foreignPara1
+PASS 16,3: resulting range position for range [paras[0], 0, paras[0], 1], node foreignPara1
+PASS 16,4: resulting DOM for range [paras[0], 0, paras[0], 1], node foreignPara1.firstChild
+PASS 16,4: resulting range position for range [paras[0], 0, paras[0], 1], node foreignPara1.firstChild
+PASS 16,5: resulting DOM for range [paras[0], 0, paras[0], 1], node detachedPara1
+PASS 16,5: resulting range position for range [paras[0], 0, paras[0], 1], node detachedPara1
+PASS 16,6: resulting DOM for range [paras[0], 0, paras[0], 1], node detachedPara1.firstChild
+PASS 16,6: resulting range position for range [paras[0], 0, paras[0], 1], node detachedPara1.firstChild
+PASS 16,7: resulting DOM for range [paras[0], 0, paras[0], 1], node document
+PASS 16,7: resulting range position for range [paras[0], 0, paras[0], 1], node document
+PASS 16,8: resulting DOM for range [paras[0], 0, paras[0], 1], node detachedDiv
+PASS 16,8: resulting range position for range [paras[0], 0, paras[0], 1], node detachedDiv
+PASS 16,9: resulting DOM for range [paras[0], 0, paras[0], 1], node foreignDoc
+PASS 16,9: resulting range position for range [paras[0], 0, paras[0], 1], node foreignDoc
+PASS 16,10: resulting DOM for range [paras[0], 0, paras[0], 1], node foreignPara2
+PASS 16,10: resulting range position for range [paras[0], 0, paras[0], 1], node foreignPara2
+PASS 16,11: resulting DOM for range [paras[0], 0, paras[0], 1], node xmlDoc
+PASS 16,11: resulting range position for range [paras[0], 0, paras[0], 1], node xmlDoc
+PASS 16,12: resulting DOM for range [paras[0], 0, paras[0], 1], node xmlElement
+PASS 16,12: resulting range position for range [paras[0], 0, paras[0], 1], node xmlElement
+PASS 16,13: resulting DOM for range [paras[0], 0, paras[0], 1], node detachedTextNode
+PASS 16,13: resulting range position for range [paras[0], 0, paras[0], 1], node detachedTextNode
+PASS 16,14: resulting DOM for range [paras[0], 0, paras[0], 1], node foreignTextNode
+PASS 16,14: resulting range position for range [paras[0], 0, paras[0], 1], node foreignTextNode
+PASS 16,15: resulting DOM for range [paras[0], 0, paras[0], 1], node processingInstruction
+PASS 16,15: resulting range position for range [paras[0], 0, paras[0], 1], node processingInstruction
+PASS 16,16: resulting DOM for range [paras[0], 0, paras[0], 1], node detachedProcessingInstruction
+PASS 16,16: resulting range position for range [paras[0], 0, paras[0], 1], node detachedProcessingInstruction
+PASS 16,17: resulting DOM for range [paras[0], 0, paras[0], 1], node comment
+PASS 16,17: resulting range position for range [paras[0], 0, paras[0], 1], node comment
+PASS 16,18: resulting DOM for range [paras[0], 0, paras[0], 1], node detachedComment
+PASS 16,18: resulting range position for range [paras[0], 0, paras[0], 1], node detachedComment
+PASS 16,19: resulting DOM for range [paras[0], 0, paras[0], 1], node docfrag
+PASS 16,19: resulting range position for range [paras[0], 0, paras[0], 1], node docfrag
+PASS 16,20: resulting DOM for range [paras[0], 0, paras[0], 1], node doctype
+PASS 16,20: resulting range position for range [paras[0], 0, paras[0], 1], node doctype
+PASS 16,21: resulting DOM for range [paras[0], 0, paras[0], 1], node foreignDoctype
+PASS 16,21: resulting range position for range [paras[0], 0, paras[0], 1], node foreignDoctype
+PASS 17,0: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node paras[0]
+PASS 17,0: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node paras[0]
+PASS 17,1: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node paras[0].firstChild
+PASS 17,1: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node paras[0].firstChild
+PASS 17,2: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node paras[1].firstChild
+PASS 17,2: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node paras[1].firstChild
+PASS 17,3: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node foreignPara1
+PASS 17,3: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node foreignPara1
+PASS 17,4: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node foreignPara1.firstChild
+PASS 17,4: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node foreignPara1.firstChild
+PASS 17,5: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node detachedPara1
+PASS 17,5: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node detachedPara1
+PASS 17,6: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node detachedPara1.firstChild
+PASS 17,6: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node detachedPara1.firstChild
+PASS 17,7: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node document
+PASS 17,7: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node document
+PASS 17,8: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node detachedDiv
+PASS 17,8: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node detachedDiv
+PASS 17,9: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node foreignDoc
+PASS 17,9: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node foreignDoc
+PASS 17,10: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node foreignPara2
+PASS 17,10: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node foreignPara2
+PASS 17,11: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node xmlDoc
+PASS 17,11: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node xmlDoc
+PASS 17,12: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node xmlElement
+PASS 17,12: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node xmlElement
+PASS 17,13: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node detachedTextNode
+PASS 17,13: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node detachedTextNode
+PASS 17,14: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node foreignTextNode
+PASS 17,14: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node foreignTextNode
+PASS 17,15: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node processingInstruction
+PASS 17,15: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node processingInstruction
+PASS 17,16: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node detachedProcessingInstruction
+PASS 17,16: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node detachedProcessingInstruction
+PASS 17,17: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node comment
+PASS 17,17: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node comment
+PASS 17,18: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node detachedComment
+PASS 17,18: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node detachedComment
+PASS 17,19: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node docfrag
+PASS 17,19: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node docfrag
+PASS 17,20: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node doctype
+PASS 17,20: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node doctype
+PASS 17,21: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node foreignDoctype
+PASS 17,21: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node foreignDoctype
+PASS 18,0: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node paras[0]
+PASS 18,0: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node paras[0]
+FAIL 18,1: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node paras[0].firstChild HierarchyRequestError: DOM Exception 3
+FAIL 18,1: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node paras[0].firstChild assert_true: First differing node: expected Text node "", got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 18,2: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node paras[1].firstChild
+PASS 18,2: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node paras[1].firstChild
+PASS 18,3: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignPara1
+PASS 18,3: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignPara1
+PASS 18,4: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignPara1.firstChild
+PASS 18,4: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignPara1.firstChild
+PASS 18,5: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedPara1
+PASS 18,5: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedPara1
+PASS 18,6: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedPara1.firstChild
+PASS 18,6: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedPara1.firstChild
+PASS 18,7: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node document
+PASS 18,7: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node document
+PASS 18,8: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedDiv
+PASS 18,8: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedDiv
+PASS 18,9: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignDoc
+PASS 18,9: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignDoc
+PASS 18,10: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignPara2
+PASS 18,10: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignPara2
+PASS 18,11: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node xmlDoc
+PASS 18,11: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node xmlDoc
+PASS 18,12: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node xmlElement
+PASS 18,12: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node xmlElement
+PASS 18,13: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedTextNode
+PASS 18,13: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedTextNode
+PASS 18,14: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignTextNode
+PASS 18,14: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignTextNode
+PASS 18,15: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node processingInstruction
+PASS 18,15: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node processingInstruction
+PASS 18,16: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedProcessingInstruction
+PASS 18,16: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedProcessingInstruction
+PASS 18,17: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node comment
+PASS 18,17: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node comment
+PASS 18,18: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedComment
+PASS 18,18: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedComment
+PASS 18,19: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node docfrag
+PASS 18,19: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node docfrag
+PASS 18,20: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node doctype
+PASS 18,20: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node doctype
+PASS 18,21: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignDoctype
+PASS 18,21: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignDoctype
+PASS 19,0: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node paras[0]
+PASS 19,0: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node paras[0]
+FAIL 19,1: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node paras[0].firstChild HierarchyRequestError: DOM Exception 3
+FAIL 19,1: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node paras[0].firstChild assert_true: First differing node: expected Text node "", got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 19,2: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node paras[1].firstChild
+PASS 19,2: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node paras[1].firstChild
+PASS 19,3: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignPara1
+PASS 19,3: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignPara1
+PASS 19,4: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignPara1.firstChild
+PASS 19,4: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignPara1.firstChild
+PASS 19,5: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedPara1
+PASS 19,5: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedPara1
+PASS 19,6: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedPara1.firstChild
+PASS 19,6: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedPara1.firstChild
+PASS 19,7: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node document
+PASS 19,7: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node document
+PASS 19,8: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedDiv
+PASS 19,8: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedDiv
+PASS 19,9: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignDoc
+PASS 19,9: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignDoc
+PASS 19,10: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignPara2
+PASS 19,10: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignPara2
+PASS 19,11: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node xmlDoc
+PASS 19,11: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node xmlDoc
+PASS 19,12: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node xmlElement
+PASS 19,12: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node xmlElement
+PASS 19,13: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedTextNode
+PASS 19,13: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedTextNode
+PASS 19,14: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignTextNode
+PASS 19,14: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignTextNode
+PASS 19,15: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node processingInstruction
+PASS 19,15: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node processingInstruction
+PASS 19,16: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedProcessingInstruction
+PASS 19,16: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedProcessingInstruction
+PASS 19,17: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node comment
+PASS 19,17: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node comment
+PASS 19,18: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedComment
+PASS 19,18: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedComment
+PASS 19,19: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node docfrag
+PASS 19,19: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node docfrag
+PASS 19,20: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node doctype
+PASS 19,20: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node doctype
+PASS 19,21: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignDoctype
+PASS 19,21: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignDoctype
+PASS 20,0: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node paras[0]
+PASS 20,0: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node paras[0]
+FAIL 20,1: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node paras[0].firstChild HierarchyRequestError: DOM Exception 3
+FAIL 20,1: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node paras[0].firstChild assert_true: First differing node: expected Text node "Äb", got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 20,2: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node paras[1].firstChild
+PASS 20,2: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node paras[1].firstChild
+PASS 20,3: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node foreignPara1
+PASS 20,3: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node foreignPara1
+PASS 20,4: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node foreignPara1.firstChild
+PASS 20,4: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node foreignPara1.firstChild
+PASS 20,5: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node detachedPara1
+PASS 20,5: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node detachedPara1
+PASS 20,6: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node detachedPara1.firstChild
+PASS 20,6: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node detachedPara1.firstChild
+PASS 20,7: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node document
+PASS 20,7: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node document
+PASS 20,8: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node detachedDiv
+PASS 20,8: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node detachedDiv
+PASS 20,9: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node foreignDoc
+PASS 20,9: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node foreignDoc
+PASS 20,10: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node foreignPara2
+PASS 20,10: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node foreignPara2
+PASS 20,11: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node xmlDoc
+PASS 20,11: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node xmlDoc
+PASS 20,12: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node xmlElement
+PASS 20,12: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node xmlElement
+PASS 20,13: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node detachedTextNode
+PASS 20,13: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node detachedTextNode
+PASS 20,14: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node foreignTextNode
+PASS 20,14: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node foreignTextNode
+PASS 20,15: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node processingInstruction
+PASS 20,15: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node processingInstruction
+PASS 20,16: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node detachedProcessingInstruction
+PASS 20,16: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node detachedProcessingInstruction
+PASS 20,17: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node comment
+PASS 20,17: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node comment
+PASS 20,18: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node detachedComment
+PASS 20,18: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node detachedComment
+PASS 20,19: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node docfrag
+PASS 20,19: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node docfrag
+PASS 20,20: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node doctype
+PASS 20,20: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node doctype
+PASS 20,21: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node foreignDoctype
+PASS 20,21: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node foreignDoctype
+PASS 21,0: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node paras[0]
+PASS 21,0: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node paras[0]
+PASS 21,1: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node paras[0].firstChild
+FAIL 21,1: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node paras[0].firstChild assert_equals: Unexpected endOffset after insertNode() expected 1 but got 7
+PASS 21,2: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node paras[1].firstChild
+PASS 21,2: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node paras[1].firstChild
+PASS 21,3: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node foreignPara1
+PASS 21,3: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node foreignPara1
+PASS 21,4: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node foreignPara1.firstChild
+PASS 21,4: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node foreignPara1.firstChild
+PASS 21,5: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node detachedPara1
+PASS 21,5: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node detachedPara1
+PASS 21,6: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node detachedPara1.firstChild
+PASS 21,6: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node detachedPara1.firstChild
+PASS 21,7: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node document
+PASS 21,7: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node document
+PASS 21,8: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node detachedDiv
+PASS 21,8: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node detachedDiv
+PASS 21,9: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node foreignDoc
+PASS 21,9: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node foreignDoc
+PASS 21,10: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node foreignPara2
+PASS 21,10: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node foreignPara2
+PASS 21,11: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node xmlDoc
+PASS 21,11: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node xmlDoc
+PASS 21,12: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node xmlElement
+PASS 21,12: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node xmlElement
+PASS 21,13: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node detachedTextNode
+PASS 21,13: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node detachedTextNode
+PASS 21,14: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node foreignTextNode
+PASS 21,14: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node foreignTextNode
+PASS 21,15: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node processingInstruction
+PASS 21,15: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node processingInstruction
+PASS 21,16: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node detachedProcessingInstruction
+PASS 21,16: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node detachedProcessingInstruction
+PASS 21,17: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node comment
+PASS 21,17: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node comment
+PASS 21,18: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node detachedComment
+PASS 21,18: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node detachedComment
+PASS 21,19: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node docfrag
+PASS 21,19: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node docfrag
+PASS 21,20: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node doctype
+PASS 21,20: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node doctype
+PASS 21,21: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node foreignDoctype
+PASS 21,21: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node foreignDoctype
+PASS 22,0: resulting DOM for range [testDiv, 2, paras[4], 1], node paras[0]
+PASS 22,0: resulting range position for range [testDiv, 2, paras[4], 1], node paras[0]
+PASS 22,1: resulting DOM for range [testDiv, 2, paras[4], 1], node paras[0].firstChild
+PASS 22,1: resulting range position for range [testDiv, 2, paras[4], 1], node paras[0].firstChild
+PASS 22,2: resulting DOM for range [testDiv, 2, paras[4], 1], node paras[1].firstChild
+PASS 22,2: resulting range position for range [testDiv, 2, paras[4], 1], node paras[1].firstChild
+PASS 22,3: resulting DOM for range [testDiv, 2, paras[4], 1], node foreignPara1
+PASS 22,3: resulting range position for range [testDiv, 2, paras[4], 1], node foreignPara1
+PASS 22,4: resulting DOM for range [testDiv, 2, paras[4], 1], node foreignPara1.firstChild
+PASS 22,4: resulting range position for range [testDiv, 2, paras[4], 1], node foreignPara1.firstChild
+PASS 22,5: resulting DOM for range [testDiv, 2, paras[4], 1], node detachedPara1
+PASS 22,5: resulting range position for range [testDiv, 2, paras[4], 1], node detachedPara1
+PASS 22,6: resulting DOM for range [testDiv, 2, paras[4], 1], node detachedPara1.firstChild
+PASS 22,6: resulting range position for range [testDiv, 2, paras[4], 1], node detachedPara1.firstChild
+PASS 22,7: resulting DOM for range [testDiv, 2, paras[4], 1], node document
+PASS 22,7: resulting range position for range [testDiv, 2, paras[4], 1], node document
+PASS 22,8: resulting DOM for range [testDiv, 2, paras[4], 1], node detachedDiv
+PASS 22,8: resulting range position for range [testDiv, 2, paras[4], 1], node detachedDiv
+PASS 22,9: resulting DOM for range [testDiv, 2, paras[4], 1], node foreignDoc
+PASS 22,9: resulting range position for range [testDiv, 2, paras[4], 1], node foreignDoc
+PASS 22,10: resulting DOM for range [testDiv, 2, paras[4], 1], node foreignPara2
+PASS 22,10: resulting range position for range [testDiv, 2, paras[4], 1], node foreignPara2
+PASS 22,11: resulting DOM for range [testDiv, 2, paras[4], 1], node xmlDoc
+PASS 22,11: resulting range position for range [testDiv, 2, paras[4], 1], node xmlDoc
+PASS 22,12: resulting DOM for range [testDiv, 2, paras[4], 1], node xmlElement
+PASS 22,12: resulting range position for range [testDiv, 2, paras[4], 1], node xmlElement
+PASS 22,13: resulting DOM for range [testDiv, 2, paras[4], 1], node detachedTextNode
+PASS 22,13: resulting range position for range [testDiv, 2, paras[4], 1], node detachedTextNode
+PASS 22,14: resulting DOM for range [testDiv, 2, paras[4], 1], node foreignTextNode
+PASS 22,14: resulting range position for range [testDiv, 2, paras[4], 1], node foreignTextNode
+PASS 22,15: resulting DOM for range [testDiv, 2, paras[4], 1], node processingInstruction
+PASS 22,15: resulting range position for range [testDiv, 2, paras[4], 1], node processingInstruction
+PASS 22,16: resulting DOM for range [testDiv, 2, paras[4], 1], node detachedProcessingInstruction
+PASS 22,16: resulting range position for range [testDiv, 2, paras[4], 1], node detachedProcessingInstruction
+PASS 22,17: resulting DOM for range [testDiv, 2, paras[4], 1], node comment
+PASS 22,17: resulting range position for range [testDiv, 2, paras[4], 1], node comment
+PASS 22,18: resulting DOM for range [testDiv, 2, paras[4], 1], node detachedComment
+PASS 22,18: resulting range position for range [testDiv, 2, paras[4], 1], node detachedComment
+PASS 22,19: resulting DOM for range [testDiv, 2, paras[4], 1], node docfrag
+PASS 22,19: resulting range position for range [testDiv, 2, paras[4], 1], node docfrag
+PASS 22,20: resulting DOM for range [testDiv, 2, paras[4], 1], node doctype
+PASS 22,20: resulting range position for range [testDiv, 2, paras[4], 1], node doctype
+PASS 22,21: resulting DOM for range [testDiv, 2, paras[4], 1], node foreignDoctype
+PASS 22,21: resulting range position for range [testDiv, 2, paras[4], 1], node foreignDoctype
+PASS 23,0: resulting DOM for range [document, 0, document, 1], node paras[0]
+PASS 23,0: resulting range position for range [document, 0, document, 1], node paras[0]
+PASS 23,1: resulting DOM for range [document, 0, document, 1], node paras[0].firstChild
+PASS 23,1: resulting range position for range [document, 0, document, 1], node paras[0].firstChild
+PASS 23,2: resulting DOM for range [document, 0, document, 1], node paras[1].firstChild
+PASS 23,2: resulting range position for range [document, 0, document, 1], node paras[1].firstChild
+PASS 23,3: resulting DOM for range [document, 0, document, 1], node foreignPara1
+PASS 23,3: resulting range position for range [document, 0, document, 1], node foreignPara1
+PASS 23,4: resulting DOM for range [document, 0, document, 1], node foreignPara1.firstChild
+PASS 23,4: resulting range position for range [document, 0, document, 1], node foreignPara1.firstChild
+PASS 23,5: resulting DOM for range [document, 0, document, 1], node detachedPara1
+PASS 23,5: resulting range position for range [document, 0, document, 1], node detachedPara1
+PASS 23,6: resulting DOM for range [document, 0, document, 1], node detachedPara1.firstChild
+PASS 23,6: resulting range position for range [document, 0, document, 1], node detachedPara1.firstChild
+PASS 23,7: resulting DOM for range [document, 0, document, 1], node document
+PASS 23,7: resulting range position for range [document, 0, document, 1], node document
+PASS 23,8: resulting DOM for range [document, 0, document, 1], node detachedDiv
+PASS 23,8: resulting range position for range [document, 0, document, 1], node detachedDiv
+PASS 23,9: resulting DOM for range [document, 0, document, 1], node foreignDoc
+PASS 23,9: resulting range position for range [document, 0, document, 1], node foreignDoc
+PASS 23,10: resulting DOM for range [document, 0, document, 1], node foreignPara2
+PASS 23,10: resulting range position for range [document, 0, document, 1], node foreignPara2
+PASS 23,11: resulting DOM for range [document, 0, document, 1], node xmlDoc
+PASS 23,11: resulting range position for range [document, 0, document, 1], node xmlDoc
+PASS 23,12: resulting DOM for range [document, 0, document, 1], node xmlElement
+PASS 23,12: resulting range position for range [document, 0, document, 1], node xmlElement
+PASS 23,13: resulting DOM for range [document, 0, document, 1], node detachedTextNode
+PASS 23,13: resulting range position for range [document, 0, document, 1], node detachedTextNode
+PASS 23,14: resulting DOM for range [document, 0, document, 1], node foreignTextNode
+PASS 23,14: resulting range position for range [document, 0, document, 1], node foreignTextNode
+PASS 23,15: resulting DOM for range [document, 0, document, 1], node processingInstruction
+PASS 23,15: resulting range position for range [document, 0, document, 1], node processingInstruction
+PASS 23,16: resulting DOM for range [document, 0, document, 1], node detachedProcessingInstruction
+PASS 23,16: resulting range position for range [document, 0, document, 1], node detachedProcessingInstruction
+PASS 23,17: resulting DOM for range [document, 0, document, 1], node comment
+PASS 23,17: resulting range position for range [document, 0, document, 1], node comment
+PASS 23,18: resulting DOM for range [document, 0, document, 1], node detachedComment
+PASS 23,18: resulting range position for range [document, 0, document, 1], node detachedComment
+PASS 23,19: resulting DOM for range [document, 0, document, 1], node docfrag
+PASS 23,19: resulting range position for range [document, 0, document, 1], node docfrag
+PASS 23,20: resulting DOM for range [document, 0, document, 1], node doctype
+PASS 23,20: resulting range position for range [document, 0, document, 1], node doctype
+PASS 23,21: resulting DOM for range [document, 0, document, 1], node foreignDoctype
+PASS 23,21: resulting range position for range [document, 0, document, 1], node foreignDoctype
+PASS 24,0: resulting DOM for range [document, 0, document, 2], node paras[0]
+PASS 24,0: resulting range position for range [document, 0, document, 2], node paras[0]
+PASS 24,1: resulting DOM for range [document, 0, document, 2], node paras[0].firstChild
+PASS 24,1: resulting range position for range [document, 0, document, 2], node paras[0].firstChild
+PASS 24,2: resulting DOM for range [document, 0, document, 2], node paras[1].firstChild
+PASS 24,2: resulting range position for range [document, 0, document, 2], node paras[1].firstChild
+PASS 24,3: resulting DOM for range [document, 0, document, 2], node foreignPara1
+PASS 24,3: resulting range position for range [document, 0, document, 2], node foreignPara1
+PASS 24,4: resulting DOM for range [document, 0, document, 2], node foreignPara1.firstChild
+PASS 24,4: resulting range position for range [document, 0, document, 2], node foreignPara1.firstChild
+PASS 24,5: resulting DOM for range [document, 0, document, 2], node detachedPara1
+PASS 24,5: resulting range position for range [document, 0, document, 2], node detachedPara1
+PASS 24,6: resulting DOM for range [document, 0, document, 2], node detachedPara1.firstChild
+PASS 24,6: resulting range position for range [document, 0, document, 2], node detachedPara1.firstChild
+PASS 24,7: resulting DOM for range [document, 0, document, 2], node document
+PASS 24,7: resulting range position for range [document, 0, document, 2], node document
+PASS 24,8: resulting DOM for range [document, 0, document, 2], node detachedDiv
+PASS 24,8: resulting range position for range [document, 0, document, 2], node detachedDiv
+PASS 24,9: resulting DOM for range [document, 0, document, 2], node foreignDoc
+PASS 24,9: resulting range position for range [document, 0, document, 2], node foreignDoc
+PASS 24,10: resulting DOM for range [document, 0, document, 2], node foreignPara2
+PASS 24,10: resulting range position for range [document, 0, document, 2], node foreignPara2
+PASS 24,11: resulting DOM for range [document, 0, document, 2], node xmlDoc
+PASS 24,11: resulting range position for range [document, 0, document, 2], node xmlDoc
+PASS 24,12: resulting DOM for range [document, 0, document, 2], node xmlElement
+PASS 24,12: resulting range position for range [document, 0, document, 2], node xmlElement
+PASS 24,13: resulting DOM for range [document, 0, document, 2], node detachedTextNode
+PASS 24,13: resulting range position for range [document, 0, document, 2], node detachedTextNode
+PASS 24,14: resulting DOM for range [document, 0, document, 2], node foreignTextNode
+PASS 24,14: resulting range position for range [document, 0, document, 2], node foreignTextNode
+PASS 24,15: resulting DOM for range [document, 0, document, 2], node processingInstruction
+PASS 24,15: resulting range position for range [document, 0, document, 2], node processingInstruction
+PASS 24,16: resulting DOM for range [document, 0, document, 2], node detachedProcessingInstruction
+PASS 24,16: resulting range position for range [document, 0, document, 2], node detachedProcessingInstruction
+PASS 24,17: resulting DOM for range [document, 0, document, 2], node comment
+PASS 24,17: resulting range position for range [document, 0, document, 2], node comment
+PASS 24,18: resulting DOM for range [document, 0, document, 2], node detachedComment
+PASS 24,18: resulting range position for range [document, 0, document, 2], node detachedComment
+PASS 24,19: resulting DOM for range [document, 0, document, 2], node docfrag
+PASS 24,19: resulting range position for range [document, 0, document, 2], node docfrag
+PASS 24,20: resulting DOM for range [document, 0, document, 2], node doctype
+PASS 24,20: resulting range position for range [document, 0, document, 2], node doctype
+PASS 24,21: resulting DOM for range [document, 0, document, 2], node foreignDoctype
+PASS 24,21: resulting range position for range [document, 0, document, 2], node foreignDoctype
+PASS 25,0: resulting DOM for range [comment, 2, comment, 3], node paras[0]
+PASS 25,0: resulting range position for range [comment, 2, comment, 3], node paras[0]
+PASS 25,1: resulting DOM for range [comment, 2, comment, 3], node paras[0].firstChild
+PASS 25,1: resulting range position for range [comment, 2, comment, 3], node paras[0].firstChild
+PASS 25,2: resulting DOM for range [comment, 2, comment, 3], node paras[1].firstChild
+PASS 25,2: resulting range position for range [comment, 2, comment, 3], node paras[1].firstChild
+PASS 25,3: resulting DOM for range [comment, 2, comment, 3], node foreignPara1
+PASS 25,3: resulting range position for range [comment, 2, comment, 3], node foreignPara1
+PASS 25,4: resulting DOM for range [comment, 2, comment, 3], node foreignPara1.firstChild
+PASS 25,4: resulting range position for range [comment, 2, comment, 3], node foreignPara1.firstChild
+PASS 25,5: resulting DOM for range [comment, 2, comment, 3], node detachedPara1
+PASS 25,5: resulting range position for range [comment, 2, comment, 3], node detachedPara1
+PASS 25,6: resulting DOM for range [comment, 2, comment, 3], node detachedPara1.firstChild
+PASS 25,6: resulting range position for range [comment, 2, comment, 3], node detachedPara1.firstChild
+PASS 25,7: resulting DOM for range [comment, 2, comment, 3], node document
+PASS 25,7: resulting range position for range [comment, 2, comment, 3], node document
+PASS 25,8: resulting DOM for range [comment, 2, comment, 3], node detachedDiv
+PASS 25,8: resulting range position for range [comment, 2, comment, 3], node detachedDiv
+PASS 25,9: resulting DOM for range [comment, 2, comment, 3], node foreignDoc
+PASS 25,9: resulting range position for range [comment, 2, comment, 3], node foreignDoc
+PASS 25,10: resulting DOM for range [comment, 2, comment, 3], node foreignPara2
+PASS 25,10: resulting range position for range [comment, 2, comment, 3], node foreignPara2
+PASS 25,11: resulting DOM for range [comment, 2, comment, 3], node xmlDoc
+PASS 25,11: resulting range position for range [comment, 2, comment, 3], node xmlDoc
+PASS 25,12: resulting DOM for range [comment, 2, comment, 3], node xmlElement
+PASS 25,12: resulting range position for range [comment, 2, comment, 3], node xmlElement
+PASS 25,13: resulting DOM for range [comment, 2, comment, 3], node detachedTextNode
+PASS 25,13: resulting range position for range [comment, 2, comment, 3], node detachedTextNode
+PASS 25,14: resulting DOM for range [comment, 2, comment, 3], node foreignTextNode
+PASS 25,14: resulting range position for range [comment, 2, comment, 3], node foreignTextNode
+PASS 25,15: resulting DOM for range [comment, 2, comment, 3], node processingInstruction
+PASS 25,15: resulting range position for range [comment, 2, comment, 3], node processingInstruction
+PASS 25,16: resulting DOM for range [comment, 2, comment, 3], node detachedProcessingInstruction
+PASS 25,16: resulting range position for range [comment, 2, comment, 3], node detachedProcessingInstruction
+PASS 25,17: resulting DOM for range [comment, 2, comment, 3], node comment
+PASS 25,17: resulting range position for range [comment, 2, comment, 3], node comment
+PASS 25,18: resulting DOM for range [comment, 2, comment, 3], node detachedComment
+PASS 25,18: resulting range position for range [comment, 2, comment, 3], node detachedComment
+PASS 25,19: resulting DOM for range [comment, 2, comment, 3], node docfrag
+PASS 25,19: resulting range position for range [comment, 2, comment, 3], node docfrag
+PASS 25,20: resulting DOM for range [comment, 2, comment, 3], node doctype
+PASS 25,20: resulting range position for range [comment, 2, comment, 3], node doctype
+PASS 25,21: resulting DOM for range [comment, 2, comment, 3], node foreignDoctype
+PASS 25,21: resulting range position for range [comment, 2, comment, 3], node foreignDoctype
+PASS 26,0: resulting DOM for range [testDiv, 0, comment, 5], node paras[0]
+PASS 26,0: resulting range position for range [testDiv, 0, comment, 5], node paras[0]
+PASS 26,1: resulting DOM for range [testDiv, 0, comment, 5], node paras[0].firstChild
+PASS 26,1: resulting range position for range [testDiv, 0, comment, 5], node paras[0].firstChild
+PASS 26,2: resulting DOM for range [testDiv, 0, comment, 5], node paras[1].firstChild
+PASS 26,2: resulting range position for range [testDiv, 0, comment, 5], node paras[1].firstChild
+PASS 26,3: resulting DOM for range [testDiv, 0, comment, 5], node foreignPara1
+PASS 26,3: resulting range position for range [testDiv, 0, comment, 5], node foreignPara1
+PASS 26,4: resulting DOM for range [testDiv, 0, comment, 5], node foreignPara1.firstChild
+PASS 26,4: resulting range position for range [testDiv, 0, comment, 5], node foreignPara1.firstChild
+PASS 26,5: resulting DOM for range [testDiv, 0, comment, 5], node detachedPara1
+PASS 26,5: resulting range position for range [testDiv, 0, comment, 5], node detachedPara1
+PASS 26,6: resulting DOM for range [testDiv, 0, comment, 5], node detachedPara1.firstChild
+PASS 26,6: resulting range position for range [testDiv, 0, comment, 5], node detachedPara1.firstChild
+PASS 26,7: resulting DOM for range [testDiv, 0, comment, 5], node document
+PASS 26,7: resulting range position for range [testDiv, 0, comment, 5], node document
+PASS 26,8: resulting DOM for range [testDiv, 0, comment, 5], node detachedDiv
+PASS 26,8: resulting range position for range [testDiv, 0, comment, 5], node detachedDiv
+PASS 26,9: resulting DOM for range [testDiv, 0, comment, 5], node foreignDoc
+PASS 26,9: resulting range position for range [testDiv, 0, comment, 5], node foreignDoc
+PASS 26,10: resulting DOM for range [testDiv, 0, comment, 5], node foreignPara2
+PASS 26,10: resulting range position for range [testDiv, 0, comment, 5], node foreignPara2
+PASS 26,11: resulting DOM for range [testDiv, 0, comment, 5], node xmlDoc
+PASS 26,11: resulting range position for range [testDiv, 0, comment, 5], node xmlDoc
+PASS 26,12: resulting DOM for range [testDiv, 0, comment, 5], node xmlElement
+PASS 26,12: resulting range position for range [testDiv, 0, comment, 5], node xmlElement
+PASS 26,13: resulting DOM for range [testDiv, 0, comment, 5], node detachedTextNode
+PASS 26,13: resulting range position for range [testDiv, 0, comment, 5], node detachedTextNode
+PASS 26,14: resulting DOM for range [testDiv, 0, comment, 5], node foreignTextNode
+PASS 26,14: resulting range position for range [testDiv, 0, comment, 5], node foreignTextNode
+PASS 26,15: resulting DOM for range [testDiv, 0, comment, 5], node processingInstruction
+PASS 26,15: resulting range position for range [testDiv, 0, comment, 5], node processingInstruction
+PASS 26,16: resulting DOM for range [testDiv, 0, comment, 5], node detachedProcessingInstruction
+PASS 26,16: resulting range position for range [testDiv, 0, comment, 5], node detachedProcessingInstruction
+PASS 26,17: resulting DOM for range [testDiv, 0, comment, 5], node comment
+PASS 26,17: resulting range position for range [testDiv, 0, comment, 5], node comment
+PASS 26,18: resulting DOM for range [testDiv, 0, comment, 5], node detachedComment
+PASS 26,18: resulting range position for range [testDiv, 0, comment, 5], node detachedComment
+PASS 26,19: resulting DOM for range [testDiv, 0, comment, 5], node docfrag
+PASS 26,19: resulting range position for range [testDiv, 0, comment, 5], node docfrag
+PASS 26,20: resulting DOM for range [testDiv, 0, comment, 5], node doctype
+PASS 26,20: resulting range position for range [testDiv, 0, comment, 5], node doctype
+PASS 26,21: resulting DOM for range [testDiv, 0, comment, 5], node foreignDoctype
+PASS 26,21: resulting range position for range [testDiv, 0, comment, 5], node foreignDoctype
+PASS 27,0: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node paras[0]
+PASS 27,0: resulting range position for range [foreignDoc, 1, foreignComment, 2], node paras[0]
+PASS 27,1: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node paras[0].firstChild
+PASS 27,1: resulting range position for range [foreignDoc, 1, foreignComment, 2], node paras[0].firstChild
+PASS 27,2: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node paras[1].firstChild
+PASS 27,2: resulting range position for range [foreignDoc, 1, foreignComment, 2], node paras[1].firstChild
+PASS 27,3: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node foreignPara1
+PASS 27,3: resulting range position for range [foreignDoc, 1, foreignComment, 2], node foreignPara1
+PASS 27,4: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node foreignPara1.firstChild
+PASS 27,4: resulting range position for range [foreignDoc, 1, foreignComment, 2], node foreignPara1.firstChild
+PASS 27,5: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node detachedPara1
+PASS 27,5: resulting range position for range [foreignDoc, 1, foreignComment, 2], node detachedPara1
+PASS 27,6: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node detachedPara1.firstChild
+PASS 27,6: resulting range position for range [foreignDoc, 1, foreignComment, 2], node detachedPara1.firstChild
+PASS 27,7: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node document
+PASS 27,7: resulting range position for range [foreignDoc, 1, foreignComment, 2], node document
+PASS 27,8: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node detachedDiv
+PASS 27,8: resulting range position for range [foreignDoc, 1, foreignComment, 2], node detachedDiv
+PASS 27,9: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node foreignDoc
+PASS 27,9: resulting range position for range [foreignDoc, 1, foreignComment, 2], node foreignDoc
+PASS 27,10: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node foreignPara2
+PASS 27,10: resulting range position for range [foreignDoc, 1, foreignComment, 2], node foreignPara2
+PASS 27,11: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node xmlDoc
+PASS 27,11: resulting range position for range [foreignDoc, 1, foreignComment, 2], node xmlDoc
+PASS 27,12: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node xmlElement
+PASS 27,12: resulting range position for range [foreignDoc, 1, foreignComment, 2], node xmlElement
+PASS 27,13: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node detachedTextNode
+PASS 27,13: resulting range position for range [foreignDoc, 1, foreignComment, 2], node detachedTextNode
+PASS 27,14: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node foreignTextNode
+PASS 27,14: resulting range position for range [foreignDoc, 1, foreignComment, 2], node foreignTextNode
+PASS 27,15: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node processingInstruction
+PASS 27,15: resulting range position for range [foreignDoc, 1, foreignComment, 2], node processingInstruction
+PASS 27,16: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node detachedProcessingInstruction
+PASS 27,16: resulting range position for range [foreignDoc, 1, foreignComment, 2], node detachedProcessingInstruction
+PASS 27,17: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node comment
+PASS 27,17: resulting range position for range [foreignDoc, 1, foreignComment, 2], node comment
+PASS 27,18: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node detachedComment
+PASS 27,18: resulting range position for range [foreignDoc, 1, foreignComment, 2], node detachedComment
+PASS 27,19: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node docfrag
+PASS 27,19: resulting range position for range [foreignDoc, 1, foreignComment, 2], node docfrag
+PASS 27,20: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node doctype
+PASS 27,20: resulting range position for range [foreignDoc, 1, foreignComment, 2], node doctype
+PASS 27,21: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node foreignDoctype
+PASS 27,21: resulting range position for range [foreignDoc, 1, foreignComment, 2], node foreignDoctype
+PASS 28,0: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node paras[0]
+PASS 28,0: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node paras[0]
+PASS 28,1: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node paras[0].firstChild
+PASS 28,1: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node paras[0].firstChild
+PASS 28,2: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node paras[1].firstChild
+PASS 28,2: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node paras[1].firstChild
+PASS 28,3: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignPara1
+PASS 28,3: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignPara1
+PASS 28,4: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignPara1.firstChild
+PASS 28,4: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignPara1.firstChild
+PASS 28,5: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedPara1
+PASS 28,5: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedPara1
+PASS 28,6: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedPara1.firstChild
+PASS 28,6: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedPara1.firstChild
+PASS 28,7: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node document
+PASS 28,7: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node document
+PASS 28,8: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedDiv
+PASS 28,8: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedDiv
+PASS 28,9: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignDoc
+PASS 28,9: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignDoc
+PASS 28,10: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignPara2
+PASS 28,10: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignPara2
+PASS 28,11: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node xmlDoc
+PASS 28,11: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node xmlDoc
+PASS 28,12: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node xmlElement
+PASS 28,12: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node xmlElement
+PASS 28,13: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedTextNode
+PASS 28,13: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedTextNode
+PASS 28,14: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignTextNode
+PASS 28,14: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignTextNode
+PASS 28,15: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node processingInstruction
+PASS 28,15: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node processingInstruction
+PASS 28,16: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedProcessingInstruction
+PASS 28,16: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedProcessingInstruction
+PASS 28,17: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node comment
+PASS 28,17: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node comment
+PASS 28,18: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedComment
+PASS 28,18: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedComment
+PASS 28,19: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node docfrag
+PASS 28,19: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node docfrag
+PASS 28,20: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node doctype
+PASS 28,20: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node doctype
+PASS 28,21: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignDoctype
+PASS 28,21: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignDoctype
+PASS 29,0: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node paras[0]
+PASS 29,0: resulting range position for range [xmlDoc, 1, xmlComment, 0], node paras[0]
+PASS 29,1: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node paras[0].firstChild
+PASS 29,1: resulting range position for range [xmlDoc, 1, xmlComment, 0], node paras[0].firstChild
+PASS 29,2: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node paras[1].firstChild
+PASS 29,2: resulting range position for range [xmlDoc, 1, xmlComment, 0], node paras[1].firstChild
+PASS 29,3: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node foreignPara1
+PASS 29,3: resulting range position for range [xmlDoc, 1, xmlComment, 0], node foreignPara1
+PASS 29,4: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node foreignPara1.firstChild
+PASS 29,4: resulting range position for range [xmlDoc, 1, xmlComment, 0], node foreignPara1.firstChild
+PASS 29,5: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node detachedPara1
+PASS 29,5: resulting range position for range [xmlDoc, 1, xmlComment, 0], node detachedPara1
+PASS 29,6: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node detachedPara1.firstChild
+PASS 29,6: resulting range position for range [xmlDoc, 1, xmlComment, 0], node detachedPara1.firstChild
+PASS 29,7: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node document
+PASS 29,7: resulting range position for range [xmlDoc, 1, xmlComment, 0], node document
+PASS 29,8: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node detachedDiv
+PASS 29,8: resulting range position for range [xmlDoc, 1, xmlComment, 0], node detachedDiv
+PASS 29,9: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node foreignDoc
+PASS 29,9: resulting range position for range [xmlDoc, 1, xmlComment, 0], node foreignDoc
+PASS 29,10: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node foreignPara2
+PASS 29,10: resulting range position for range [xmlDoc, 1, xmlComment, 0], node foreignPara2
+PASS 29,11: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node xmlDoc
+PASS 29,11: resulting range position for range [xmlDoc, 1, xmlComment, 0], node xmlDoc
+PASS 29,12: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node xmlElement
+PASS 29,12: resulting range position for range [xmlDoc, 1, xmlComment, 0], node xmlElement
+PASS 29,13: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node detachedTextNode
+PASS 29,13: resulting range position for range [xmlDoc, 1, xmlComment, 0], node detachedTextNode
+PASS 29,14: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node foreignTextNode
+PASS 29,14: resulting range position for range [xmlDoc, 1, xmlComment, 0], node foreignTextNode
+PASS 29,15: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node processingInstruction
+PASS 29,15: resulting range position for range [xmlDoc, 1, xmlComment, 0], node processingInstruction
+PASS 29,16: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node detachedProcessingInstruction
+PASS 29,16: resulting range position for range [xmlDoc, 1, xmlComment, 0], node detachedProcessingInstruction
+PASS 29,17: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node comment
+PASS 29,17: resulting range position for range [xmlDoc, 1, xmlComment, 0], node comment
+PASS 29,18: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node detachedComment
+PASS 29,18: resulting range position for range [xmlDoc, 1, xmlComment, 0], node detachedComment
+PASS 29,19: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node docfrag
+PASS 29,19: resulting range position for range [xmlDoc, 1, xmlComment, 0], node docfrag
+PASS 29,20: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node doctype
+PASS 29,20: resulting range position for range [xmlDoc, 1, xmlComment, 0], node doctype
+PASS 29,21: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node foreignDoctype
+PASS 29,21: resulting range position for range [xmlDoc, 1, xmlComment, 0], node foreignDoctype
+PASS 30,0: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node paras[0]
+PASS 30,0: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node paras[0]
+PASS 30,1: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node paras[0].firstChild
+PASS 30,1: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node paras[0].firstChild
+PASS 30,2: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node paras[1].firstChild
+PASS 30,2: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node paras[1].firstChild
+PASS 30,3: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node foreignPara1
+PASS 30,3: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node foreignPara1
+PASS 30,4: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node foreignPara1.firstChild
+PASS 30,4: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node foreignPara1.firstChild
+PASS 30,5: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node detachedPara1
+PASS 30,5: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node detachedPara1
+PASS 30,6: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node detachedPara1.firstChild
+PASS 30,6: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node detachedPara1.firstChild
+PASS 30,7: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node document
+PASS 30,7: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node document
+PASS 30,8: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node detachedDiv
+PASS 30,8: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node detachedDiv
+PASS 30,9: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node foreignDoc
+PASS 30,9: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node foreignDoc
+PASS 30,10: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node foreignPara2
+PASS 30,10: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node foreignPara2
+PASS 30,11: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node xmlDoc
+PASS 30,11: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node xmlDoc
+PASS 30,12: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node xmlElement
+PASS 30,12: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node xmlElement
+PASS 30,13: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node detachedTextNode
+PASS 30,13: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node detachedTextNode
+PASS 30,14: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node foreignTextNode
+PASS 30,14: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node foreignTextNode
+PASS 30,15: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node processingInstruction
+PASS 30,15: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node processingInstruction
+PASS 30,16: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node detachedProcessingInstruction
+PASS 30,16: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node detachedProcessingInstruction
+PASS 30,17: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node comment
+PASS 30,17: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node comment
+PASS 30,18: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node detachedComment
+PASS 30,18: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node detachedComment
+PASS 30,19: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node docfrag
+PASS 30,19: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node docfrag
+PASS 30,20: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node doctype
+PASS 30,20: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node doctype
+PASS 30,21: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node foreignDoctype
+PASS 30,21: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node foreignDoctype
+PASS 31,0: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node paras[0]
+PASS 31,0: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node paras[0]
+PASS 31,1: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node paras[0].firstChild
+PASS 31,1: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node paras[0].firstChild
+PASS 31,2: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node paras[1].firstChild
+PASS 31,2: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node paras[1].firstChild
+PASS 31,3: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignPara1
+PASS 31,3: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignPara1
+PASS 31,4: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignPara1.firstChild
+PASS 31,4: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignPara1.firstChild
+PASS 31,5: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedPara1
+PASS 31,5: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedPara1
+PASS 31,6: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedPara1.firstChild
+PASS 31,6: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedPara1.firstChild
+PASS 31,7: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node document
+PASS 31,7: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node document
+PASS 31,8: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedDiv
+PASS 31,8: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedDiv
+PASS 31,9: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignDoc
+PASS 31,9: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignDoc
+PASS 31,10: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignPara2
+PASS 31,10: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignPara2
+PASS 31,11: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node xmlDoc
+PASS 31,11: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node xmlDoc
+PASS 31,12: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node xmlElement
+PASS 31,12: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node xmlElement
+PASS 31,13: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedTextNode
+PASS 31,13: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedTextNode
+PASS 31,14: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignTextNode
+PASS 31,14: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignTextNode
+PASS 31,15: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node processingInstruction
+PASS 31,15: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node processingInstruction
+PASS 31,16: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedProcessingInstruction
+PASS 31,16: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedProcessingInstruction
+PASS 31,17: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node comment
+PASS 31,17: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node comment
+PASS 31,18: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedComment
+PASS 31,18: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedComment
+PASS 31,19: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node docfrag
+PASS 31,19: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node docfrag
+PASS 31,20: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node doctype
+PASS 31,20: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node doctype
+PASS 31,21: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignDoctype
+PASS 31,21: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignDoctype
+PASS 32,0: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node paras[0]
+PASS 32,0: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node paras[0]
+PASS 32,1: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node paras[0].firstChild
+PASS 32,1: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node paras[0].firstChild
+PASS 32,2: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node paras[1].firstChild
+PASS 32,2: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node paras[1].firstChild
+PASS 32,3: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignPara1
+PASS 32,3: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignPara1
+PASS 32,4: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignPara1.firstChild
+PASS 32,4: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignPara1.firstChild
+PASS 32,5: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedPara1
+PASS 32,5: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedPara1
+PASS 32,6: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedPara1.firstChild
+PASS 32,6: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedPara1.firstChild
+PASS 32,7: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node document
+PASS 32,7: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node document
+PASS 32,8: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedDiv
+PASS 32,8: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedDiv
+PASS 32,9: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignDoc
+PASS 32,9: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignDoc
+PASS 32,10: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignPara2
+PASS 32,10: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignPara2
+PASS 32,11: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node xmlDoc
+PASS 32,11: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node xmlDoc
+PASS 32,12: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node xmlElement
+PASS 32,12: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node xmlElement
+PASS 32,13: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedTextNode
+PASS 32,13: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedTextNode
+PASS 32,14: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignTextNode
+PASS 32,14: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignTextNode
+PASS 32,15: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node processingInstruction
+PASS 32,15: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node processingInstruction
+PASS 32,16: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedProcessingInstruction
+PASS 32,16: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedProcessingInstruction
+PASS 32,17: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node comment
+PASS 32,17: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node comment
+PASS 32,18: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedComment
+PASS 32,18: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedComment
+PASS 32,19: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node docfrag
+PASS 32,19: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node docfrag
+PASS 32,20: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node doctype
+PASS 32,20: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node doctype
+PASS 32,21: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignDoctype
+PASS 32,21: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignDoctype
+PASS 33,0: resulting DOM for range [detachedComment, 3, detachedComment, 4], node paras[0]
+PASS 33,0: resulting range position for range [detachedComment, 3, detachedComment, 4], node paras[0]
+PASS 33,1: resulting DOM for range [detachedComment, 3, detachedComment, 4], node paras[0].firstChild
+PASS 33,1: resulting range position for range [detachedComment, 3, detachedComment, 4], node paras[0].firstChild
+PASS 33,2: resulting DOM for range [detachedComment, 3, detachedComment, 4], node paras[1].firstChild
+PASS 33,2: resulting range position for range [detachedComment, 3, detachedComment, 4], node paras[1].firstChild
+PASS 33,3: resulting DOM for range [detachedComment, 3, detachedComment, 4], node foreignPara1
+PASS 33,3: resulting range position for range [detachedComment, 3, detachedComment, 4], node foreignPara1
+PASS 33,4: resulting DOM for range [detachedComment, 3, detachedComment, 4], node foreignPara1.firstChild
+PASS 33,4: resulting range position for range [detachedComment, 3, detachedComment, 4], node foreignPara1.firstChild
+PASS 33,5: resulting DOM for range [detachedComment, 3, detachedComment, 4], node detachedPara1
+PASS 33,5: resulting range position for range [detachedComment, 3, detachedComment, 4], node detachedPara1
+PASS 33,6: resulting DOM for range [detachedComment, 3, detachedComment, 4], node detachedPara1.firstChild
+PASS 33,6: resulting range position for range [detachedComment, 3, detachedComment, 4], node detachedPara1.firstChild
+PASS 33,7: resulting DOM for range [detachedComment, 3, detachedComment, 4], node document
+PASS 33,7: resulting range position for range [detachedComment, 3, detachedComment, 4], node document
+PASS 33,8: resulting DOM for range [detachedComment, 3, detachedComment, 4], node detachedDiv
+PASS 33,8: resulting range position for range [detachedComment, 3, detachedComment, 4], node detachedDiv
+PASS 33,9: resulting DOM for range [detachedComment, 3, detachedComment, 4], node foreignDoc
+PASS 33,9: resulting range position for range [detachedComment, 3, detachedComment, 4], node foreignDoc
+PASS 33,10: resulting DOM for range [detachedComment, 3, detachedComment, 4], node foreignPara2
+PASS 33,10: resulting range position for range [detachedComment, 3, detachedComment, 4], node foreignPara2
+PASS 33,11: resulting DOM for range [detachedComment, 3, detachedComment, 4], node xmlDoc
+PASS 33,11: resulting range position for range [detachedComment, 3, detachedComment, 4], node xmlDoc
+PASS 33,12: resulting DOM for range [detachedComment, 3, detachedComment, 4], node xmlElement
+PASS 33,12: resulting range position for range [detachedComment, 3, detachedComment, 4], node xmlElement
+PASS 33,13: resulting DOM for range [detachedComment, 3, detachedComment, 4], node detachedTextNode
+PASS 33,13: resulting range position for range [detachedComment, 3, detachedComment, 4], node detachedTextNode
+PASS 33,14: resulting DOM for range [detachedComment, 3, detachedComment, 4], node foreignTextNode
+PASS 33,14: resulting range position for range [detachedComment, 3, detachedComment, 4], node foreignTextNode
+PASS 33,15: resulting DOM for range [detachedComment, 3, detachedComment, 4], node processingInstruction
+PASS 33,15: resulting range position for range [detachedComment, 3, detachedComment, 4], node processingInstruction
+PASS 33,16: resulting DOM for range [detachedComment, 3, detachedComment, 4], node detachedProcessingInstruction
+PASS 33,16: resulting range position for range [detachedComment, 3, detachedComment, 4], node detachedProcessingInstruction
+PASS 33,17: resulting DOM for range [detachedComment, 3, detachedComment, 4], node comment
+PASS 33,17: resulting range position for range [detachedComment, 3, detachedComment, 4], node comment
+PASS 33,18: resulting DOM for range [detachedComment, 3, detachedComment, 4], node detachedComment
+PASS 33,18: resulting range position for range [detachedComment, 3, detachedComment, 4], node detachedComment
+PASS 33,19: resulting DOM for range [detachedComment, 3, detachedComment, 4], node docfrag
+PASS 33,19: resulting range position for range [detachedComment, 3, detachedComment, 4], node docfrag
+PASS 33,20: resulting DOM for range [detachedComment, 3, detachedComment, 4], node doctype
+PASS 33,20: resulting range position for range [detachedComment, 3, detachedComment, 4], node doctype
+PASS 33,21: resulting DOM for range [detachedComment, 3, detachedComment, 4], node foreignDoctype
+PASS 33,21: resulting range position for range [detachedComment, 3, detachedComment, 4], node foreignDoctype
+PASS 34,0: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node paras[0]
+PASS 34,0: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node paras[0]
+PASS 34,1: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node paras[0].firstChild
+PASS 34,1: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node paras[0].firstChild
+PASS 34,2: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node paras[1].firstChild
+PASS 34,2: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node paras[1].firstChild
+PASS 34,3: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignPara1
+PASS 34,3: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignPara1
+PASS 34,4: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignPara1.firstChild
+PASS 34,4: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignPara1.firstChild
+PASS 34,5: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedPara1
+PASS 34,5: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedPara1
+PASS 34,6: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedPara1.firstChild
+PASS 34,6: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedPara1.firstChild
+PASS 34,7: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node document
+PASS 34,7: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node document
+PASS 34,8: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedDiv
+PASS 34,8: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedDiv
+PASS 34,9: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignDoc
+PASS 34,9: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignDoc
+PASS 34,10: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignPara2
+PASS 34,10: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignPara2
+PASS 34,11: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node xmlDoc
+PASS 34,11: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node xmlDoc
+PASS 34,12: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node xmlElement
+PASS 34,12: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node xmlElement
+PASS 34,13: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedTextNode
+PASS 34,13: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedTextNode
+PASS 34,14: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignTextNode
+PASS 34,14: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignTextNode
+PASS 34,15: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node processingInstruction
+PASS 34,15: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node processingInstruction
+PASS 34,16: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedProcessingInstruction
+PASS 34,16: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedProcessingInstruction
+PASS 34,17: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node comment
+PASS 34,17: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node comment
+PASS 34,18: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedComment
+PASS 34,18: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedComment
+PASS 34,19: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node docfrag
+PASS 34,19: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node docfrag
+PASS 34,20: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node doctype
+PASS 34,20: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node doctype
+PASS 34,21: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignDoctype
+PASS 34,21: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignDoctype
+PASS 35,0: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node paras[0]
+PASS 35,0: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node paras[0]
+PASS 35,1: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node paras[0].firstChild
+PASS 35,1: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node paras[0].firstChild
+PASS 35,2: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node paras[1].firstChild
+PASS 35,2: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node paras[1].firstChild
+PASS 35,3: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignPara1
+PASS 35,3: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignPara1
+PASS 35,4: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignPara1.firstChild
+PASS 35,4: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignPara1.firstChild
+PASS 35,5: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedPara1
+PASS 35,5: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedPara1
+PASS 35,6: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedPara1.firstChild
+PASS 35,6: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedPara1.firstChild
+PASS 35,7: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node document
+PASS 35,7: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node document
+PASS 35,8: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedDiv
+PASS 35,8: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedDiv
+PASS 35,9: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignDoc
+PASS 35,9: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignDoc
+PASS 35,10: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignPara2
+PASS 35,10: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignPara2
+PASS 35,11: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node xmlDoc
+PASS 35,11: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node xmlDoc
+PASS 35,12: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node xmlElement
+PASS 35,12: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node xmlElement
+PASS 35,13: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedTextNode
+PASS 35,13: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedTextNode
+PASS 35,14: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignTextNode
+PASS 35,14: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignTextNode
+PASS 35,15: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node processingInstruction
+PASS 35,15: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node processingInstruction
+PASS 35,16: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedProcessingInstruction
+PASS 35,16: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedProcessingInstruction
+PASS 35,17: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node comment
+PASS 35,17: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node comment
+PASS 35,18: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedComment
+PASS 35,18: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedComment
+PASS 35,19: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node docfrag
+PASS 35,19: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node docfrag
+PASS 35,20: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node doctype
+PASS 35,20: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node doctype
+PASS 35,21: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignDoctype
+PASS 35,21: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignDoctype
+PASS 36,0: resulting DOM for range [docfrag, 0, docfrag, 0], node paras[0]
+PASS 36,0: resulting range position for range [docfrag, 0, docfrag, 0], node paras[0]
+PASS 36,1: resulting DOM for range [docfrag, 0, docfrag, 0], node paras[0].firstChild
+PASS 36,1: resulting range position for range [docfrag, 0, docfrag, 0], node paras[0].firstChild
+PASS 36,2: resulting DOM for range [docfrag, 0, docfrag, 0], node paras[1].firstChild
+PASS 36,2: resulting range position for range [docfrag, 0, docfrag, 0], node paras[1].firstChild
+PASS 36,3: resulting DOM for range [docfrag, 0, docfrag, 0], node foreignPara1
+PASS 36,3: resulting range position for range [docfrag, 0, docfrag, 0], node foreignPara1
+PASS 36,4: resulting DOM for range [docfrag, 0, docfrag, 0], node foreignPara1.firstChild
+PASS 36,4: resulting range position for range [docfrag, 0, docfrag, 0], node foreignPara1.firstChild
+PASS 36,5: resulting DOM for range [docfrag, 0, docfrag, 0], node detachedPara1
+PASS 36,5: resulting range position for range [docfrag, 0, docfrag, 0], node detachedPara1
+PASS 36,6: resulting DOM for range [docfrag, 0, docfrag, 0], node detachedPara1.firstChild
+PASS 36,6: resulting range position for range [docfrag, 0, docfrag, 0], node detachedPara1.firstChild
+PASS 36,7: resulting DOM for range [docfrag, 0, docfrag, 0], node document
+PASS 36,7: resulting range position for range [docfrag, 0, docfrag, 0], node document
+PASS 36,8: resulting DOM for range [docfrag, 0, docfrag, 0], node detachedDiv
+PASS 36,8: resulting range position for range [docfrag, 0, docfrag, 0], node detachedDiv
+PASS 36,9: resulting DOM for range [docfrag, 0, docfrag, 0], node foreignDoc
+PASS 36,9: resulting range position for range [docfrag, 0, docfrag, 0], node foreignDoc
+PASS 36,10: resulting DOM for range [docfrag, 0, docfrag, 0], node foreignPara2
+PASS 36,10: resulting range position for range [docfrag, 0, docfrag, 0], node foreignPara2
+PASS 36,11: resulting DOM for range [docfrag, 0, docfrag, 0], node xmlDoc
+PASS 36,11: resulting range position for range [docfrag, 0, docfrag, 0], node xmlDoc
+PASS 36,12: resulting DOM for range [docfrag, 0, docfrag, 0], node xmlElement
+PASS 36,12: resulting range position for range [docfrag, 0, docfrag, 0], node xmlElement
+PASS 36,13: resulting DOM for range [docfrag, 0, docfrag, 0], node detachedTextNode
+PASS 36,13: resulting range position for range [docfrag, 0, docfrag, 0], node detachedTextNode
+PASS 36,14: resulting DOM for range [docfrag, 0, docfrag, 0], node foreignTextNode
+PASS 36,14: resulting range position for range [docfrag, 0, docfrag, 0], node foreignTextNode
+PASS 36,15: resulting DOM for range [docfrag, 0, docfrag, 0], node processingInstruction
+PASS 36,15: resulting range position for range [docfrag, 0, docfrag, 0], node processingInstruction
+PASS 36,16: resulting DOM for range [docfrag, 0, docfrag, 0], node detachedProcessingInstruction
+PASS 36,16: resulting range position for range [docfrag, 0, docfrag, 0], node detachedProcessingInstruction
+PASS 36,17: resulting DOM for range [docfrag, 0, docfrag, 0], node comment
+PASS 36,17: resulting range position for range [docfrag, 0, docfrag, 0], node comment
+PASS 36,18: resulting DOM for range [docfrag, 0, docfrag, 0], node detachedComment
+PASS 36,18: resulting range position for range [docfrag, 0, docfrag, 0], node detachedComment
+PASS 36,19: resulting DOM for range [docfrag, 0, docfrag, 0], node docfrag
+PASS 36,19: resulting range position for range [docfrag, 0, docfrag, 0], node docfrag
+PASS 36,20: resulting DOM for range [docfrag, 0, docfrag, 0], node doctype
+PASS 36,20: resulting range position for range [docfrag, 0, docfrag, 0], node doctype
+PASS 36,21: resulting DOM for range [docfrag, 0, docfrag, 0], node foreignDoctype
+PASS 36,21: resulting range position for range [docfrag, 0, docfrag, 0], node foreignDoctype
+PASS 37,0: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node paras[0]
+PASS 37,0: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node paras[0]
+PASS 37,1: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node paras[0].firstChild
+PASS 37,1: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node paras[0].firstChild
+PASS 37,2: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node paras[1].firstChild
+PASS 37,2: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node paras[1].firstChild
+PASS 37,3: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node foreignPara1
+PASS 37,3: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node foreignPara1
+PASS 37,4: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node foreignPara1.firstChild
+PASS 37,4: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node foreignPara1.firstChild
+PASS 37,5: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node detachedPara1
+PASS 37,5: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node detachedPara1
+PASS 37,6: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node detachedPara1.firstChild
+PASS 37,6: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node detachedPara1.firstChild
+PASS 37,7: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node document
+PASS 37,7: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node document
+PASS 37,8: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node detachedDiv
+PASS 37,8: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node detachedDiv
+PASS 37,9: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node foreignDoc
+PASS 37,9: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node foreignDoc
+PASS 37,10: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node foreignPara2
+PASS 37,10: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node foreignPara2
+PASS 37,11: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node xmlDoc
+PASS 37,11: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node xmlDoc
+PASS 37,12: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node xmlElement
+PASS 37,12: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node xmlElement
+PASS 37,13: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node detachedTextNode
+PASS 37,13: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node detachedTextNode
+PASS 37,14: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node foreignTextNode
+PASS 37,14: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node foreignTextNode
+PASS 37,15: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node processingInstruction
+PASS 37,15: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node processingInstruction
+PASS 37,16: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node detachedProcessingInstruction
+PASS 37,16: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node detachedProcessingInstruction
+PASS 37,17: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node comment
+PASS 37,17: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node comment
+PASS 37,18: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node detachedComment
+PASS 37,18: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node detachedComment
+PASS 37,19: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node docfrag
+PASS 37,19: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node docfrag
+PASS 37,20: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node doctype
+PASS 37,20: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node doctype
+PASS 37,21: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node foreignDoctype
+PASS 37,21: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node foreignDoctype
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangeinsertNodehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-insertNode.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-insertNode.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-insertNode.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,286 @@
</span><ins>+<!doctype html>
+<title>Range.insertNode() tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<p>To debug test failures, add a query parameter "subtest" with the test id (like
+"?subtest=5,16"). Only that test will be run. Then you can look at the resulting
+iframes in the DOM.
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+testDiv.parentNode.removeChild(testDiv);
+
+function restoreIframe(iframe, i, j) {
+ // Most of this function is designed to work around the fact that Opera
+ // doesn't let you add a doctype to a document that no longer has one, in
+ // any way I can figure out. I eventually compromised on something that
+ // will still let Opera pass most tests that don't actually involve
+ // doctypes.
+ while (iframe.contentDocument.firstChild
+ && iframe.contentDocument.firstChild.nodeType != Node.DOCUMENT_TYPE_NODE) {
+ iframe.contentDocument.removeChild(iframe.contentDocument.firstChild);
+ }
+
+ while (iframe.contentDocument.lastChild
+ && iframe.contentDocument.lastChild.nodeType != Node.DOCUMENT_TYPE_NODE) {
+ iframe.contentDocument.removeChild(iframe.contentDocument.lastChild);
+ }
+
+ if (!iframe.contentDocument.firstChild) {
+ // This will throw an exception in Opera if we reach here, which is why
+ // I try to avoid it. It will never happen in a browser that obeys the
+ // spec, so it's really just insurance. I don't think it actually gets
+ // hit by anything.
+ iframe.contentDocument.appendChild(iframe.contentDocument.implementation.createDocumentType("html", "", ""));
+ }
+ iframe.contentDocument.appendChild(referenceDoc.documentElement.cloneNode(true));
+ iframe.contentWindow.setupRangeTests();
+ iframe.contentWindow.testRangeInput = testRangesShort[i];
+ iframe.contentWindow.testNodeInput = testNodesShort[j];
+ iframe.contentWindow.run();
+}
+
+function testInsertNode(i, j) {
+ var actualRange;
+ var expectedRange;
+ var actualNode;
+ var expectedNode;
+ var actualRoots = [];
+ var expectedRoots = [];
+
+ var detached = false;
+
+ domTests[i][j].step(function() {
+ restoreIframe(actualIframe, i, j);
+ restoreIframe(expectedIframe, i, j);
+
+ actualRange = actualIframe.contentWindow.testRange;
+ expectedRange = expectedIframe.contentWindow.testRange;
+ actualNode = actualIframe.contentWindow.testNode;
+ expectedNode = expectedIframe.contentWindow.testNode;
+
+ try {
+ actualRange.collapsed;
+ } catch (e) {
+ detached = true;
+ }
+
+ assert_equals(actualIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for actual insertNode()");
+ assert_equals(expectedIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for simulated insertNode()");
+ assert_equals(typeof actualRange, "object",
+ "typeof Range produced in actual iframe");
+ assert_false(actualRange === null,
+ "Range produced in actual iframe was null");
+ assert_equals(typeof expectedRange, "object",
+ "typeof Range produced in expected iframe");
+ assert_false(expectedRange === null,
+ "Range produced in expected iframe was null");
+ assert_equals(typeof actualNode, "object",
+ "typeof Node produced in actual iframe");
+ assert_false(actualNode === null,
+ "Node produced in actual iframe was null");
+ assert_equals(typeof expectedNode, "object",
+ "typeof Node produced in expected iframe");
+ assert_false(expectedNode === null,
+ "Node produced in expected iframe was null");
+
+ // We want to test that the trees containing the ranges are equal, and
+ // also the trees containing the moved nodes. These might not be the
+ // same, if we're inserting a node from a detached tree or a different
+ // document.
+ //
+ // Detached ranges are always in the contentDocument.
+ if (detached) {
+ actualRoots.push(actualIframe.contentDocument);
+ expectedRoots.push(expectedIframe.contentDocument);
+ } else {
+ actualRoots.push(furthestAncestor(actualRange.startContainer));
+ expectedRoots.push(furthestAncestor(expectedRange.startContainer));
+ }
+
+ if (furthestAncestor(actualNode) != actualRoots[0]) {
+ actualRoots.push(furthestAncestor(actualNode));
+ }
+ if (furthestAncestor(expectedNode) != expectedRoots[0]) {
+ expectedRoots.push(furthestAncestor(expectedNode));
+ }
+
+ assert_equals(actualRoots.length, expectedRoots.length,
+ "Either the actual node and actual range are in the same tree but the expected are in different trees, or vice versa");
+
+ // This doctype stuff is to work around the fact that Opera 11.00 will
+ // move around doctypes within a document, even to totally invalid
+ // positions, but it won't allow a new doctype to be added to a
+ // document in any way I can figure out. So if we try moving a doctype
+ // to some invalid place, in Opera it will actually succeed, and then
+ // restoreIframe() will remove the doctype along with the root element,
+ // and then nothing can re-add the doctype. So instead, we catch it
+ // during the test itself and move it back to the right place while we
+ // still can.
+ //
+ // I spent *way* too much time debugging and working around this bug.
+ var actualDoctype = actualIframe.contentDocument.doctype;
+ var expectedDoctype = expectedIframe.contentDocument.doctype;
+
+ var result;
+ try {
+ result = myInsertNode(expectedRange, expectedNode);
+ } catch (e) {
+ if (expectedDoctype != expectedIframe.contentDocument.firstChild) {
+ expectedIframe.contentDocument.insertBefore(expectedDoctype, expectedIframe.contentDocument.firstChild);
+ }
+ throw e;
+ }
+ if (typeof result == "string") {
+ assert_throws(result, function() {
+ try {
+ actualRange.insertNode(actualNode);
+ } catch (e) {
+ if (expectedDoctype != expectedIframe.contentDocument.firstChild) {
+ expectedIframe.contentDocument.insertBefore(expectedDoctype, expectedIframe.contentDocument.firstChild);
+ }
+ if (actualDoctype != actualIframe.contentDocument.firstChild) {
+ actualIframe.contentDocument.insertBefore(actualDoctype, actualIframe.contentDocument.firstChild);
+ }
+ throw e;
+ }
+ }, "A " + result + " DOMException must be thrown in this case");
+ // Don't return, we still need to test DOM equality
+ } else {
+ try {
+ actualRange.insertNode(actualNode);
+ } catch (e) {
+ if (expectedDoctype != expectedIframe.contentDocument.firstChild) {
+ expectedIframe.contentDocument.insertBefore(expectedDoctype, expectedIframe.contentDocument.firstChild);
+ }
+ if (actualDoctype != actualIframe.contentDocument.firstChild) {
+ actualIframe.contentDocument.insertBefore(actualDoctype, actualIframe.contentDocument.firstChild);
+ }
+ throw e;
+ }
+ }
+
+ for (var k = 0; k < actualRoots.length; k++) {
+ assertNodesEqual(actualRoots[k], expectedRoots[k], k ? "moved node's tree root" : "range's tree root");
+ }
+ });
+ domTests[i][j].done();
+
+ positionTests[i][j].step(function() {
+ assert_equals(actualIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for actual insertNode()");
+ assert_equals(expectedIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for simulated insertNode()");
+ assert_equals(typeof actualRange, "object",
+ "typeof Range produced in actual iframe");
+ assert_false(actualRange === null,
+ "Range produced in actual iframe was null");
+ assert_equals(typeof expectedRange, "object",
+ "typeof Range produced in expected iframe");
+ assert_false(expectedRange === null,
+ "Range produced in expected iframe was null");
+ assert_equals(typeof actualNode, "object",
+ "typeof Node produced in actual iframe");
+ assert_false(actualNode === null,
+ "Node produced in actual iframe was null");
+ assert_equals(typeof expectedNode, "object",
+ "typeof Node produced in expected iframe");
+ assert_false(expectedNode === null,
+ "Node produced in expected iframe was null");
+
+ for (var k = 0; k < actualRoots.length; k++) {
+ assertNodesEqual(actualRoots[k], expectedRoots[k], k ? "moved node's tree root" : "range's tree root");
+ }
+
+ if (detached) {
+ // No further tests we can do
+ return;
+ }
+
+ assert_equals(actualRange.startOffset, expectedRange.startOffset,
+ "Unexpected startOffset after insertNode()");
+ assert_equals(actualRange.endOffset, expectedRange.endOffset,
+ "Unexpected endOffset after insertNode()");
+ // How do we decide that the two nodes are equal, since they're in
+ // different trees? Since the DOMs are the same, it's enough to check
+ // that the index in the parent is the same all the way up the tree.
+ // But we can first cheat by just checking they're actually equal.
+ assert_true(actualRange.startContainer.isEqualNode(expectedRange.startContainer),
+ "Unexpected startContainer after insertNode(), expected " +
+ expectedRange.startContainer.nodeName.toLowerCase() + " but got " +
+ actualRange.startContainer.nodeName.toLowerCase());
+ var currentActual = actualRange.startContainer;
+ var currentExpected = expectedRange.startContainer;
+ var actual = "";
+ var expected = "";
+ while (currentActual && currentExpected) {
+ actual = indexOf(currentActual) + "-" + actual;
+ expected = indexOf(currentExpected) + "-" + expected;
+
+ currentActual = currentActual.parentNode;
+ currentExpected = currentExpected.parentNode;
+ }
+ actual = actual.substr(0, actual.length - 1);
+ expected = expected.substr(0, expected.length - 1);
+ assert_equals(actual, expected,
+ "startContainer superficially looks right but is actually the wrong node if you trace back its index in all its ancestors (I'm surprised this actually happened");
+ });
+ positionTests[i][j].done();
+}
+
+testRanges.unshift('"detached"');
+
+var iStart = 0;
+var iStop = testRangesShort.length;
+var jStart = 0;
+var jStop = testNodesShort.length;
+
+if (/subtest=[0-9]+,[0-9]+/.test(location.search)) {
+ var matches = /subtest=([0-9]+),([0-9]+)/.exec(location.search);
+ iStart = Number(matches[1]);
+ iStop = Number(matches[1]) + 1;
+ jStart = Number(matches[2]) + 0;
+ jStop = Number(matches[2]) + 1;
+}
+
+var domTests = [];
+var positionTests = [];
+for (var i = iStart; i < iStop; i++) {
+ domTests[i] = [];
+ positionTests[i] = [];
+ for (var j = jStart; j < jStop; j++) {
+ domTests[i][j] = async_test(i + "," + j + ": resulting DOM for range " + testRangesShort[i] + ", node " + testNodesShort[j]);
+ positionTests[i][j] = async_test(i + "," + j + ": resulting range position for range " + testRangesShort[i] + ", node " + testNodesShort[j]);
+ }
+}
+
+var actualIframe = document.createElement("iframe");
+actualIframe.style.display = "none";
+document.body.appendChild(actualIframe);
+
+var expectedIframe = document.createElement("iframe");
+expectedIframe.style.display = "none";
+document.body.appendChild(expectedIframe);
+
+var referenceDoc = document.implementation.createHTMLDocument("");
+referenceDoc.removeChild(referenceDoc.documentElement);
+
+actualIframe.onload = function() {
+ expectedIframe.onload = function() {
+ for (var i = iStart; i < iStop; i++) {
+ for (var j = jStart; j < jStop; j++) {
+ testInsertNode(i, j);
+ }
+ }
+ }
+ expectedIframe.src = "resources/Range-test-iframe.html";
+ referenceDoc.appendChild(actualIframe.contentDocument.documentElement.cloneNode(true));
+}
+actualIframe.src = "resources/Range-test-iframe.html";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangeintersectsNodebindingexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode-binding-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode-binding-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode-binding-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+FAIL Calling intersectsNode without an argument or with an invalid argument should throw a TypeError. assert_throws: function "function () { r.intersectsNode(); }" threw object "Error: NotFoundError: DOM Exception 8" ("NotFoundError") expected object "TypeError" ("TypeError")
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangeintersectsNodebindinghtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode-binding.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode-binding.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode-binding.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,25 @@
</span><ins>+<!doctype html>
+<title>Range.intersectsNode</title>
+<link rel="author" title="Ms2ger" href="mailto:ms2ger@gmail.com">
+<meta name=timeout content=long>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<script>
+test(function() {
+ var r = document.createRange();
+ assert_throws(new TypeError(), function() { r.intersectsNode(); });
+ assert_throws(new TypeError(), function() { r.intersectsNode(null); });
+ assert_throws(new TypeError(), function() { r.intersectsNode(undefined); });
+ assert_throws(new TypeError(), function() { r.intersectsNode(42); });
+ assert_throws(new TypeError(), function() { r.intersectsNode("foo"); });
+ assert_throws(new TypeError(), function() { r.intersectsNode({}); });
+ r.detach();
+ assert_throws(new TypeError(), function() { r.intersectsNode(); });
+ assert_throws(new TypeError(), function() { r.intersectsNode(null); });
+ assert_throws(new TypeError(), function() { r.intersectsNode(undefined); });
+ assert_throws(new TypeError(), function() { r.intersectsNode(42); });
+ assert_throws(new TypeError(), function() { r.intersectsNode("foo"); });
+ assert_throws(new TypeError(), function() { r.intersectsNode({}); });
+}, "Calling intersectsNode without an argument or with an invalid argument should throw a TypeError.")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangeintersectsNodeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,2259 @@
</span><ins>+
+FAIL Node 0 paras[0], detached range InvalidStateError: DOM Exception 11
+PASS Node 0 paras[0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 0 paras[0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 0 paras[0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 0 paras[0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 0 paras[0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 0 paras[0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 0 paras[0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 0 paras[0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 0 paras[0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 0 paras[0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 0 paras[0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 0 paras[0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 0 paras[0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 0 paras[0], range 13 [document.head, 1, document.head, 1]
+PASS Node 0 paras[0], range 14 [document.body, 4, document.body, 5]
+PASS Node 0 paras[0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 0 paras[0], range 16 [paras[0], 0, paras[0], 1]
+PASS Node 0 paras[0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 0 paras[0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 0 paras[0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 0 paras[0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 0 paras[0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 0 paras[0], range 22 [testDiv, 2, paras[4], 1]
+PASS Node 0 paras[0], range 23 [document, 0, document, 1]
+PASS Node 0 paras[0], range 24 [document, 0, document, 2]
+PASS Node 0 paras[0], range 25 [comment, 2, comment, 3]
+PASS Node 0 paras[0], range 26 [testDiv, 0, comment, 5]
+PASS Node 0 paras[0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 0 paras[0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 0 paras[0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 0 paras[0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 0 paras[0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 0 paras[0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 0 paras[0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 0 paras[0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 0 paras[0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 0 paras[0], range 36 [docfrag, 0, docfrag, 0]
+PASS Node 0 paras[0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 0 paras[0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 0 paras[0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 0 paras[0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 0 paras[0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 0 paras[0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 0 paras[0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 0 paras[0], range 44 [paras[0], 0, paras[0], 0]
+PASS Node 0 paras[0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 0 paras[0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 0 paras[0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 0 paras[0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 0 paras[0], range 49 [document, 1, document, 2]
+PASS Node 0 paras[0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 0 paras[0], range 51 [paras[3], 1, comment, 8]
+PASS Node 0 paras[0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 0 paras[0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 0 paras[0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 0 paras[0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 0 paras[0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 0 paras[0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 0 paras[0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 0 paras[0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 1 paras[0].firstChild, detached range InvalidStateError: DOM Exception 11
+PASS Node 1 paras[0].firstChild, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 1 paras[0].firstChild, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 1 paras[0].firstChild, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 1 paras[0].firstChild, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 1 paras[0].firstChild, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 1 paras[0].firstChild, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 1 paras[0].firstChild, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 1 paras[0].firstChild, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 1 paras[0].firstChild, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 1 paras[0].firstChild, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 1 paras[0].firstChild, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 1 paras[0].firstChild, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 1 paras[0].firstChild, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 1 paras[0].firstChild, range 13 [document.head, 1, document.head, 1]
+PASS Node 1 paras[0].firstChild, range 14 [document.body, 4, document.body, 5]
+PASS Node 1 paras[0].firstChild, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 1 paras[0].firstChild, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 1 paras[0].firstChild, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 1 paras[0].firstChild, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 1 paras[0].firstChild, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 1 paras[0].firstChild, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 1 paras[0].firstChild, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 1 paras[0].firstChild, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 1 paras[0].firstChild, range 23 [document, 0, document, 1]
+PASS Node 1 paras[0].firstChild, range 24 [document, 0, document, 2]
+PASS Node 1 paras[0].firstChild, range 25 [comment, 2, comment, 3]
+PASS Node 1 paras[0].firstChild, range 26 [testDiv, 0, comment, 5]
+PASS Node 1 paras[0].firstChild, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 1 paras[0].firstChild, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 1 paras[0].firstChild, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 1 paras[0].firstChild, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 1 paras[0].firstChild, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 1 paras[0].firstChild, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 1 paras[0].firstChild, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 1 paras[0].firstChild, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 1 paras[0].firstChild, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 1 paras[0].firstChild, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 1 paras[0].firstChild, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 1 paras[0].firstChild, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 1 paras[0].firstChild, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 1 paras[0].firstChild, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 1 paras[0].firstChild, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 1 paras[0].firstChild, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 1 paras[0].firstChild, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 1 paras[0].firstChild, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 1 paras[0].firstChild, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 1 paras[0].firstChild, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 1 paras[0].firstChild, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 1 paras[0].firstChild, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 1 paras[0].firstChild, range 49 [document, 1, document, 2]
+PASS Node 1 paras[0].firstChild, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 1 paras[0].firstChild, range 51 [paras[3], 1, comment, 8]
+PASS Node 1 paras[0].firstChild, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 1 paras[0].firstChild, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 1 paras[0].firstChild, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 1 paras[0].firstChild, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 1 paras[0].firstChild, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 1 paras[0].firstChild, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 1 paras[0].firstChild, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 1 paras[0].firstChild, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 2 paras[1].firstChild, detached range InvalidStateError: DOM Exception 11
+PASS Node 2 paras[1].firstChild, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 2 paras[1].firstChild, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 2 paras[1].firstChild, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 2 paras[1].firstChild, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 2 paras[1].firstChild, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 2 paras[1].firstChild, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 2 paras[1].firstChild, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 2 paras[1].firstChild, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 2 paras[1].firstChild, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 2 paras[1].firstChild, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 2 paras[1].firstChild, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 2 paras[1].firstChild, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 2 paras[1].firstChild, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 2 paras[1].firstChild, range 13 [document.head, 1, document.head, 1]
+PASS Node 2 paras[1].firstChild, range 14 [document.body, 4, document.body, 5]
+PASS Node 2 paras[1].firstChild, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 2 paras[1].firstChild, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 2 paras[1].firstChild, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 2 paras[1].firstChild, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 2 paras[1].firstChild, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 2 paras[1].firstChild, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 2 paras[1].firstChild, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 2 paras[1].firstChild, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 2 paras[1].firstChild, range 23 [document, 0, document, 1]
+PASS Node 2 paras[1].firstChild, range 24 [document, 0, document, 2]
+PASS Node 2 paras[1].firstChild, range 25 [comment, 2, comment, 3]
+PASS Node 2 paras[1].firstChild, range 26 [testDiv, 0, comment, 5]
+PASS Node 2 paras[1].firstChild, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 2 paras[1].firstChild, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 2 paras[1].firstChild, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 2 paras[1].firstChild, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 2 paras[1].firstChild, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 2 paras[1].firstChild, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 2 paras[1].firstChild, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 2 paras[1].firstChild, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 2 paras[1].firstChild, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 2 paras[1].firstChild, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 2 paras[1].firstChild, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 2 paras[1].firstChild, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 2 paras[1].firstChild, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 2 paras[1].firstChild, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 2 paras[1].firstChild, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 2 paras[1].firstChild, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 2 paras[1].firstChild, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 2 paras[1].firstChild, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 2 paras[1].firstChild, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 2 paras[1].firstChild, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 2 paras[1].firstChild, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 2 paras[1].firstChild, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 2 paras[1].firstChild, range 49 [document, 1, document, 2]
+PASS Node 2 paras[1].firstChild, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 2 paras[1].firstChild, range 51 [paras[3], 1, comment, 8]
+PASS Node 2 paras[1].firstChild, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 2 paras[1].firstChild, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 2 paras[1].firstChild, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 2 paras[1].firstChild, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 2 paras[1].firstChild, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 2 paras[1].firstChild, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 2 paras[1].firstChild, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 2 paras[1].firstChild, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 3 foreignPara1, detached range InvalidStateError: DOM Exception 11
+PASS Node 3 foreignPara1, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 3 foreignPara1, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 3 foreignPara1, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 3 foreignPara1, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 3 foreignPara1, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 3 foreignPara1, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 3 foreignPara1, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 3 foreignPara1, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 3 foreignPara1, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 3 foreignPara1, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 3 foreignPara1, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 3 foreignPara1, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 3 foreignPara1, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 3 foreignPara1, range 13 [document.head, 1, document.head, 1]
+PASS Node 3 foreignPara1, range 14 [document.body, 4, document.body, 5]
+PASS Node 3 foreignPara1, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 3 foreignPara1, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 3 foreignPara1, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 3 foreignPara1, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 3 foreignPara1, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 3 foreignPara1, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 3 foreignPara1, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 3 foreignPara1, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 3 foreignPara1, range 23 [document, 0, document, 1]
+PASS Node 3 foreignPara1, range 24 [document, 0, document, 2]
+PASS Node 3 foreignPara1, range 25 [comment, 2, comment, 3]
+PASS Node 3 foreignPara1, range 26 [testDiv, 0, comment, 5]
+PASS Node 3 foreignPara1, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 3 foreignPara1, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 3 foreignPara1, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 3 foreignPara1, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 3 foreignPara1, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 3 foreignPara1, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 3 foreignPara1, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 3 foreignPara1, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 3 foreignPara1, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 3 foreignPara1, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 3 foreignPara1, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 3 foreignPara1, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 3 foreignPara1, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 3 foreignPara1, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 3 foreignPara1, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 3 foreignPara1, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 3 foreignPara1, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 3 foreignPara1, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 3 foreignPara1, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 3 foreignPara1, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 3 foreignPara1, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 3 foreignPara1, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 3 foreignPara1, range 49 [document, 1, document, 2]
+PASS Node 3 foreignPara1, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 3 foreignPara1, range 51 [paras[3], 1, comment, 8]
+PASS Node 3 foreignPara1, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 3 foreignPara1, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 3 foreignPara1, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 3 foreignPara1, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 3 foreignPara1, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 3 foreignPara1, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 3 foreignPara1, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 3 foreignPara1, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 4 foreignPara1.firstChild, detached range InvalidStateError: DOM Exception 11
+PASS Node 4 foreignPara1.firstChild, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 4 foreignPara1.firstChild, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 4 foreignPara1.firstChild, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 4 foreignPara1.firstChild, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 4 foreignPara1.firstChild, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 4 foreignPara1.firstChild, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 4 foreignPara1.firstChild, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 4 foreignPara1.firstChild, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 4 foreignPara1.firstChild, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 4 foreignPara1.firstChild, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 4 foreignPara1.firstChild, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 4 foreignPara1.firstChild, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 4 foreignPara1.firstChild, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 4 foreignPara1.firstChild, range 13 [document.head, 1, document.head, 1]
+PASS Node 4 foreignPara1.firstChild, range 14 [document.body, 4, document.body, 5]
+PASS Node 4 foreignPara1.firstChild, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 4 foreignPara1.firstChild, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 4 foreignPara1.firstChild, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 4 foreignPara1.firstChild, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 4 foreignPara1.firstChild, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 4 foreignPara1.firstChild, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 4 foreignPara1.firstChild, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 4 foreignPara1.firstChild, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 4 foreignPara1.firstChild, range 23 [document, 0, document, 1]
+PASS Node 4 foreignPara1.firstChild, range 24 [document, 0, document, 2]
+PASS Node 4 foreignPara1.firstChild, range 25 [comment, 2, comment, 3]
+PASS Node 4 foreignPara1.firstChild, range 26 [testDiv, 0, comment, 5]
+PASS Node 4 foreignPara1.firstChild, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 4 foreignPara1.firstChild, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 4 foreignPara1.firstChild, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 4 foreignPara1.firstChild, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 4 foreignPara1.firstChild, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 4 foreignPara1.firstChild, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 4 foreignPara1.firstChild, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 4 foreignPara1.firstChild, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 4 foreignPara1.firstChild, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 4 foreignPara1.firstChild, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 4 foreignPara1.firstChild, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 4 foreignPara1.firstChild, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 4 foreignPara1.firstChild, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 4 foreignPara1.firstChild, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 4 foreignPara1.firstChild, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 4 foreignPara1.firstChild, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 4 foreignPara1.firstChild, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 4 foreignPara1.firstChild, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 4 foreignPara1.firstChild, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 4 foreignPara1.firstChild, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 4 foreignPara1.firstChild, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 4 foreignPara1.firstChild, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 4 foreignPara1.firstChild, range 49 [document, 1, document, 2]
+PASS Node 4 foreignPara1.firstChild, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 4 foreignPara1.firstChild, range 51 [paras[3], 1, comment, 8]
+PASS Node 4 foreignPara1.firstChild, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 4 foreignPara1.firstChild, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 4 foreignPara1.firstChild, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 4 foreignPara1.firstChild, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 4 foreignPara1.firstChild, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 4 foreignPara1.firstChild, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 4 foreignPara1.firstChild, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 4 foreignPara1.firstChild, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 5 detachedPara1, detached range InvalidStateError: DOM Exception 11
+PASS Node 5 detachedPara1, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 5 detachedPara1, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 5 detachedPara1, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 5 detachedPara1, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 5 detachedPara1, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 5 detachedPara1, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 5 detachedPara1, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 5 detachedPara1, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 5 detachedPara1, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 5 detachedPara1, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 5 detachedPara1, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 5 detachedPara1, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 5 detachedPara1, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 5 detachedPara1, range 13 [document.head, 1, document.head, 1]
+PASS Node 5 detachedPara1, range 14 [document.body, 4, document.body, 5]
+PASS Node 5 detachedPara1, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 5 detachedPara1, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 5 detachedPara1, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 5 detachedPara1, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 5 detachedPara1, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 5 detachedPara1, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 5 detachedPara1, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 5 detachedPara1, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 5 detachedPara1, range 23 [document, 0, document, 1]
+PASS Node 5 detachedPara1, range 24 [document, 0, document, 2]
+PASS Node 5 detachedPara1, range 25 [comment, 2, comment, 3]
+PASS Node 5 detachedPara1, range 26 [testDiv, 0, comment, 5]
+PASS Node 5 detachedPara1, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 5 detachedPara1, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 5 detachedPara1, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 5 detachedPara1, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 5 detachedPara1, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 5 detachedPara1, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 5 detachedPara1, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 5 detachedPara1, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 5 detachedPara1, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 5 detachedPara1, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 5 detachedPara1, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 5 detachedPara1, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 5 detachedPara1, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 5 detachedPara1, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 5 detachedPara1, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 5 detachedPara1, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 5 detachedPara1, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 5 detachedPara1, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 5 detachedPara1, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 5 detachedPara1, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 5 detachedPara1, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 5 detachedPara1, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 5 detachedPara1, range 49 [document, 1, document, 2]
+PASS Node 5 detachedPara1, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 5 detachedPara1, range 51 [paras[3], 1, comment, 8]
+PASS Node 5 detachedPara1, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 5 detachedPara1, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 5 detachedPara1, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 5 detachedPara1, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 5 detachedPara1, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 5 detachedPara1, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 5 detachedPara1, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 5 detachedPara1, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 6 detachedPara1.firstChild, detached range InvalidStateError: DOM Exception 11
+PASS Node 6 detachedPara1.firstChild, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 6 detachedPara1.firstChild, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 6 detachedPara1.firstChild, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 6 detachedPara1.firstChild, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 6 detachedPara1.firstChild, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 6 detachedPara1.firstChild, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 6 detachedPara1.firstChild, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 6 detachedPara1.firstChild, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 6 detachedPara1.firstChild, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 6 detachedPara1.firstChild, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 6 detachedPara1.firstChild, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 6 detachedPara1.firstChild, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 6 detachedPara1.firstChild, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 6 detachedPara1.firstChild, range 13 [document.head, 1, document.head, 1]
+PASS Node 6 detachedPara1.firstChild, range 14 [document.body, 4, document.body, 5]
+PASS Node 6 detachedPara1.firstChild, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 6 detachedPara1.firstChild, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 6 detachedPara1.firstChild, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 6 detachedPara1.firstChild, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 6 detachedPara1.firstChild, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 6 detachedPara1.firstChild, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 6 detachedPara1.firstChild, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 6 detachedPara1.firstChild, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 6 detachedPara1.firstChild, range 23 [document, 0, document, 1]
+PASS Node 6 detachedPara1.firstChild, range 24 [document, 0, document, 2]
+PASS Node 6 detachedPara1.firstChild, range 25 [comment, 2, comment, 3]
+PASS Node 6 detachedPara1.firstChild, range 26 [testDiv, 0, comment, 5]
+PASS Node 6 detachedPara1.firstChild, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 6 detachedPara1.firstChild, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 6 detachedPara1.firstChild, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 6 detachedPara1.firstChild, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 6 detachedPara1.firstChild, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 6 detachedPara1.firstChild, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 6 detachedPara1.firstChild, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 6 detachedPara1.firstChild, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 6 detachedPara1.firstChild, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 6 detachedPara1.firstChild, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 6 detachedPara1.firstChild, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 6 detachedPara1.firstChild, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 6 detachedPara1.firstChild, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 6 detachedPara1.firstChild, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 6 detachedPara1.firstChild, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 6 detachedPara1.firstChild, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 6 detachedPara1.firstChild, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 6 detachedPara1.firstChild, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 6 detachedPara1.firstChild, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 6 detachedPara1.firstChild, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 6 detachedPara1.firstChild, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 6 detachedPara1.firstChild, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 6 detachedPara1.firstChild, range 49 [document, 1, document, 2]
+PASS Node 6 detachedPara1.firstChild, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 6 detachedPara1.firstChild, range 51 [paras[3], 1, comment, 8]
+PASS Node 6 detachedPara1.firstChild, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 6 detachedPara1.firstChild, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 6 detachedPara1.firstChild, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 6 detachedPara1.firstChild, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 6 detachedPara1.firstChild, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 6 detachedPara1.firstChild, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 6 detachedPara1.firstChild, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 6 detachedPara1.firstChild, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 7 document, detached range InvalidStateError: DOM Exception 11
+FAIL Node 7 document, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 10 [document.documentElement, 0, document.documentElement, 1] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 11 [document.documentElement, 0, document.documentElement, 2] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 12 [document.documentElement, 1, document.documentElement, 2] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 13 [document.head, 1, document.head, 1] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 14 [document.body, 4, document.body, 5] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 16 [paras[0], 0, paras[0], 1] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 17 [detachedPara1, 0, detachedPara1, 1] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 20 [paras[0].firstChild, 3, paras[3], 1] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 21 [paras[0], 0, paras[0].firstChild, 7] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 22 [testDiv, 2, paras[4], 1] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 23 [document, 0, document, 1] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 24 [document, 0, document, 2] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 25 [comment, 2, comment, 3] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 26 [testDiv, 0, comment, 5] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 27 [foreignDoc, 1, foreignComment, 2] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 28 [foreignDoc.body, 0, foreignTextNode, 36] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 29 [xmlDoc, 1, xmlComment, 0] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 30 [detachedTextNode, 0, detachedTextNode, 8] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 33 [detachedComment, 3, detachedComment, 4] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 34 [detachedForeignComment, 0, detachedForeignComment, 1] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 35 [detachedXmlComment, 2, detachedXmlComment, 6] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 36 [docfrag, 0, docfrag, 0] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 37 [processingInstruction, 0, processingInstruction, 4] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 42 [foreignDoc.head, 1, foreignDoc.head, 1] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 43 [foreignDoc.body, 0, foreignDoc.body, 0] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 44 [paras[0], 0, paras[0], 0] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 45 [detachedPara1, 0, detachedPara1, 0] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 46 [testDiv, 1, paras[2].firstChild, 5] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 47 [document.documentElement, 1, document.body, 0] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 49 [document, 1, document, 2] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 50 [paras[2].firstChild, 4, comment, 2] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 51 [paras[3], 1, comment, 8] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 52 [foreignDoc, 0, foreignDoc, 0] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 53 [xmlDoc, 0, xmlDoc, 0] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 56 [detachedComment, 5, detachedComment, 5] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 57 [detachedForeignComment, 4, detachedForeignComment, 4] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 58 [foreignDocfrag, 0, foreignDocfrag, 0] NotFoundError: DOM Exception 8
+FAIL Node 7 document, range 59 [xmlDocfrag, 0, xmlDocfrag, 0] NotFoundError: DOM Exception 8
+FAIL Node 8 detachedDiv, detached range InvalidStateError: DOM Exception 11
+PASS Node 8 detachedDiv, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 8 detachedDiv, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 8 detachedDiv, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 8 detachedDiv, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 8 detachedDiv, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 8 detachedDiv, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 8 detachedDiv, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 8 detachedDiv, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 8 detachedDiv, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 8 detachedDiv, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 8 detachedDiv, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 8 detachedDiv, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 8 detachedDiv, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 8 detachedDiv, range 13 [document.head, 1, document.head, 1]
+PASS Node 8 detachedDiv, range 14 [document.body, 4, document.body, 5]
+PASS Node 8 detachedDiv, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 8 detachedDiv, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 8 detachedDiv, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 8 detachedDiv, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 8 detachedDiv, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 8 detachedDiv, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 8 detachedDiv, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 8 detachedDiv, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 8 detachedDiv, range 23 [document, 0, document, 1]
+PASS Node 8 detachedDiv, range 24 [document, 0, document, 2]
+PASS Node 8 detachedDiv, range 25 [comment, 2, comment, 3]
+PASS Node 8 detachedDiv, range 26 [testDiv, 0, comment, 5]
+PASS Node 8 detachedDiv, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 8 detachedDiv, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 8 detachedDiv, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 8 detachedDiv, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 8 detachedDiv, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 8 detachedDiv, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 8 detachedDiv, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 8 detachedDiv, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 8 detachedDiv, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 8 detachedDiv, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 8 detachedDiv, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 8 detachedDiv, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 8 detachedDiv, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 8 detachedDiv, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 8 detachedDiv, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 8 detachedDiv, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 8 detachedDiv, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 8 detachedDiv, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 8 detachedDiv, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 8 detachedDiv, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 8 detachedDiv, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 8 detachedDiv, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 8 detachedDiv, range 49 [document, 1, document, 2]
+PASS Node 8 detachedDiv, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 8 detachedDiv, range 51 [paras[3], 1, comment, 8]
+PASS Node 8 detachedDiv, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 8 detachedDiv, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 8 detachedDiv, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 8 detachedDiv, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 8 detachedDiv, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 8 detachedDiv, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 8 detachedDiv, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 8 detachedDiv, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 9 foreignDoc, detached range InvalidStateError: DOM Exception 11
+PASS Node 9 foreignDoc, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 9 foreignDoc, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 9 foreignDoc, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 9 foreignDoc, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 9 foreignDoc, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 9 foreignDoc, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 9 foreignDoc, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 9 foreignDoc, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 9 foreignDoc, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 9 foreignDoc, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 9 foreignDoc, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 9 foreignDoc, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 9 foreignDoc, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 9 foreignDoc, range 13 [document.head, 1, document.head, 1]
+PASS Node 9 foreignDoc, range 14 [document.body, 4, document.body, 5]
+PASS Node 9 foreignDoc, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 9 foreignDoc, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 9 foreignDoc, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 9 foreignDoc, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 9 foreignDoc, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 9 foreignDoc, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 9 foreignDoc, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 9 foreignDoc, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 9 foreignDoc, range 23 [document, 0, document, 1]
+PASS Node 9 foreignDoc, range 24 [document, 0, document, 2]
+PASS Node 9 foreignDoc, range 25 [comment, 2, comment, 3]
+PASS Node 9 foreignDoc, range 26 [testDiv, 0, comment, 5]
+PASS Node 9 foreignDoc, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 9 foreignDoc, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 9 foreignDoc, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 9 foreignDoc, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 9 foreignDoc, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 9 foreignDoc, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 9 foreignDoc, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 9 foreignDoc, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 9 foreignDoc, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 9 foreignDoc, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 9 foreignDoc, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 9 foreignDoc, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 9 foreignDoc, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 9 foreignDoc, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 9 foreignDoc, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 9 foreignDoc, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 9 foreignDoc, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 9 foreignDoc, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 9 foreignDoc, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 9 foreignDoc, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 9 foreignDoc, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 9 foreignDoc, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 9 foreignDoc, range 49 [document, 1, document, 2]
+PASS Node 9 foreignDoc, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 9 foreignDoc, range 51 [paras[3], 1, comment, 8]
+PASS Node 9 foreignDoc, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 9 foreignDoc, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 9 foreignDoc, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 9 foreignDoc, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 9 foreignDoc, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 9 foreignDoc, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 9 foreignDoc, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 9 foreignDoc, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 10 foreignPara2, detached range InvalidStateError: DOM Exception 11
+PASS Node 10 foreignPara2, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 10 foreignPara2, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 10 foreignPara2, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 10 foreignPara2, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 10 foreignPara2, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 10 foreignPara2, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 10 foreignPara2, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 10 foreignPara2, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 10 foreignPara2, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 10 foreignPara2, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 10 foreignPara2, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 10 foreignPara2, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 10 foreignPara2, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 10 foreignPara2, range 13 [document.head, 1, document.head, 1]
+PASS Node 10 foreignPara2, range 14 [document.body, 4, document.body, 5]
+PASS Node 10 foreignPara2, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 10 foreignPara2, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 10 foreignPara2, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 10 foreignPara2, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 10 foreignPara2, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 10 foreignPara2, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 10 foreignPara2, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 10 foreignPara2, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 10 foreignPara2, range 23 [document, 0, document, 1]
+PASS Node 10 foreignPara2, range 24 [document, 0, document, 2]
+PASS Node 10 foreignPara2, range 25 [comment, 2, comment, 3]
+PASS Node 10 foreignPara2, range 26 [testDiv, 0, comment, 5]
+PASS Node 10 foreignPara2, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 10 foreignPara2, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 10 foreignPara2, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 10 foreignPara2, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 10 foreignPara2, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 10 foreignPara2, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 10 foreignPara2, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 10 foreignPara2, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 10 foreignPara2, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 10 foreignPara2, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 10 foreignPara2, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 10 foreignPara2, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 10 foreignPara2, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 10 foreignPara2, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 10 foreignPara2, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 10 foreignPara2, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 10 foreignPara2, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 10 foreignPara2, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 10 foreignPara2, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 10 foreignPara2, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 10 foreignPara2, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 10 foreignPara2, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 10 foreignPara2, range 49 [document, 1, document, 2]
+PASS Node 10 foreignPara2, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 10 foreignPara2, range 51 [paras[3], 1, comment, 8]
+PASS Node 10 foreignPara2, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 10 foreignPara2, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 10 foreignPara2, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 10 foreignPara2, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 10 foreignPara2, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 10 foreignPara2, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 10 foreignPara2, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 10 foreignPara2, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 11 xmlDoc, detached range InvalidStateError: DOM Exception 11
+PASS Node 11 xmlDoc, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 11 xmlDoc, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 11 xmlDoc, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 11 xmlDoc, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 11 xmlDoc, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 11 xmlDoc, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 11 xmlDoc, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 11 xmlDoc, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 11 xmlDoc, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 11 xmlDoc, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 11 xmlDoc, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 11 xmlDoc, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 11 xmlDoc, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 11 xmlDoc, range 13 [document.head, 1, document.head, 1]
+PASS Node 11 xmlDoc, range 14 [document.body, 4, document.body, 5]
+PASS Node 11 xmlDoc, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 11 xmlDoc, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 11 xmlDoc, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 11 xmlDoc, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 11 xmlDoc, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 11 xmlDoc, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 11 xmlDoc, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 11 xmlDoc, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 11 xmlDoc, range 23 [document, 0, document, 1]
+PASS Node 11 xmlDoc, range 24 [document, 0, document, 2]
+PASS Node 11 xmlDoc, range 25 [comment, 2, comment, 3]
+PASS Node 11 xmlDoc, range 26 [testDiv, 0, comment, 5]
+PASS Node 11 xmlDoc, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 11 xmlDoc, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 11 xmlDoc, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 11 xmlDoc, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 11 xmlDoc, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 11 xmlDoc, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 11 xmlDoc, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 11 xmlDoc, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 11 xmlDoc, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 11 xmlDoc, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 11 xmlDoc, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 11 xmlDoc, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 11 xmlDoc, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 11 xmlDoc, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 11 xmlDoc, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 11 xmlDoc, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 11 xmlDoc, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 11 xmlDoc, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 11 xmlDoc, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 11 xmlDoc, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 11 xmlDoc, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 11 xmlDoc, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 11 xmlDoc, range 49 [document, 1, document, 2]
+PASS Node 11 xmlDoc, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 11 xmlDoc, range 51 [paras[3], 1, comment, 8]
+PASS Node 11 xmlDoc, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 11 xmlDoc, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 11 xmlDoc, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 11 xmlDoc, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 11 xmlDoc, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 11 xmlDoc, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 11 xmlDoc, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 11 xmlDoc, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 12 xmlElement, detached range InvalidStateError: DOM Exception 11
+PASS Node 12 xmlElement, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 12 xmlElement, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 12 xmlElement, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 12 xmlElement, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 12 xmlElement, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 12 xmlElement, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 12 xmlElement, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 12 xmlElement, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 12 xmlElement, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 12 xmlElement, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 12 xmlElement, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 12 xmlElement, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 12 xmlElement, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 12 xmlElement, range 13 [document.head, 1, document.head, 1]
+PASS Node 12 xmlElement, range 14 [document.body, 4, document.body, 5]
+PASS Node 12 xmlElement, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 12 xmlElement, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 12 xmlElement, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 12 xmlElement, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 12 xmlElement, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 12 xmlElement, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 12 xmlElement, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 12 xmlElement, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 12 xmlElement, range 23 [document, 0, document, 1]
+PASS Node 12 xmlElement, range 24 [document, 0, document, 2]
+PASS Node 12 xmlElement, range 25 [comment, 2, comment, 3]
+PASS Node 12 xmlElement, range 26 [testDiv, 0, comment, 5]
+PASS Node 12 xmlElement, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 12 xmlElement, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 12 xmlElement, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 12 xmlElement, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 12 xmlElement, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 12 xmlElement, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 12 xmlElement, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 12 xmlElement, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 12 xmlElement, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 12 xmlElement, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 12 xmlElement, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 12 xmlElement, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 12 xmlElement, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 12 xmlElement, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 12 xmlElement, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 12 xmlElement, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 12 xmlElement, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 12 xmlElement, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 12 xmlElement, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 12 xmlElement, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 12 xmlElement, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 12 xmlElement, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 12 xmlElement, range 49 [document, 1, document, 2]
+PASS Node 12 xmlElement, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 12 xmlElement, range 51 [paras[3], 1, comment, 8]
+PASS Node 12 xmlElement, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 12 xmlElement, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 12 xmlElement, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 12 xmlElement, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 12 xmlElement, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 12 xmlElement, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 12 xmlElement, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 12 xmlElement, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 13 detachedTextNode, detached range InvalidStateError: DOM Exception 11
+PASS Node 13 detachedTextNode, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 13 detachedTextNode, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 13 detachedTextNode, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 13 detachedTextNode, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 13 detachedTextNode, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 13 detachedTextNode, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 13 detachedTextNode, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 13 detachedTextNode, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 13 detachedTextNode, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 13 detachedTextNode, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 13 detachedTextNode, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 13 detachedTextNode, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 13 detachedTextNode, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 13 detachedTextNode, range 13 [document.head, 1, document.head, 1]
+PASS Node 13 detachedTextNode, range 14 [document.body, 4, document.body, 5]
+PASS Node 13 detachedTextNode, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 13 detachedTextNode, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 13 detachedTextNode, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 13 detachedTextNode, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 13 detachedTextNode, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 13 detachedTextNode, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 13 detachedTextNode, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 13 detachedTextNode, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 13 detachedTextNode, range 23 [document, 0, document, 1]
+PASS Node 13 detachedTextNode, range 24 [document, 0, document, 2]
+PASS Node 13 detachedTextNode, range 25 [comment, 2, comment, 3]
+PASS Node 13 detachedTextNode, range 26 [testDiv, 0, comment, 5]
+PASS Node 13 detachedTextNode, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 13 detachedTextNode, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 13 detachedTextNode, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 13 detachedTextNode, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 13 detachedTextNode, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 13 detachedTextNode, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 13 detachedTextNode, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 13 detachedTextNode, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 13 detachedTextNode, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 13 detachedTextNode, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 13 detachedTextNode, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 13 detachedTextNode, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 13 detachedTextNode, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 13 detachedTextNode, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 13 detachedTextNode, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 13 detachedTextNode, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 13 detachedTextNode, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 13 detachedTextNode, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 13 detachedTextNode, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 13 detachedTextNode, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 13 detachedTextNode, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 13 detachedTextNode, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 13 detachedTextNode, range 49 [document, 1, document, 2]
+PASS Node 13 detachedTextNode, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 13 detachedTextNode, range 51 [paras[3], 1, comment, 8]
+PASS Node 13 detachedTextNode, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 13 detachedTextNode, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 13 detachedTextNode, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 13 detachedTextNode, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 13 detachedTextNode, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 13 detachedTextNode, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 13 detachedTextNode, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 13 detachedTextNode, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 14 foreignTextNode, detached range InvalidStateError: DOM Exception 11
+PASS Node 14 foreignTextNode, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 14 foreignTextNode, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 14 foreignTextNode, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 14 foreignTextNode, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 14 foreignTextNode, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 14 foreignTextNode, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 14 foreignTextNode, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 14 foreignTextNode, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 14 foreignTextNode, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 14 foreignTextNode, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 14 foreignTextNode, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 14 foreignTextNode, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 14 foreignTextNode, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 14 foreignTextNode, range 13 [document.head, 1, document.head, 1]
+PASS Node 14 foreignTextNode, range 14 [document.body, 4, document.body, 5]
+PASS Node 14 foreignTextNode, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 14 foreignTextNode, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 14 foreignTextNode, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 14 foreignTextNode, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 14 foreignTextNode, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 14 foreignTextNode, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 14 foreignTextNode, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 14 foreignTextNode, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 14 foreignTextNode, range 23 [document, 0, document, 1]
+PASS Node 14 foreignTextNode, range 24 [document, 0, document, 2]
+PASS Node 14 foreignTextNode, range 25 [comment, 2, comment, 3]
+PASS Node 14 foreignTextNode, range 26 [testDiv, 0, comment, 5]
+PASS Node 14 foreignTextNode, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 14 foreignTextNode, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 14 foreignTextNode, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 14 foreignTextNode, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 14 foreignTextNode, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 14 foreignTextNode, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 14 foreignTextNode, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 14 foreignTextNode, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 14 foreignTextNode, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 14 foreignTextNode, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 14 foreignTextNode, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 14 foreignTextNode, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 14 foreignTextNode, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 14 foreignTextNode, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 14 foreignTextNode, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 14 foreignTextNode, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 14 foreignTextNode, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 14 foreignTextNode, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 14 foreignTextNode, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 14 foreignTextNode, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 14 foreignTextNode, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 14 foreignTextNode, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 14 foreignTextNode, range 49 [document, 1, document, 2]
+PASS Node 14 foreignTextNode, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 14 foreignTextNode, range 51 [paras[3], 1, comment, 8]
+PASS Node 14 foreignTextNode, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 14 foreignTextNode, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 14 foreignTextNode, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 14 foreignTextNode, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 14 foreignTextNode, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 14 foreignTextNode, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 14 foreignTextNode, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 14 foreignTextNode, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 15 processingInstruction, detached range InvalidStateError: DOM Exception 11
+PASS Node 15 processingInstruction, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 15 processingInstruction, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 15 processingInstruction, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 15 processingInstruction, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 15 processingInstruction, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 15 processingInstruction, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 15 processingInstruction, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 15 processingInstruction, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 15 processingInstruction, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 15 processingInstruction, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 15 processingInstruction, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 15 processingInstruction, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 15 processingInstruction, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 15 processingInstruction, range 13 [document.head, 1, document.head, 1]
+PASS Node 15 processingInstruction, range 14 [document.body, 4, document.body, 5]
+PASS Node 15 processingInstruction, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 15 processingInstruction, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 15 processingInstruction, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 15 processingInstruction, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 15 processingInstruction, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 15 processingInstruction, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 15 processingInstruction, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 15 processingInstruction, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 15 processingInstruction, range 23 [document, 0, document, 1]
+PASS Node 15 processingInstruction, range 24 [document, 0, document, 2]
+PASS Node 15 processingInstruction, range 25 [comment, 2, comment, 3]
+PASS Node 15 processingInstruction, range 26 [testDiv, 0, comment, 5]
+PASS Node 15 processingInstruction, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 15 processingInstruction, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 15 processingInstruction, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 15 processingInstruction, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 15 processingInstruction, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 15 processingInstruction, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 15 processingInstruction, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 15 processingInstruction, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 15 processingInstruction, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 15 processingInstruction, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 15 processingInstruction, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 15 processingInstruction, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 15 processingInstruction, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 15 processingInstruction, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 15 processingInstruction, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 15 processingInstruction, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 15 processingInstruction, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 15 processingInstruction, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 15 processingInstruction, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 15 processingInstruction, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 15 processingInstruction, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 15 processingInstruction, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 15 processingInstruction, range 49 [document, 1, document, 2]
+PASS Node 15 processingInstruction, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 15 processingInstruction, range 51 [paras[3], 1, comment, 8]
+PASS Node 15 processingInstruction, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 15 processingInstruction, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 15 processingInstruction, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 15 processingInstruction, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 15 processingInstruction, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 15 processingInstruction, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 15 processingInstruction, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 15 processingInstruction, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 16 detachedProcessingInstruction, detached range InvalidStateError: DOM Exception 11
+PASS Node 16 detachedProcessingInstruction, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 16 detachedProcessingInstruction, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 16 detachedProcessingInstruction, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 16 detachedProcessingInstruction, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 16 detachedProcessingInstruction, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 16 detachedProcessingInstruction, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 16 detachedProcessingInstruction, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 16 detachedProcessingInstruction, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 16 detachedProcessingInstruction, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 16 detachedProcessingInstruction, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 16 detachedProcessingInstruction, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 16 detachedProcessingInstruction, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 16 detachedProcessingInstruction, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 16 detachedProcessingInstruction, range 13 [document.head, 1, document.head, 1]
+PASS Node 16 detachedProcessingInstruction, range 14 [document.body, 4, document.body, 5]
+PASS Node 16 detachedProcessingInstruction, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 16 detachedProcessingInstruction, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 16 detachedProcessingInstruction, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 16 detachedProcessingInstruction, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 16 detachedProcessingInstruction, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 16 detachedProcessingInstruction, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 16 detachedProcessingInstruction, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 16 detachedProcessingInstruction, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 16 detachedProcessingInstruction, range 23 [document, 0, document, 1]
+PASS Node 16 detachedProcessingInstruction, range 24 [document, 0, document, 2]
+PASS Node 16 detachedProcessingInstruction, range 25 [comment, 2, comment, 3]
+PASS Node 16 detachedProcessingInstruction, range 26 [testDiv, 0, comment, 5]
+PASS Node 16 detachedProcessingInstruction, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 16 detachedProcessingInstruction, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 16 detachedProcessingInstruction, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 16 detachedProcessingInstruction, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 16 detachedProcessingInstruction, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 16 detachedProcessingInstruction, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 16 detachedProcessingInstruction, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 16 detachedProcessingInstruction, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 16 detachedProcessingInstruction, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 16 detachedProcessingInstruction, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 16 detachedProcessingInstruction, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 16 detachedProcessingInstruction, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 16 detachedProcessingInstruction, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 16 detachedProcessingInstruction, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 16 detachedProcessingInstruction, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 16 detachedProcessingInstruction, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 16 detachedProcessingInstruction, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 16 detachedProcessingInstruction, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 16 detachedProcessingInstruction, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 16 detachedProcessingInstruction, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 16 detachedProcessingInstruction, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 16 detachedProcessingInstruction, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 16 detachedProcessingInstruction, range 49 [document, 1, document, 2]
+PASS Node 16 detachedProcessingInstruction, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 16 detachedProcessingInstruction, range 51 [paras[3], 1, comment, 8]
+PASS Node 16 detachedProcessingInstruction, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 16 detachedProcessingInstruction, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 16 detachedProcessingInstruction, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 16 detachedProcessingInstruction, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 16 detachedProcessingInstruction, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 16 detachedProcessingInstruction, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 16 detachedProcessingInstruction, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 16 detachedProcessingInstruction, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 17 comment, detached range InvalidStateError: DOM Exception 11
+PASS Node 17 comment, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 17 comment, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 17 comment, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 17 comment, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 17 comment, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 17 comment, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 17 comment, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 17 comment, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 17 comment, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 17 comment, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 17 comment, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 17 comment, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 17 comment, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 17 comment, range 13 [document.head, 1, document.head, 1]
+PASS Node 17 comment, range 14 [document.body, 4, document.body, 5]
+PASS Node 17 comment, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 17 comment, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 17 comment, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 17 comment, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 17 comment, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 17 comment, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 17 comment, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 17 comment, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 17 comment, range 23 [document, 0, document, 1]
+PASS Node 17 comment, range 24 [document, 0, document, 2]
+PASS Node 17 comment, range 25 [comment, 2, comment, 3]
+PASS Node 17 comment, range 26 [testDiv, 0, comment, 5]
+PASS Node 17 comment, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 17 comment, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 17 comment, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 17 comment, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 17 comment, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 17 comment, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 17 comment, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 17 comment, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 17 comment, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 17 comment, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 17 comment, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 17 comment, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 17 comment, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 17 comment, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 17 comment, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 17 comment, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 17 comment, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 17 comment, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 17 comment, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 17 comment, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 17 comment, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 17 comment, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 17 comment, range 49 [document, 1, document, 2]
+PASS Node 17 comment, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 17 comment, range 51 [paras[3], 1, comment, 8]
+PASS Node 17 comment, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 17 comment, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 17 comment, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 17 comment, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 17 comment, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 17 comment, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 17 comment, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 17 comment, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 18 detachedComment, detached range InvalidStateError: DOM Exception 11
+PASS Node 18 detachedComment, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 18 detachedComment, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 18 detachedComment, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 18 detachedComment, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 18 detachedComment, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 18 detachedComment, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 18 detachedComment, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 18 detachedComment, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 18 detachedComment, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 18 detachedComment, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 18 detachedComment, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 18 detachedComment, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 18 detachedComment, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 18 detachedComment, range 13 [document.head, 1, document.head, 1]
+PASS Node 18 detachedComment, range 14 [document.body, 4, document.body, 5]
+PASS Node 18 detachedComment, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 18 detachedComment, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 18 detachedComment, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 18 detachedComment, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 18 detachedComment, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 18 detachedComment, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 18 detachedComment, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 18 detachedComment, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 18 detachedComment, range 23 [document, 0, document, 1]
+PASS Node 18 detachedComment, range 24 [document, 0, document, 2]
+PASS Node 18 detachedComment, range 25 [comment, 2, comment, 3]
+PASS Node 18 detachedComment, range 26 [testDiv, 0, comment, 5]
+PASS Node 18 detachedComment, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 18 detachedComment, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 18 detachedComment, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 18 detachedComment, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 18 detachedComment, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 18 detachedComment, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 18 detachedComment, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 18 detachedComment, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 18 detachedComment, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 18 detachedComment, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 18 detachedComment, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 18 detachedComment, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 18 detachedComment, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 18 detachedComment, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 18 detachedComment, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 18 detachedComment, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 18 detachedComment, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 18 detachedComment, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 18 detachedComment, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 18 detachedComment, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 18 detachedComment, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 18 detachedComment, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 18 detachedComment, range 49 [document, 1, document, 2]
+PASS Node 18 detachedComment, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 18 detachedComment, range 51 [paras[3], 1, comment, 8]
+PASS Node 18 detachedComment, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 18 detachedComment, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 18 detachedComment, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 18 detachedComment, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 18 detachedComment, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 18 detachedComment, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 18 detachedComment, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 18 detachedComment, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 19 docfrag, detached range InvalidStateError: DOM Exception 11
+PASS Node 19 docfrag, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 19 docfrag, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 19 docfrag, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 19 docfrag, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 19 docfrag, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 19 docfrag, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 19 docfrag, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 19 docfrag, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 19 docfrag, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 19 docfrag, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 19 docfrag, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 19 docfrag, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 19 docfrag, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 19 docfrag, range 13 [document.head, 1, document.head, 1]
+PASS Node 19 docfrag, range 14 [document.body, 4, document.body, 5]
+PASS Node 19 docfrag, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 19 docfrag, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 19 docfrag, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 19 docfrag, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 19 docfrag, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 19 docfrag, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 19 docfrag, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 19 docfrag, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 19 docfrag, range 23 [document, 0, document, 1]
+PASS Node 19 docfrag, range 24 [document, 0, document, 2]
+PASS Node 19 docfrag, range 25 [comment, 2, comment, 3]
+PASS Node 19 docfrag, range 26 [testDiv, 0, comment, 5]
+PASS Node 19 docfrag, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 19 docfrag, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 19 docfrag, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 19 docfrag, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 19 docfrag, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 19 docfrag, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 19 docfrag, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 19 docfrag, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 19 docfrag, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 19 docfrag, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 19 docfrag, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 19 docfrag, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 19 docfrag, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 19 docfrag, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 19 docfrag, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 19 docfrag, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 19 docfrag, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 19 docfrag, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 19 docfrag, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 19 docfrag, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 19 docfrag, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 19 docfrag, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 19 docfrag, range 49 [document, 1, document, 2]
+PASS Node 19 docfrag, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 19 docfrag, range 51 [paras[3], 1, comment, 8]
+PASS Node 19 docfrag, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 19 docfrag, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 19 docfrag, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 19 docfrag, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 19 docfrag, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 19 docfrag, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 19 docfrag, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 19 docfrag, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 20 doctype, detached range InvalidStateError: DOM Exception 11
+PASS Node 20 doctype, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 20 doctype, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 20 doctype, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 20 doctype, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 20 doctype, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 20 doctype, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 20 doctype, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 20 doctype, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 20 doctype, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 20 doctype, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 20 doctype, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 20 doctype, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 20 doctype, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 20 doctype, range 13 [document.head, 1, document.head, 1]
+PASS Node 20 doctype, range 14 [document.body, 4, document.body, 5]
+PASS Node 20 doctype, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 20 doctype, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 20 doctype, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 20 doctype, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 20 doctype, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 20 doctype, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 20 doctype, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 20 doctype, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 20 doctype, range 23 [document, 0, document, 1]
+PASS Node 20 doctype, range 24 [document, 0, document, 2]
+PASS Node 20 doctype, range 25 [comment, 2, comment, 3]
+PASS Node 20 doctype, range 26 [testDiv, 0, comment, 5]
+PASS Node 20 doctype, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 20 doctype, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 20 doctype, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 20 doctype, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 20 doctype, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 20 doctype, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 20 doctype, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 20 doctype, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 20 doctype, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 20 doctype, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 20 doctype, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 20 doctype, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 20 doctype, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 20 doctype, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 20 doctype, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 20 doctype, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 20 doctype, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 20 doctype, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 20 doctype, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 20 doctype, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 20 doctype, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 20 doctype, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 20 doctype, range 49 [document, 1, document, 2]
+PASS Node 20 doctype, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 20 doctype, range 51 [paras[3], 1, comment, 8]
+PASS Node 20 doctype, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 20 doctype, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 20 doctype, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 20 doctype, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 20 doctype, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 20 doctype, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 20 doctype, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 20 doctype, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 21 foreignDoctype, detached range InvalidStateError: DOM Exception 11
+PASS Node 21 foreignDoctype, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 21 foreignDoctype, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 21 foreignDoctype, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 21 foreignDoctype, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 21 foreignDoctype, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 21 foreignDoctype, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 21 foreignDoctype, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 21 foreignDoctype, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 21 foreignDoctype, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 21 foreignDoctype, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 21 foreignDoctype, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 21 foreignDoctype, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 21 foreignDoctype, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 21 foreignDoctype, range 13 [document.head, 1, document.head, 1]
+PASS Node 21 foreignDoctype, range 14 [document.body, 4, document.body, 5]
+PASS Node 21 foreignDoctype, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 21 foreignDoctype, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 21 foreignDoctype, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 21 foreignDoctype, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 21 foreignDoctype, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 21 foreignDoctype, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 21 foreignDoctype, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 21 foreignDoctype, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 21 foreignDoctype, range 23 [document, 0, document, 1]
+PASS Node 21 foreignDoctype, range 24 [document, 0, document, 2]
+PASS Node 21 foreignDoctype, range 25 [comment, 2, comment, 3]
+PASS Node 21 foreignDoctype, range 26 [testDiv, 0, comment, 5]
+PASS Node 21 foreignDoctype, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 21 foreignDoctype, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 21 foreignDoctype, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 21 foreignDoctype, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 21 foreignDoctype, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 21 foreignDoctype, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 21 foreignDoctype, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 21 foreignDoctype, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 21 foreignDoctype, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 21 foreignDoctype, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 21 foreignDoctype, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 21 foreignDoctype, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 21 foreignDoctype, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 21 foreignDoctype, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 21 foreignDoctype, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 21 foreignDoctype, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 21 foreignDoctype, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 21 foreignDoctype, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 21 foreignDoctype, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 21 foreignDoctype, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 21 foreignDoctype, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 21 foreignDoctype, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 21 foreignDoctype, range 49 [document, 1, document, 2]
+PASS Node 21 foreignDoctype, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 21 foreignDoctype, range 51 [paras[3], 1, comment, 8]
+PASS Node 21 foreignDoctype, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 21 foreignDoctype, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 21 foreignDoctype, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 21 foreignDoctype, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 21 foreignDoctype, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 21 foreignDoctype, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 21 foreignDoctype, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 21 foreignDoctype, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 22 paras[1], detached range InvalidStateError: DOM Exception 11
+PASS Node 22 paras[1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 22 paras[1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 22 paras[1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 22 paras[1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 22 paras[1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 22 paras[1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 22 paras[1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 22 paras[1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 22 paras[1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 22 paras[1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 22 paras[1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 22 paras[1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 22 paras[1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 22 paras[1], range 13 [document.head, 1, document.head, 1]
+PASS Node 22 paras[1], range 14 [document.body, 4, document.body, 5]
+PASS Node 22 paras[1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 22 paras[1], range 16 [paras[0], 0, paras[0], 1]
+PASS Node 22 paras[1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 22 paras[1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 22 paras[1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 22 paras[1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 22 paras[1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 22 paras[1], range 22 [testDiv, 2, paras[4], 1]
+PASS Node 22 paras[1], range 23 [document, 0, document, 1]
+PASS Node 22 paras[1], range 24 [document, 0, document, 2]
+PASS Node 22 paras[1], range 25 [comment, 2, comment, 3]
+PASS Node 22 paras[1], range 26 [testDiv, 0, comment, 5]
+PASS Node 22 paras[1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 22 paras[1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 22 paras[1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 22 paras[1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 22 paras[1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 22 paras[1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 22 paras[1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 22 paras[1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 22 paras[1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 22 paras[1], range 36 [docfrag, 0, docfrag, 0]
+PASS Node 22 paras[1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 22 paras[1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 22 paras[1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 22 paras[1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 22 paras[1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 22 paras[1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 22 paras[1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 22 paras[1], range 44 [paras[0], 0, paras[0], 0]
+PASS Node 22 paras[1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 22 paras[1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 22 paras[1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 22 paras[1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 22 paras[1], range 49 [document, 1, document, 2]
+PASS Node 22 paras[1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 22 paras[1], range 51 [paras[3], 1, comment, 8]
+PASS Node 22 paras[1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 22 paras[1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 22 paras[1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 22 paras[1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 22 paras[1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 22 paras[1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 22 paras[1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 22 paras[1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 23 detachedPara2, detached range InvalidStateError: DOM Exception 11
+PASS Node 23 detachedPara2, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 23 detachedPara2, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 23 detachedPara2, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 23 detachedPara2, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 23 detachedPara2, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 23 detachedPara2, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 23 detachedPara2, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 23 detachedPara2, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 23 detachedPara2, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 23 detachedPara2, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 23 detachedPara2, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 23 detachedPara2, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 23 detachedPara2, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 23 detachedPara2, range 13 [document.head, 1, document.head, 1]
+PASS Node 23 detachedPara2, range 14 [document.body, 4, document.body, 5]
+PASS Node 23 detachedPara2, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 23 detachedPara2, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 23 detachedPara2, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 23 detachedPara2, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 23 detachedPara2, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 23 detachedPara2, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 23 detachedPara2, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 23 detachedPara2, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 23 detachedPara2, range 23 [document, 0, document, 1]
+PASS Node 23 detachedPara2, range 24 [document, 0, document, 2]
+PASS Node 23 detachedPara2, range 25 [comment, 2, comment, 3]
+PASS Node 23 detachedPara2, range 26 [testDiv, 0, comment, 5]
+PASS Node 23 detachedPara2, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 23 detachedPara2, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 23 detachedPara2, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 23 detachedPara2, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 23 detachedPara2, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 23 detachedPara2, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 23 detachedPara2, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 23 detachedPara2, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 23 detachedPara2, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 23 detachedPara2, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 23 detachedPara2, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 23 detachedPara2, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 23 detachedPara2, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 23 detachedPara2, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 23 detachedPara2, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 23 detachedPara2, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 23 detachedPara2, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 23 detachedPara2, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 23 detachedPara2, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 23 detachedPara2, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 23 detachedPara2, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 23 detachedPara2, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 23 detachedPara2, range 49 [document, 1, document, 2]
+PASS Node 23 detachedPara2, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 23 detachedPara2, range 51 [paras[3], 1, comment, 8]
+PASS Node 23 detachedPara2, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 23 detachedPara2, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 23 detachedPara2, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 23 detachedPara2, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 23 detachedPara2, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 23 detachedPara2, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 23 detachedPara2, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 23 detachedPara2, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 24 detachedPara2.firstChild, detached range InvalidStateError: DOM Exception 11
+PASS Node 24 detachedPara2.firstChild, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 24 detachedPara2.firstChild, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 24 detachedPara2.firstChild, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 24 detachedPara2.firstChild, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 24 detachedPara2.firstChild, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 24 detachedPara2.firstChild, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 24 detachedPara2.firstChild, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 24 detachedPara2.firstChild, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 24 detachedPara2.firstChild, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 24 detachedPara2.firstChild, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 24 detachedPara2.firstChild, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 24 detachedPara2.firstChild, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 24 detachedPara2.firstChild, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 24 detachedPara2.firstChild, range 13 [document.head, 1, document.head, 1]
+PASS Node 24 detachedPara2.firstChild, range 14 [document.body, 4, document.body, 5]
+PASS Node 24 detachedPara2.firstChild, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 24 detachedPara2.firstChild, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 24 detachedPara2.firstChild, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 24 detachedPara2.firstChild, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 24 detachedPara2.firstChild, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 24 detachedPara2.firstChild, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 24 detachedPara2.firstChild, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 24 detachedPara2.firstChild, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 24 detachedPara2.firstChild, range 23 [document, 0, document, 1]
+PASS Node 24 detachedPara2.firstChild, range 24 [document, 0, document, 2]
+PASS Node 24 detachedPara2.firstChild, range 25 [comment, 2, comment, 3]
+PASS Node 24 detachedPara2.firstChild, range 26 [testDiv, 0, comment, 5]
+PASS Node 24 detachedPara2.firstChild, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 24 detachedPara2.firstChild, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 24 detachedPara2.firstChild, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 24 detachedPara2.firstChild, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 24 detachedPara2.firstChild, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 24 detachedPara2.firstChild, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 24 detachedPara2.firstChild, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 24 detachedPara2.firstChild, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 24 detachedPara2.firstChild, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 24 detachedPara2.firstChild, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 24 detachedPara2.firstChild, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 24 detachedPara2.firstChild, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 24 detachedPara2.firstChild, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 24 detachedPara2.firstChild, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 24 detachedPara2.firstChild, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 24 detachedPara2.firstChild, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 24 detachedPara2.firstChild, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 24 detachedPara2.firstChild, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 24 detachedPara2.firstChild, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 24 detachedPara2.firstChild, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 24 detachedPara2.firstChild, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 24 detachedPara2.firstChild, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 24 detachedPara2.firstChild, range 49 [document, 1, document, 2]
+PASS Node 24 detachedPara2.firstChild, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 24 detachedPara2.firstChild, range 51 [paras[3], 1, comment, 8]
+PASS Node 24 detachedPara2.firstChild, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 24 detachedPara2.firstChild, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 24 detachedPara2.firstChild, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 24 detachedPara2.firstChild, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 24 detachedPara2.firstChild, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 24 detachedPara2.firstChild, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 24 detachedPara2.firstChild, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 24 detachedPara2.firstChild, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 25 testDiv, detached range InvalidStateError: DOM Exception 11
+PASS Node 25 testDiv, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 25 testDiv, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 25 testDiv, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 25 testDiv, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 25 testDiv, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 25 testDiv, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 25 testDiv, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 25 testDiv, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 25 testDiv, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 25 testDiv, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 25 testDiv, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 25 testDiv, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 25 testDiv, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 25 testDiv, range 13 [document.head, 1, document.head, 1]
+PASS Node 25 testDiv, range 14 [document.body, 4, document.body, 5]
+PASS Node 25 testDiv, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 25 testDiv, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 25 testDiv, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 25 testDiv, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 25 testDiv, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 25 testDiv, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 25 testDiv, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 25 testDiv, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 25 testDiv, range 23 [document, 0, document, 1]
+PASS Node 25 testDiv, range 24 [document, 0, document, 2]
+PASS Node 25 testDiv, range 25 [comment, 2, comment, 3]
+PASS Node 25 testDiv, range 26 [testDiv, 0, comment, 5]
+PASS Node 25 testDiv, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 25 testDiv, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 25 testDiv, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 25 testDiv, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 25 testDiv, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 25 testDiv, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 25 testDiv, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 25 testDiv, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 25 testDiv, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 25 testDiv, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 25 testDiv, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 25 testDiv, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 25 testDiv, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 25 testDiv, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 25 testDiv, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 25 testDiv, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 25 testDiv, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 25 testDiv, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 25 testDiv, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 25 testDiv, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 25 testDiv, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 25 testDiv, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 25 testDiv, range 49 [document, 1, document, 2]
+PASS Node 25 testDiv, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 25 testDiv, range 51 [paras[3], 1, comment, 8]
+PASS Node 25 testDiv, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 25 testDiv, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 25 testDiv, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 25 testDiv, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 25 testDiv, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 25 testDiv, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 25 testDiv, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 25 testDiv, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 26 detachedXmlElement, detached range InvalidStateError: DOM Exception 11
+PASS Node 26 detachedXmlElement, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 26 detachedXmlElement, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 26 detachedXmlElement, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 26 detachedXmlElement, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 26 detachedXmlElement, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 26 detachedXmlElement, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 26 detachedXmlElement, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 26 detachedXmlElement, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 26 detachedXmlElement, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 26 detachedXmlElement, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 26 detachedXmlElement, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 26 detachedXmlElement, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 26 detachedXmlElement, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 26 detachedXmlElement, range 13 [document.head, 1, document.head, 1]
+PASS Node 26 detachedXmlElement, range 14 [document.body, 4, document.body, 5]
+PASS Node 26 detachedXmlElement, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 26 detachedXmlElement, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 26 detachedXmlElement, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 26 detachedXmlElement, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 26 detachedXmlElement, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 26 detachedXmlElement, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 26 detachedXmlElement, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 26 detachedXmlElement, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 26 detachedXmlElement, range 23 [document, 0, document, 1]
+PASS Node 26 detachedXmlElement, range 24 [document, 0, document, 2]
+PASS Node 26 detachedXmlElement, range 25 [comment, 2, comment, 3]
+PASS Node 26 detachedXmlElement, range 26 [testDiv, 0, comment, 5]
+PASS Node 26 detachedXmlElement, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 26 detachedXmlElement, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 26 detachedXmlElement, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 26 detachedXmlElement, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 26 detachedXmlElement, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 26 detachedXmlElement, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 26 detachedXmlElement, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 26 detachedXmlElement, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 26 detachedXmlElement, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 26 detachedXmlElement, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 26 detachedXmlElement, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 26 detachedXmlElement, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 26 detachedXmlElement, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 26 detachedXmlElement, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 26 detachedXmlElement, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 26 detachedXmlElement, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 26 detachedXmlElement, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 26 detachedXmlElement, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 26 detachedXmlElement, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 26 detachedXmlElement, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 26 detachedXmlElement, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 26 detachedXmlElement, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 26 detachedXmlElement, range 49 [document, 1, document, 2]
+PASS Node 26 detachedXmlElement, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 26 detachedXmlElement, range 51 [paras[3], 1, comment, 8]
+PASS Node 26 detachedXmlElement, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 26 detachedXmlElement, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 26 detachedXmlElement, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 26 detachedXmlElement, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 26 detachedXmlElement, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 26 detachedXmlElement, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 26 detachedXmlElement, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 26 detachedXmlElement, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 27 detachedForeignTextNode, detached range InvalidStateError: DOM Exception 11
+PASS Node 27 detachedForeignTextNode, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 27 detachedForeignTextNode, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 27 detachedForeignTextNode, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 27 detachedForeignTextNode, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 27 detachedForeignTextNode, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 27 detachedForeignTextNode, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 27 detachedForeignTextNode, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 27 detachedForeignTextNode, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 27 detachedForeignTextNode, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 27 detachedForeignTextNode, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 27 detachedForeignTextNode, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 27 detachedForeignTextNode, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 27 detachedForeignTextNode, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 27 detachedForeignTextNode, range 13 [document.head, 1, document.head, 1]
+PASS Node 27 detachedForeignTextNode, range 14 [document.body, 4, document.body, 5]
+PASS Node 27 detachedForeignTextNode, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 27 detachedForeignTextNode, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 27 detachedForeignTextNode, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 27 detachedForeignTextNode, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 27 detachedForeignTextNode, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 27 detachedForeignTextNode, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 27 detachedForeignTextNode, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 27 detachedForeignTextNode, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 27 detachedForeignTextNode, range 23 [document, 0, document, 1]
+PASS Node 27 detachedForeignTextNode, range 24 [document, 0, document, 2]
+PASS Node 27 detachedForeignTextNode, range 25 [comment, 2, comment, 3]
+PASS Node 27 detachedForeignTextNode, range 26 [testDiv, 0, comment, 5]
+PASS Node 27 detachedForeignTextNode, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 27 detachedForeignTextNode, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 27 detachedForeignTextNode, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 27 detachedForeignTextNode, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 27 detachedForeignTextNode, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 27 detachedForeignTextNode, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 27 detachedForeignTextNode, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 27 detachedForeignTextNode, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 27 detachedForeignTextNode, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 27 detachedForeignTextNode, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 27 detachedForeignTextNode, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 27 detachedForeignTextNode, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 27 detachedForeignTextNode, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 27 detachedForeignTextNode, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 27 detachedForeignTextNode, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 27 detachedForeignTextNode, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 27 detachedForeignTextNode, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 27 detachedForeignTextNode, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 27 detachedForeignTextNode, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 27 detachedForeignTextNode, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 27 detachedForeignTextNode, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 27 detachedForeignTextNode, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 27 detachedForeignTextNode, range 49 [document, 1, document, 2]
+PASS Node 27 detachedForeignTextNode, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 27 detachedForeignTextNode, range 51 [paras[3], 1, comment, 8]
+PASS Node 27 detachedForeignTextNode, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 27 detachedForeignTextNode, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 27 detachedForeignTextNode, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 27 detachedForeignTextNode, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 27 detachedForeignTextNode, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 27 detachedForeignTextNode, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 27 detachedForeignTextNode, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 27 detachedForeignTextNode, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 28 xmlTextNode, detached range InvalidStateError: DOM Exception 11
+PASS Node 28 xmlTextNode, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 28 xmlTextNode, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 28 xmlTextNode, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 28 xmlTextNode, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 28 xmlTextNode, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 28 xmlTextNode, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 28 xmlTextNode, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 28 xmlTextNode, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 28 xmlTextNode, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 28 xmlTextNode, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 28 xmlTextNode, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 28 xmlTextNode, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 28 xmlTextNode, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 28 xmlTextNode, range 13 [document.head, 1, document.head, 1]
+PASS Node 28 xmlTextNode, range 14 [document.body, 4, document.body, 5]
+PASS Node 28 xmlTextNode, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 28 xmlTextNode, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 28 xmlTextNode, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 28 xmlTextNode, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 28 xmlTextNode, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 28 xmlTextNode, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 28 xmlTextNode, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 28 xmlTextNode, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 28 xmlTextNode, range 23 [document, 0, document, 1]
+PASS Node 28 xmlTextNode, range 24 [document, 0, document, 2]
+PASS Node 28 xmlTextNode, range 25 [comment, 2, comment, 3]
+PASS Node 28 xmlTextNode, range 26 [testDiv, 0, comment, 5]
+PASS Node 28 xmlTextNode, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 28 xmlTextNode, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 28 xmlTextNode, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 28 xmlTextNode, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 28 xmlTextNode, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 28 xmlTextNode, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 28 xmlTextNode, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 28 xmlTextNode, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 28 xmlTextNode, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 28 xmlTextNode, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 28 xmlTextNode, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 28 xmlTextNode, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 28 xmlTextNode, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 28 xmlTextNode, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 28 xmlTextNode, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 28 xmlTextNode, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 28 xmlTextNode, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 28 xmlTextNode, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 28 xmlTextNode, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 28 xmlTextNode, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 28 xmlTextNode, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 28 xmlTextNode, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 28 xmlTextNode, range 49 [document, 1, document, 2]
+PASS Node 28 xmlTextNode, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 28 xmlTextNode, range 51 [paras[3], 1, comment, 8]
+PASS Node 28 xmlTextNode, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 28 xmlTextNode, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 28 xmlTextNode, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 28 xmlTextNode, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 28 xmlTextNode, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 28 xmlTextNode, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 28 xmlTextNode, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 28 xmlTextNode, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 29 detachedXmlTextNode, detached range InvalidStateError: DOM Exception 11
+PASS Node 29 detachedXmlTextNode, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 29 detachedXmlTextNode, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 29 detachedXmlTextNode, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 29 detachedXmlTextNode, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 29 detachedXmlTextNode, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 29 detachedXmlTextNode, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 29 detachedXmlTextNode, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 29 detachedXmlTextNode, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 29 detachedXmlTextNode, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 29 detachedXmlTextNode, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 29 detachedXmlTextNode, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 29 detachedXmlTextNode, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 29 detachedXmlTextNode, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 29 detachedXmlTextNode, range 13 [document.head, 1, document.head, 1]
+PASS Node 29 detachedXmlTextNode, range 14 [document.body, 4, document.body, 5]
+PASS Node 29 detachedXmlTextNode, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 29 detachedXmlTextNode, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 29 detachedXmlTextNode, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 29 detachedXmlTextNode, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 29 detachedXmlTextNode, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 29 detachedXmlTextNode, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 29 detachedXmlTextNode, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 29 detachedXmlTextNode, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 29 detachedXmlTextNode, range 23 [document, 0, document, 1]
+PASS Node 29 detachedXmlTextNode, range 24 [document, 0, document, 2]
+PASS Node 29 detachedXmlTextNode, range 25 [comment, 2, comment, 3]
+PASS Node 29 detachedXmlTextNode, range 26 [testDiv, 0, comment, 5]
+PASS Node 29 detachedXmlTextNode, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 29 detachedXmlTextNode, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 29 detachedXmlTextNode, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 29 detachedXmlTextNode, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 29 detachedXmlTextNode, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 29 detachedXmlTextNode, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 29 detachedXmlTextNode, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 29 detachedXmlTextNode, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 29 detachedXmlTextNode, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 29 detachedXmlTextNode, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 29 detachedXmlTextNode, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 29 detachedXmlTextNode, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 29 detachedXmlTextNode, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 29 detachedXmlTextNode, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 29 detachedXmlTextNode, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 29 detachedXmlTextNode, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 29 detachedXmlTextNode, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 29 detachedXmlTextNode, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 29 detachedXmlTextNode, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 29 detachedXmlTextNode, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 29 detachedXmlTextNode, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 29 detachedXmlTextNode, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 29 detachedXmlTextNode, range 49 [document, 1, document, 2]
+PASS Node 29 detachedXmlTextNode, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 29 detachedXmlTextNode, range 51 [paras[3], 1, comment, 8]
+PASS Node 29 detachedXmlTextNode, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 29 detachedXmlTextNode, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 29 detachedXmlTextNode, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 29 detachedXmlTextNode, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 29 detachedXmlTextNode, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 29 detachedXmlTextNode, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 29 detachedXmlTextNode, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 29 detachedXmlTextNode, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 30 xmlComment, detached range InvalidStateError: DOM Exception 11
+PASS Node 30 xmlComment, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 30 xmlComment, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 30 xmlComment, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 30 xmlComment, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 30 xmlComment, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 30 xmlComment, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 30 xmlComment, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 30 xmlComment, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 30 xmlComment, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 30 xmlComment, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 30 xmlComment, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 30 xmlComment, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 30 xmlComment, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 30 xmlComment, range 13 [document.head, 1, document.head, 1]
+PASS Node 30 xmlComment, range 14 [document.body, 4, document.body, 5]
+PASS Node 30 xmlComment, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 30 xmlComment, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 30 xmlComment, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 30 xmlComment, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 30 xmlComment, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 30 xmlComment, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 30 xmlComment, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 30 xmlComment, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 30 xmlComment, range 23 [document, 0, document, 1]
+PASS Node 30 xmlComment, range 24 [document, 0, document, 2]
+PASS Node 30 xmlComment, range 25 [comment, 2, comment, 3]
+PASS Node 30 xmlComment, range 26 [testDiv, 0, comment, 5]
+PASS Node 30 xmlComment, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 30 xmlComment, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 30 xmlComment, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 30 xmlComment, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 30 xmlComment, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 30 xmlComment, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 30 xmlComment, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 30 xmlComment, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 30 xmlComment, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 30 xmlComment, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 30 xmlComment, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 30 xmlComment, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 30 xmlComment, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 30 xmlComment, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 30 xmlComment, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 30 xmlComment, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 30 xmlComment, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 30 xmlComment, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 30 xmlComment, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 30 xmlComment, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 30 xmlComment, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 30 xmlComment, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 30 xmlComment, range 49 [document, 1, document, 2]
+PASS Node 30 xmlComment, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 30 xmlComment, range 51 [paras[3], 1, comment, 8]
+PASS Node 30 xmlComment, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 30 xmlComment, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 30 xmlComment, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 30 xmlComment, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 30 xmlComment, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 30 xmlComment, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 30 xmlComment, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 30 xmlComment, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 31 foreignComment, detached range InvalidStateError: DOM Exception 11
+PASS Node 31 foreignComment, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 31 foreignComment, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 31 foreignComment, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 31 foreignComment, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 31 foreignComment, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 31 foreignComment, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 31 foreignComment, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 31 foreignComment, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 31 foreignComment, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 31 foreignComment, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 31 foreignComment, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 31 foreignComment, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 31 foreignComment, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 31 foreignComment, range 13 [document.head, 1, document.head, 1]
+PASS Node 31 foreignComment, range 14 [document.body, 4, document.body, 5]
+PASS Node 31 foreignComment, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 31 foreignComment, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 31 foreignComment, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 31 foreignComment, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 31 foreignComment, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 31 foreignComment, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 31 foreignComment, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 31 foreignComment, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 31 foreignComment, range 23 [document, 0, document, 1]
+PASS Node 31 foreignComment, range 24 [document, 0, document, 2]
+PASS Node 31 foreignComment, range 25 [comment, 2, comment, 3]
+PASS Node 31 foreignComment, range 26 [testDiv, 0, comment, 5]
+PASS Node 31 foreignComment, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 31 foreignComment, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 31 foreignComment, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 31 foreignComment, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 31 foreignComment, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 31 foreignComment, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 31 foreignComment, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 31 foreignComment, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 31 foreignComment, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 31 foreignComment, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 31 foreignComment, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 31 foreignComment, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 31 foreignComment, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 31 foreignComment, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 31 foreignComment, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 31 foreignComment, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 31 foreignComment, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 31 foreignComment, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 31 foreignComment, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 31 foreignComment, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 31 foreignComment, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 31 foreignComment, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 31 foreignComment, range 49 [document, 1, document, 2]
+PASS Node 31 foreignComment, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 31 foreignComment, range 51 [paras[3], 1, comment, 8]
+PASS Node 31 foreignComment, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 31 foreignComment, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 31 foreignComment, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 31 foreignComment, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 31 foreignComment, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 31 foreignComment, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 31 foreignComment, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 31 foreignComment, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 32 detachedForeignComment, detached range InvalidStateError: DOM Exception 11
+PASS Node 32 detachedForeignComment, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 32 detachedForeignComment, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 32 detachedForeignComment, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 32 detachedForeignComment, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 32 detachedForeignComment, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 32 detachedForeignComment, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 32 detachedForeignComment, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 32 detachedForeignComment, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 32 detachedForeignComment, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 32 detachedForeignComment, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 32 detachedForeignComment, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 32 detachedForeignComment, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 32 detachedForeignComment, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 32 detachedForeignComment, range 13 [document.head, 1, document.head, 1]
+PASS Node 32 detachedForeignComment, range 14 [document.body, 4, document.body, 5]
+PASS Node 32 detachedForeignComment, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 32 detachedForeignComment, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 32 detachedForeignComment, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 32 detachedForeignComment, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 32 detachedForeignComment, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 32 detachedForeignComment, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 32 detachedForeignComment, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 32 detachedForeignComment, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 32 detachedForeignComment, range 23 [document, 0, document, 1]
+PASS Node 32 detachedForeignComment, range 24 [document, 0, document, 2]
+PASS Node 32 detachedForeignComment, range 25 [comment, 2, comment, 3]
+PASS Node 32 detachedForeignComment, range 26 [testDiv, 0, comment, 5]
+PASS Node 32 detachedForeignComment, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 32 detachedForeignComment, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 32 detachedForeignComment, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 32 detachedForeignComment, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 32 detachedForeignComment, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 32 detachedForeignComment, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 32 detachedForeignComment, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 32 detachedForeignComment, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 32 detachedForeignComment, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 32 detachedForeignComment, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 32 detachedForeignComment, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 32 detachedForeignComment, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 32 detachedForeignComment, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 32 detachedForeignComment, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 32 detachedForeignComment, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 32 detachedForeignComment, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 32 detachedForeignComment, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 32 detachedForeignComment, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 32 detachedForeignComment, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 32 detachedForeignComment, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 32 detachedForeignComment, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 32 detachedForeignComment, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 32 detachedForeignComment, range 49 [document, 1, document, 2]
+PASS Node 32 detachedForeignComment, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 32 detachedForeignComment, range 51 [paras[3], 1, comment, 8]
+PASS Node 32 detachedForeignComment, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 32 detachedForeignComment, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 32 detachedForeignComment, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 32 detachedForeignComment, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 32 detachedForeignComment, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 32 detachedForeignComment, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 32 detachedForeignComment, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 32 detachedForeignComment, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 33 detachedXmlComment, detached range InvalidStateError: DOM Exception 11
+PASS Node 33 detachedXmlComment, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 33 detachedXmlComment, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 33 detachedXmlComment, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 33 detachedXmlComment, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 33 detachedXmlComment, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 33 detachedXmlComment, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 33 detachedXmlComment, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 33 detachedXmlComment, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 33 detachedXmlComment, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 33 detachedXmlComment, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 33 detachedXmlComment, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 33 detachedXmlComment, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 33 detachedXmlComment, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 33 detachedXmlComment, range 13 [document.head, 1, document.head, 1]
+PASS Node 33 detachedXmlComment, range 14 [document.body, 4, document.body, 5]
+PASS Node 33 detachedXmlComment, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 33 detachedXmlComment, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 33 detachedXmlComment, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 33 detachedXmlComment, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 33 detachedXmlComment, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 33 detachedXmlComment, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 33 detachedXmlComment, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 33 detachedXmlComment, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 33 detachedXmlComment, range 23 [document, 0, document, 1]
+PASS Node 33 detachedXmlComment, range 24 [document, 0, document, 2]
+PASS Node 33 detachedXmlComment, range 25 [comment, 2, comment, 3]
+PASS Node 33 detachedXmlComment, range 26 [testDiv, 0, comment, 5]
+PASS Node 33 detachedXmlComment, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 33 detachedXmlComment, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 33 detachedXmlComment, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 33 detachedXmlComment, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 33 detachedXmlComment, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 33 detachedXmlComment, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 33 detachedXmlComment, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 33 detachedXmlComment, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 33 detachedXmlComment, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 33 detachedXmlComment, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 33 detachedXmlComment, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 33 detachedXmlComment, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 33 detachedXmlComment, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 33 detachedXmlComment, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 33 detachedXmlComment, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 33 detachedXmlComment, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 33 detachedXmlComment, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 33 detachedXmlComment, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 33 detachedXmlComment, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 33 detachedXmlComment, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 33 detachedXmlComment, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 33 detachedXmlComment, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 33 detachedXmlComment, range 49 [document, 1, document, 2]
+PASS Node 33 detachedXmlComment, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 33 detachedXmlComment, range 51 [paras[3], 1, comment, 8]
+PASS Node 33 detachedXmlComment, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 33 detachedXmlComment, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 33 detachedXmlComment, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 33 detachedXmlComment, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 33 detachedXmlComment, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 33 detachedXmlComment, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 33 detachedXmlComment, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 33 detachedXmlComment, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 34 foreignDocfrag, detached range InvalidStateError: DOM Exception 11
+PASS Node 34 foreignDocfrag, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 34 foreignDocfrag, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 34 foreignDocfrag, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 34 foreignDocfrag, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 34 foreignDocfrag, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 34 foreignDocfrag, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 34 foreignDocfrag, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 34 foreignDocfrag, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 34 foreignDocfrag, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 34 foreignDocfrag, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 34 foreignDocfrag, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 34 foreignDocfrag, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 34 foreignDocfrag, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 34 foreignDocfrag, range 13 [document.head, 1, document.head, 1]
+PASS Node 34 foreignDocfrag, range 14 [document.body, 4, document.body, 5]
+PASS Node 34 foreignDocfrag, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 34 foreignDocfrag, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 34 foreignDocfrag, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 34 foreignDocfrag, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 34 foreignDocfrag, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 34 foreignDocfrag, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 34 foreignDocfrag, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 34 foreignDocfrag, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 34 foreignDocfrag, range 23 [document, 0, document, 1]
+PASS Node 34 foreignDocfrag, range 24 [document, 0, document, 2]
+PASS Node 34 foreignDocfrag, range 25 [comment, 2, comment, 3]
+PASS Node 34 foreignDocfrag, range 26 [testDiv, 0, comment, 5]
+PASS Node 34 foreignDocfrag, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 34 foreignDocfrag, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 34 foreignDocfrag, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 34 foreignDocfrag, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 34 foreignDocfrag, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 34 foreignDocfrag, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 34 foreignDocfrag, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 34 foreignDocfrag, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 34 foreignDocfrag, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 34 foreignDocfrag, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 34 foreignDocfrag, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 34 foreignDocfrag, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 34 foreignDocfrag, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 34 foreignDocfrag, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 34 foreignDocfrag, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 34 foreignDocfrag, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 34 foreignDocfrag, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 34 foreignDocfrag, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 34 foreignDocfrag, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 34 foreignDocfrag, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 34 foreignDocfrag, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 34 foreignDocfrag, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 34 foreignDocfrag, range 49 [document, 1, document, 2]
+PASS Node 34 foreignDocfrag, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 34 foreignDocfrag, range 51 [paras[3], 1, comment, 8]
+PASS Node 34 foreignDocfrag, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 34 foreignDocfrag, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 34 foreignDocfrag, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 34 foreignDocfrag, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 34 foreignDocfrag, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 34 foreignDocfrag, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 34 foreignDocfrag, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 34 foreignDocfrag, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 35 xmlDocfrag, detached range InvalidStateError: DOM Exception 11
+PASS Node 35 xmlDocfrag, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 35 xmlDocfrag, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 35 xmlDocfrag, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 35 xmlDocfrag, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 35 xmlDocfrag, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 35 xmlDocfrag, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 35 xmlDocfrag, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 35 xmlDocfrag, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 35 xmlDocfrag, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 35 xmlDocfrag, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 35 xmlDocfrag, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 35 xmlDocfrag, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 35 xmlDocfrag, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 35 xmlDocfrag, range 13 [document.head, 1, document.head, 1]
+PASS Node 35 xmlDocfrag, range 14 [document.body, 4, document.body, 5]
+PASS Node 35 xmlDocfrag, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 35 xmlDocfrag, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 35 xmlDocfrag, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 35 xmlDocfrag, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 35 xmlDocfrag, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 35 xmlDocfrag, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 35 xmlDocfrag, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 35 xmlDocfrag, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 35 xmlDocfrag, range 23 [document, 0, document, 1]
+PASS Node 35 xmlDocfrag, range 24 [document, 0, document, 2]
+PASS Node 35 xmlDocfrag, range 25 [comment, 2, comment, 3]
+PASS Node 35 xmlDocfrag, range 26 [testDiv, 0, comment, 5]
+PASS Node 35 xmlDocfrag, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 35 xmlDocfrag, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 35 xmlDocfrag, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 35 xmlDocfrag, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 35 xmlDocfrag, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 35 xmlDocfrag, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 35 xmlDocfrag, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 35 xmlDocfrag, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 35 xmlDocfrag, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 35 xmlDocfrag, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 35 xmlDocfrag, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 35 xmlDocfrag, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 35 xmlDocfrag, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 35 xmlDocfrag, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 35 xmlDocfrag, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 35 xmlDocfrag, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 35 xmlDocfrag, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 35 xmlDocfrag, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 35 xmlDocfrag, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 35 xmlDocfrag, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 35 xmlDocfrag, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 35 xmlDocfrag, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 35 xmlDocfrag, range 49 [document, 1, document, 2]
+PASS Node 35 xmlDocfrag, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 35 xmlDocfrag, range 51 [paras[3], 1, comment, 8]
+PASS Node 35 xmlDocfrag, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 35 xmlDocfrag, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 35 xmlDocfrag, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 35 xmlDocfrag, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 35 xmlDocfrag, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 35 xmlDocfrag, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 35 xmlDocfrag, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 35 xmlDocfrag, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Node 36 xmlDoctype, detached range InvalidStateError: DOM Exception 11
+PASS Node 36 xmlDoctype, range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Node 36 xmlDoctype, range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Node 36 xmlDoctype, range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Node 36 xmlDoctype, range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Node 36 xmlDoctype, range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 36 xmlDoctype, range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Node 36 xmlDoctype, range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Node 36 xmlDoctype, range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Node 36 xmlDoctype, range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Node 36 xmlDoctype, range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Node 36 xmlDoctype, range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Node 36 xmlDoctype, range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Node 36 xmlDoctype, range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Node 36 xmlDoctype, range 13 [document.head, 1, document.head, 1]
+PASS Node 36 xmlDoctype, range 14 [document.body, 4, document.body, 5]
+PASS Node 36 xmlDoctype, range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Node 36 xmlDoctype, range 16 [paras[0], 0, paras[0], 1]
+PASS Node 36 xmlDoctype, range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Node 36 xmlDoctype, range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Node 36 xmlDoctype, range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Node 36 xmlDoctype, range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Node 36 xmlDoctype, range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Node 36 xmlDoctype, range 22 [testDiv, 2, paras[4], 1]
+PASS Node 36 xmlDoctype, range 23 [document, 0, document, 1]
+PASS Node 36 xmlDoctype, range 24 [document, 0, document, 2]
+PASS Node 36 xmlDoctype, range 25 [comment, 2, comment, 3]
+PASS Node 36 xmlDoctype, range 26 [testDiv, 0, comment, 5]
+PASS Node 36 xmlDoctype, range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Node 36 xmlDoctype, range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Node 36 xmlDoctype, range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Node 36 xmlDoctype, range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Node 36 xmlDoctype, range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Node 36 xmlDoctype, range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Node 36 xmlDoctype, range 33 [detachedComment, 3, detachedComment, 4]
+PASS Node 36 xmlDoctype, range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Node 36 xmlDoctype, range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Node 36 xmlDoctype, range 36 [docfrag, 0, docfrag, 0]
+PASS Node 36 xmlDoctype, range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Node 36 xmlDoctype, range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Node 36 xmlDoctype, range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Node 36 xmlDoctype, range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Node 36 xmlDoctype, range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Node 36 xmlDoctype, range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Node 36 xmlDoctype, range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Node 36 xmlDoctype, range 44 [paras[0], 0, paras[0], 0]
+PASS Node 36 xmlDoctype, range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Node 36 xmlDoctype, range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Node 36 xmlDoctype, range 47 [document.documentElement, 1, document.body, 0]
+PASS Node 36 xmlDoctype, range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Node 36 xmlDoctype, range 49 [document, 1, document, 2]
+PASS Node 36 xmlDoctype, range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Node 36 xmlDoctype, range 51 [paras[3], 1, comment, 8]
+PASS Node 36 xmlDoctype, range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Node 36 xmlDoctype, range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Node 36 xmlDoctype, range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Node 36 xmlDoctype, range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Node 36 xmlDoctype, range 56 [detachedComment, 5, detachedComment, 5]
+PASS Node 36 xmlDoctype, range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Node 36 xmlDoctype, range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Node 36 xmlDoctype, range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangeintersectsNodehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,78 @@
</span><ins>+<!doctype html>
+<title>Range.intersectsNode() tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+// Will be filled in on the first run for that range
+var testRangesCached = [];
+
+for (var i = 0; i < testNodes.length; i++) {
+ var node = eval(testNodes[i]);
+
+ // "If the detached flag is set, throw an "InvalidStateError" exception and
+ // terminate these steps."
+ test(function() {
+ var range = document.createRange();
+ range.detach();
+ assert_equals(range.intersectsNode(node), node === document);
+ }, "Node " + i + " " + testNodes[i] + ", detached range");
+
+ for (var j = 0; j < testRanges.length; j++) {
+ test(function() {
+ if (testRangesCached[j] === undefined) {
+ try {
+ testRangesCached[j] = rangeFromEndpoints(eval(testRanges[i]));
+ } catch(e) {
+ testRangesCached[j] = null;
+ }
+ }
+ assert_not_equals(testRangesCached[j], null,
+ "Setting up the range failed");
+
+ var range = testRangesCached[j].cloneRange();
+
+ // "If node's root is different from the context object's root,
+ // return false and terminate these steps."
+ if (furthestAncestor(node) !== furthestAncestor(range.startContainer)) {
+ assert_equals(range.intersectsNode(node), false,
+ "Must return false if node and range have different roots");
+ return;
+ }
+
+ // "Let parent be node's parent."
+ var parent_ = node.parentNode;
+
+ // "If parent is null, return true and terminate these steps."
+ if (!parent_) {
+ assert_equals(range.intersectsNode(node), true,
+ "Must return true if node's parent is null");
+ return;
+ }
+
+ // "Let offset be node's index."
+ var offset = indexOf(node);
+
+ // "If (parent, offset) is before end and (parent, offset + 1) is
+ // after start, return true and terminate these steps."
+ if (getPosition(parent_, offset, range.endContainer, range.endOffset) === "before"
+ && getPosition(parent_, offset + 1, range.startContainer, range.startOffset) === "after") {
+ assert_equals(range.intersectsNode(node), true,
+ "Must return true if (parent, offset) is before range end and (parent, offset + 1) is after range start");
+ return;
+ }
+
+ // "Return false."
+ assert_equals(range.intersectsNode(node), false,
+ "Must return false if (parent, offset) is not before range end or (parent, offset + 1) is not after range start");
+ }, "Node " + i + " " + testNodes[i] + ", range " + j + " " + testRanges[j]);
+ }
+}
+
+testDiv.style.display = "none";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangeisPointInRangeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-isPointInRange-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-isPointInRange-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-isPointInRange-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,5536 @@
</span><ins>+
+PASS Setup
+PASS Set up for range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Set up for range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Set up for range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Set up for range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Set up for range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Set up for range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Set up for range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Set up for range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Set up for range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Set up for range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Set up for range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Set up for range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Set up for range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Set up for range 13 [document.head, 1, document.head, 1]
+PASS Set up for range 14 [document.body, 4, document.body, 5]
+PASS Set up for range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Set up for range 16 [paras[0], 0, paras[0], 1]
+PASS Set up for range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Set up for range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Set up for range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Set up for range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Set up for range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Set up for range 22 [testDiv, 2, paras[4], 1]
+PASS Set up for range 23 [document, 0, document, 1]
+PASS Set up for range 24 [document, 0, document, 2]
+PASS Set up for range 25 [comment, 2, comment, 3]
+PASS Set up for range 26 [testDiv, 0, comment, 5]
+PASS Set up for range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Set up for range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Set up for range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Set up for range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Set up for range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Set up for range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Set up for range 33 [detachedComment, 3, detachedComment, 4]
+PASS Set up for range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Set up for range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Set up for range 36 [docfrag, 0, docfrag, 0]
+PASS Set up for range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Set up for range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Set up for range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Set up for range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Set up for range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Set up for range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Set up for range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Set up for range 44 [paras[0], 0, paras[0], 0]
+PASS Set up for range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Set up for range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Set up for range 47 [document.documentElement, 1, document.body, 0]
+PASS Set up for range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Set up for range 49 [document, 1, document, 2]
+PASS Set up for range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Set up for range 51 [paras[3], 1, comment, 8]
+PASS Set up for range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Set up for range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Set up for range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Set up for range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Set up for range 56 [detachedComment, 5, detachedComment, 5]
+PASS Set up for range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Set up for range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Set up for range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 0 [paras[0].firstChild, -1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 0 [paras[0].firstChild, -1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 0 [paras[0].firstChild, -1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] IndexSizeError: DOM Exception 1
+FAIL Point 0 [paras[0].firstChild, -1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] IndexSizeError: DOM Exception 1
+PASS Point 0 [paras[0].firstChild, -1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 0 [paras[0].firstChild, -1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 0 [paras[0].firstChild, -1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 0 [paras[0].firstChild, -1], range 13 [document.head, 1, document.head, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 14 [document.body, 4, document.body, 5]
+PASS Point 0 [paras[0].firstChild, -1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 0 [paras[0].firstChild, -1], range 17 [detachedPara1, 0, detachedPara1, 1] IndexSizeError: DOM Exception 1
+PASS Point 0 [paras[0].firstChild, -1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 0 [paras[0].firstChild, -1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 0 [paras[0].firstChild, -1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 0 [paras[0].firstChild, -1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 0 [paras[0].firstChild, -1], range 23 [document, 0, document, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 24 [document, 0, document, 2]
+PASS Point 0 [paras[0].firstChild, -1], range 25 [comment, 2, comment, 3]
+PASS Point 0 [paras[0].firstChild, -1], range 26 [testDiv, 0, comment, 5]
+PASS Point 0 [paras[0].firstChild, -1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 0 [paras[0].firstChild, -1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 0 [paras[0].firstChild, -1], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 0 [paras[0].firstChild, -1], range 30 [detachedTextNode, 0, detachedTextNode, 8] IndexSizeError: DOM Exception 1
+PASS Point 0 [paras[0].firstChild, -1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 0 [paras[0].firstChild, -1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 0 [paras[0].firstChild, -1], range 33 [detachedComment, 3, detachedComment, 4] IndexSizeError: DOM Exception 1
+PASS Point 0 [paras[0].firstChild, -1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 0 [paras[0].firstChild, -1], range 36 [docfrag, 0, docfrag, 0] IndexSizeError: DOM Exception 1
+PASS Point 0 [paras[0].firstChild, -1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 0 [paras[0].firstChild, -1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 0 [paras[0].firstChild, -1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] IndexSizeError: DOM Exception 1
+PASS Point 0 [paras[0].firstChild, -1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 0 [paras[0].firstChild, -1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 0 [paras[0].firstChild, -1], range 45 [detachedPara1, 0, detachedPara1, 0] IndexSizeError: DOM Exception 1
+PASS Point 0 [paras[0].firstChild, -1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 0 [paras[0].firstChild, -1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 49 [document, 1, document, 2]
+PASS Point 0 [paras[0].firstChild, -1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 0 [paras[0].firstChild, -1], range 51 [paras[3], 1, comment, 8]
+PASS Point 0 [paras[0].firstChild, -1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 0 [paras[0].firstChild, -1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 0 [paras[0].firstChild, -1], range 56 [detachedComment, 5, detachedComment, 5] IndexSizeError: DOM Exception 1
+PASS Point 0 [paras[0].firstChild, -1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 0 [paras[0].firstChild, -1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 0 [paras[0].firstChild, -1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 0 [paras[0].firstChild, -1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 1 [paras[0].firstChild, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 1 [paras[0].firstChild, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 1 [paras[0].firstChild, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 1 [paras[0].firstChild, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 1 [paras[0].firstChild, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 1 [paras[0].firstChild, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 1 [paras[0].firstChild, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 1 [paras[0].firstChild, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 1 [paras[0].firstChild, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 1 [paras[0].firstChild, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 1 [paras[0].firstChild, 0], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 1 [paras[0].firstChild, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 1 [paras[0].firstChild, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 1 [paras[0].firstChild, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 1 [paras[0].firstChild, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 1 [paras[0].firstChild, 0], range 23 [document, 0, document, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 24 [document, 0, document, 2]
+PASS Point 1 [paras[0].firstChild, 0], range 25 [comment, 2, comment, 3]
+PASS Point 1 [paras[0].firstChild, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 1 [paras[0].firstChild, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 1 [paras[0].firstChild, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 1 [paras[0].firstChild, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 1 [paras[0].firstChild, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 1 [paras[0].firstChild, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 1 [paras[0].firstChild, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 1 [paras[0].firstChild, 0], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 1 [paras[0].firstChild, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 1 [paras[0].firstChild, 0], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 1 [paras[0].firstChild, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 1 [paras[0].firstChild, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 1 [paras[0].firstChild, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 1 [paras[0].firstChild, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 1 [paras[0].firstChild, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 1 [paras[0].firstChild, 0], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 1 [paras[0].firstChild, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 1 [paras[0].firstChild, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 49 [document, 1, document, 2]
+PASS Point 1 [paras[0].firstChild, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 1 [paras[0].firstChild, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 1 [paras[0].firstChild, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 1 [paras[0].firstChild, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 1 [paras[0].firstChild, 0], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 1 [paras[0].firstChild, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 1 [paras[0].firstChild, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 1 [paras[0].firstChild, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 1 [paras[0].firstChild, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 2 [paras[0].firstChild, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 2 [paras[0].firstChild, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 2 [paras[0].firstChild, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 2 [paras[0].firstChild, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 2 [paras[0].firstChild, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 2 [paras[0].firstChild, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 2 [paras[0].firstChild, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 2 [paras[0].firstChild, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 2 [paras[0].firstChild, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 2 [paras[0].firstChild, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 2 [paras[0].firstChild, 1], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 2 [paras[0].firstChild, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 2 [paras[0].firstChild, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 2 [paras[0].firstChild, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 2 [paras[0].firstChild, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 2 [paras[0].firstChild, 1], range 23 [document, 0, document, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 24 [document, 0, document, 2]
+PASS Point 2 [paras[0].firstChild, 1], range 25 [comment, 2, comment, 3]
+PASS Point 2 [paras[0].firstChild, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 2 [paras[0].firstChild, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 2 [paras[0].firstChild, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 2 [paras[0].firstChild, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 2 [paras[0].firstChild, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 2 [paras[0].firstChild, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 2 [paras[0].firstChild, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 2 [paras[0].firstChild, 1], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 2 [paras[0].firstChild, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 2 [paras[0].firstChild, 1], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 2 [paras[0].firstChild, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 2 [paras[0].firstChild, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 2 [paras[0].firstChild, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 2 [paras[0].firstChild, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 2 [paras[0].firstChild, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 2 [paras[0].firstChild, 1], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 2 [paras[0].firstChild, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 2 [paras[0].firstChild, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 49 [document, 1, document, 2]
+PASS Point 2 [paras[0].firstChild, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 2 [paras[0].firstChild, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 2 [paras[0].firstChild, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 2 [paras[0].firstChild, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 2 [paras[0].firstChild, 1], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 2 [paras[0].firstChild, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 2 [paras[0].firstChild, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 2 [paras[0].firstChild, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 2 [paras[0].firstChild, 1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 3 [paras[0].firstChild, 2], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 3 [paras[0].firstChild, 2], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 3 [paras[0].firstChild, 2], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 3 [paras[0].firstChild, 2], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 3 [paras[0].firstChild, 2], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 3 [paras[0].firstChild, 2], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 3 [paras[0].firstChild, 2], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 3 [paras[0].firstChild, 2], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 3 [paras[0].firstChild, 2], range 13 [document.head, 1, document.head, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 14 [document.body, 4, document.body, 5]
+PASS Point 3 [paras[0].firstChild, 2], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 3 [paras[0].firstChild, 2], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 3 [paras[0].firstChild, 2], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 3 [paras[0].firstChild, 2], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 3 [paras[0].firstChild, 2], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 3 [paras[0].firstChild, 2], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 3 [paras[0].firstChild, 2], range 23 [document, 0, document, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 24 [document, 0, document, 2]
+PASS Point 3 [paras[0].firstChild, 2], range 25 [comment, 2, comment, 3]
+PASS Point 3 [paras[0].firstChild, 2], range 26 [testDiv, 0, comment, 5]
+PASS Point 3 [paras[0].firstChild, 2], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 3 [paras[0].firstChild, 2], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 3 [paras[0].firstChild, 2], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 3 [paras[0].firstChild, 2], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 3 [paras[0].firstChild, 2], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 3 [paras[0].firstChild, 2], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 3 [paras[0].firstChild, 2], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 3 [paras[0].firstChild, 2], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 3 [paras[0].firstChild, 2], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 3 [paras[0].firstChild, 2], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 3 [paras[0].firstChild, 2], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 3 [paras[0].firstChild, 2], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 3 [paras[0].firstChild, 2], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 3 [paras[0].firstChild, 2], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 3 [paras[0].firstChild, 2], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 3 [paras[0].firstChild, 2], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 3 [paras[0].firstChild, 2], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 49 [document, 1, document, 2]
+PASS Point 3 [paras[0].firstChild, 2], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 3 [paras[0].firstChild, 2], range 51 [paras[3], 1, comment, 8]
+PASS Point 3 [paras[0].firstChild, 2], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 3 [paras[0].firstChild, 2], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 3 [paras[0].firstChild, 2], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 3 [paras[0].firstChild, 2], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 3 [paras[0].firstChild, 2], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 3 [paras[0].firstChild, 2], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 3 [paras[0].firstChild, 2], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 4 [paras[0].firstChild, 8], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 4 [paras[0].firstChild, 8], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 4 [paras[0].firstChild, 8], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 4 [paras[0].firstChild, 8], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 4 [paras[0].firstChild, 8], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 4 [paras[0].firstChild, 8], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 4 [paras[0].firstChild, 8], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 4 [paras[0].firstChild, 8], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 4 [paras[0].firstChild, 8], range 13 [document.head, 1, document.head, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 14 [document.body, 4, document.body, 5]
+PASS Point 4 [paras[0].firstChild, 8], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 4 [paras[0].firstChild, 8], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 4 [paras[0].firstChild, 8], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 4 [paras[0].firstChild, 8], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 4 [paras[0].firstChild, 8], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 4 [paras[0].firstChild, 8], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 4 [paras[0].firstChild, 8], range 23 [document, 0, document, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 24 [document, 0, document, 2]
+PASS Point 4 [paras[0].firstChild, 8], range 25 [comment, 2, comment, 3]
+PASS Point 4 [paras[0].firstChild, 8], range 26 [testDiv, 0, comment, 5]
+PASS Point 4 [paras[0].firstChild, 8], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 4 [paras[0].firstChild, 8], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 4 [paras[0].firstChild, 8], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 4 [paras[0].firstChild, 8], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 4 [paras[0].firstChild, 8], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 4 [paras[0].firstChild, 8], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 4 [paras[0].firstChild, 8], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 4 [paras[0].firstChild, 8], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 4 [paras[0].firstChild, 8], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 4 [paras[0].firstChild, 8], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 4 [paras[0].firstChild, 8], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 4 [paras[0].firstChild, 8], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 4 [paras[0].firstChild, 8], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 4 [paras[0].firstChild, 8], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 4 [paras[0].firstChild, 8], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 4 [paras[0].firstChild, 8], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 4 [paras[0].firstChild, 8], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 49 [document, 1, document, 2]
+PASS Point 4 [paras[0].firstChild, 8], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 4 [paras[0].firstChild, 8], range 51 [paras[3], 1, comment, 8]
+PASS Point 4 [paras[0].firstChild, 8], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 4 [paras[0].firstChild, 8], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 4 [paras[0].firstChild, 8], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 4 [paras[0].firstChild, 8], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 4 [paras[0].firstChild, 8], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 4 [paras[0].firstChild, 8], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 4 [paras[0].firstChild, 8], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 5 [paras[0].firstChild, 9], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 5 [paras[0].firstChild, 9], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 5 [paras[0].firstChild, 9], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 5 [paras[0].firstChild, 9], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 5 [paras[0].firstChild, 9], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 5 [paras[0].firstChild, 9], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 5 [paras[0].firstChild, 9], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 5 [paras[0].firstChild, 9], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 5 [paras[0].firstChild, 9], range 13 [document.head, 1, document.head, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 14 [document.body, 4, document.body, 5]
+PASS Point 5 [paras[0].firstChild, 9], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 5 [paras[0].firstChild, 9], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 5 [paras[0].firstChild, 9], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 5 [paras[0].firstChild, 9], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 5 [paras[0].firstChild, 9], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 5 [paras[0].firstChild, 9], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 5 [paras[0].firstChild, 9], range 23 [document, 0, document, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 24 [document, 0, document, 2]
+PASS Point 5 [paras[0].firstChild, 9], range 25 [comment, 2, comment, 3]
+PASS Point 5 [paras[0].firstChild, 9], range 26 [testDiv, 0, comment, 5]
+PASS Point 5 [paras[0].firstChild, 9], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 5 [paras[0].firstChild, 9], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 5 [paras[0].firstChild, 9], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 5 [paras[0].firstChild, 9], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 5 [paras[0].firstChild, 9], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 5 [paras[0].firstChild, 9], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 5 [paras[0].firstChild, 9], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 5 [paras[0].firstChild, 9], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 5 [paras[0].firstChild, 9], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 5 [paras[0].firstChild, 9], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 5 [paras[0].firstChild, 9], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 5 [paras[0].firstChild, 9], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 5 [paras[0].firstChild, 9], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 5 [paras[0].firstChild, 9], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 5 [paras[0].firstChild, 9], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 5 [paras[0].firstChild, 9], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 5 [paras[0].firstChild, 9], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 49 [document, 1, document, 2]
+PASS Point 5 [paras[0].firstChild, 9], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 5 [paras[0].firstChild, 9], range 51 [paras[3], 1, comment, 8]
+PASS Point 5 [paras[0].firstChild, 9], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 5 [paras[0].firstChild, 9], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 5 [paras[0].firstChild, 9], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 5 [paras[0].firstChild, 9], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 5 [paras[0].firstChild, 9], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 5 [paras[0].firstChild, 9], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 5 [paras[0].firstChild, 9], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 6 [paras[0].firstChild, 10], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 6 [paras[0].firstChild, 10], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 6 [paras[0].firstChild, 10], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 6 [paras[0].firstChild, 10], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 6 [paras[0].firstChild, 10], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 6 [paras[0].firstChild, 10], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 6 [paras[0].firstChild, 10], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 6 [paras[0].firstChild, 10], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 6 [paras[0].firstChild, 10], range 13 [document.head, 1, document.head, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 14 [document.body, 4, document.body, 5]
+PASS Point 6 [paras[0].firstChild, 10], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 6 [paras[0].firstChild, 10], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 6 [paras[0].firstChild, 10], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 6 [paras[0].firstChild, 10], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 6 [paras[0].firstChild, 10], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 6 [paras[0].firstChild, 10], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 6 [paras[0].firstChild, 10], range 23 [document, 0, document, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 24 [document, 0, document, 2]
+PASS Point 6 [paras[0].firstChild, 10], range 25 [comment, 2, comment, 3]
+PASS Point 6 [paras[0].firstChild, 10], range 26 [testDiv, 0, comment, 5]
+PASS Point 6 [paras[0].firstChild, 10], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 6 [paras[0].firstChild, 10], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 6 [paras[0].firstChild, 10], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 6 [paras[0].firstChild, 10], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 6 [paras[0].firstChild, 10], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 6 [paras[0].firstChild, 10], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 6 [paras[0].firstChild, 10], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 6 [paras[0].firstChild, 10], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 6 [paras[0].firstChild, 10], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 6 [paras[0].firstChild, 10], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 6 [paras[0].firstChild, 10], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 6 [paras[0].firstChild, 10], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 6 [paras[0].firstChild, 10], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 6 [paras[0].firstChild, 10], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 6 [paras[0].firstChild, 10], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 6 [paras[0].firstChild, 10], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 6 [paras[0].firstChild, 10], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 49 [document, 1, document, 2]
+PASS Point 6 [paras[0].firstChild, 10], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 6 [paras[0].firstChild, 10], range 51 [paras[3], 1, comment, 8]
+PASS Point 6 [paras[0].firstChild, 10], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 6 [paras[0].firstChild, 10], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 6 [paras[0].firstChild, 10], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 6 [paras[0].firstChild, 10], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 6 [paras[0].firstChild, 10], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 6 [paras[0].firstChild, 10], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 6 [paras[0].firstChild, 10], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 7 [paras[0].firstChild, 65535], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 7 [paras[0].firstChild, 65535], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 7 [paras[0].firstChild, 65535], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 7 [paras[0].firstChild, 65535], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] IndexSizeError: DOM Exception 1
+FAIL Point 7 [paras[0].firstChild, 65535], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] IndexSizeError: DOM Exception 1
+PASS Point 7 [paras[0].firstChild, 65535], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 7 [paras[0].firstChild, 65535], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 7 [paras[0].firstChild, 65535], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 7 [paras[0].firstChild, 65535], range 13 [document.head, 1, document.head, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 14 [document.body, 4, document.body, 5]
+PASS Point 7 [paras[0].firstChild, 65535], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 7 [paras[0].firstChild, 65535], range 17 [detachedPara1, 0, detachedPara1, 1] IndexSizeError: DOM Exception 1
+PASS Point 7 [paras[0].firstChild, 65535], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 7 [paras[0].firstChild, 65535], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 7 [paras[0].firstChild, 65535], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 23 [document, 0, document, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 24 [document, 0, document, 2]
+PASS Point 7 [paras[0].firstChild, 65535], range 25 [comment, 2, comment, 3]
+PASS Point 7 [paras[0].firstChild, 65535], range 26 [testDiv, 0, comment, 5]
+PASS Point 7 [paras[0].firstChild, 65535], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 7 [paras[0].firstChild, 65535], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 7 [paras[0].firstChild, 65535], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 7 [paras[0].firstChild, 65535], range 30 [detachedTextNode, 0, detachedTextNode, 8] IndexSizeError: DOM Exception 1
+PASS Point 7 [paras[0].firstChild, 65535], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 7 [paras[0].firstChild, 65535], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 7 [paras[0].firstChild, 65535], range 33 [detachedComment, 3, detachedComment, 4] IndexSizeError: DOM Exception 1
+PASS Point 7 [paras[0].firstChild, 65535], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 7 [paras[0].firstChild, 65535], range 36 [docfrag, 0, docfrag, 0] IndexSizeError: DOM Exception 1
+PASS Point 7 [paras[0].firstChild, 65535], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 7 [paras[0].firstChild, 65535], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 7 [paras[0].firstChild, 65535], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] IndexSizeError: DOM Exception 1
+PASS Point 7 [paras[0].firstChild, 65535], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 7 [paras[0].firstChild, 65535], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 7 [paras[0].firstChild, 65535], range 45 [detachedPara1, 0, detachedPara1, 0] IndexSizeError: DOM Exception 1
+PASS Point 7 [paras[0].firstChild, 65535], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 7 [paras[0].firstChild, 65535], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 49 [document, 1, document, 2]
+PASS Point 7 [paras[0].firstChild, 65535], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 7 [paras[0].firstChild, 65535], range 51 [paras[3], 1, comment, 8]
+PASS Point 7 [paras[0].firstChild, 65535], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 7 [paras[0].firstChild, 65535], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 7 [paras[0].firstChild, 65535], range 56 [detachedComment, 5, detachedComment, 5] IndexSizeError: DOM Exception 1
+PASS Point 7 [paras[0].firstChild, 65535], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 7 [paras[0].firstChild, 65535], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 7 [paras[0].firstChild, 65535], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 7 [paras[0].firstChild, 65535], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 8 [paras[1].firstChild, -1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 8 [paras[1].firstChild, -1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 8 [paras[1].firstChild, -1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 8 [paras[1].firstChild, -1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] IndexSizeError: DOM Exception 1
+FAIL Point 8 [paras[1].firstChild, -1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] IndexSizeError: DOM Exception 1
+PASS Point 8 [paras[1].firstChild, -1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 8 [paras[1].firstChild, -1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 8 [paras[1].firstChild, -1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 8 [paras[1].firstChild, -1], range 13 [document.head, 1, document.head, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 14 [document.body, 4, document.body, 5]
+PASS Point 8 [paras[1].firstChild, -1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 8 [paras[1].firstChild, -1], range 17 [detachedPara1, 0, detachedPara1, 1] IndexSizeError: DOM Exception 1
+PASS Point 8 [paras[1].firstChild, -1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 8 [paras[1].firstChild, -1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 8 [paras[1].firstChild, -1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 8 [paras[1].firstChild, -1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 8 [paras[1].firstChild, -1], range 23 [document, 0, document, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 24 [document, 0, document, 2]
+PASS Point 8 [paras[1].firstChild, -1], range 25 [comment, 2, comment, 3]
+PASS Point 8 [paras[1].firstChild, -1], range 26 [testDiv, 0, comment, 5]
+PASS Point 8 [paras[1].firstChild, -1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 8 [paras[1].firstChild, -1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 8 [paras[1].firstChild, -1], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 8 [paras[1].firstChild, -1], range 30 [detachedTextNode, 0, detachedTextNode, 8] IndexSizeError: DOM Exception 1
+PASS Point 8 [paras[1].firstChild, -1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 8 [paras[1].firstChild, -1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 8 [paras[1].firstChild, -1], range 33 [detachedComment, 3, detachedComment, 4] IndexSizeError: DOM Exception 1
+PASS Point 8 [paras[1].firstChild, -1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 8 [paras[1].firstChild, -1], range 36 [docfrag, 0, docfrag, 0] IndexSizeError: DOM Exception 1
+PASS Point 8 [paras[1].firstChild, -1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 8 [paras[1].firstChild, -1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 8 [paras[1].firstChild, -1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] IndexSizeError: DOM Exception 1
+PASS Point 8 [paras[1].firstChild, -1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 8 [paras[1].firstChild, -1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 8 [paras[1].firstChild, -1], range 45 [detachedPara1, 0, detachedPara1, 0] IndexSizeError: DOM Exception 1
+PASS Point 8 [paras[1].firstChild, -1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 8 [paras[1].firstChild, -1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 49 [document, 1, document, 2]
+PASS Point 8 [paras[1].firstChild, -1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 8 [paras[1].firstChild, -1], range 51 [paras[3], 1, comment, 8]
+PASS Point 8 [paras[1].firstChild, -1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 8 [paras[1].firstChild, -1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 8 [paras[1].firstChild, -1], range 56 [detachedComment, 5, detachedComment, 5] IndexSizeError: DOM Exception 1
+PASS Point 8 [paras[1].firstChild, -1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 8 [paras[1].firstChild, -1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 8 [paras[1].firstChild, -1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 8 [paras[1].firstChild, -1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 9 [paras[1].firstChild, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 9 [paras[1].firstChild, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 9 [paras[1].firstChild, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 9 [paras[1].firstChild, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 9 [paras[1].firstChild, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 9 [paras[1].firstChild, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 9 [paras[1].firstChild, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 9 [paras[1].firstChild, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 9 [paras[1].firstChild, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 9 [paras[1].firstChild, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 9 [paras[1].firstChild, 0], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 9 [paras[1].firstChild, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 9 [paras[1].firstChild, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 9 [paras[1].firstChild, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 9 [paras[1].firstChild, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 9 [paras[1].firstChild, 0], range 23 [document, 0, document, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 24 [document, 0, document, 2]
+PASS Point 9 [paras[1].firstChild, 0], range 25 [comment, 2, comment, 3]
+PASS Point 9 [paras[1].firstChild, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 9 [paras[1].firstChild, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 9 [paras[1].firstChild, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 9 [paras[1].firstChild, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 9 [paras[1].firstChild, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 9 [paras[1].firstChild, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 9 [paras[1].firstChild, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 9 [paras[1].firstChild, 0], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 9 [paras[1].firstChild, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 9 [paras[1].firstChild, 0], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 9 [paras[1].firstChild, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 9 [paras[1].firstChild, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 9 [paras[1].firstChild, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 9 [paras[1].firstChild, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 9 [paras[1].firstChild, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 9 [paras[1].firstChild, 0], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 9 [paras[1].firstChild, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 9 [paras[1].firstChild, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 49 [document, 1, document, 2]
+PASS Point 9 [paras[1].firstChild, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 9 [paras[1].firstChild, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 9 [paras[1].firstChild, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 9 [paras[1].firstChild, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 9 [paras[1].firstChild, 0], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 9 [paras[1].firstChild, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 9 [paras[1].firstChild, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 9 [paras[1].firstChild, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 9 [paras[1].firstChild, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 10 [paras[1].firstChild, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 10 [paras[1].firstChild, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 10 [paras[1].firstChild, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 10 [paras[1].firstChild, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 10 [paras[1].firstChild, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 10 [paras[1].firstChild, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 10 [paras[1].firstChild, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 10 [paras[1].firstChild, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 10 [paras[1].firstChild, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 10 [paras[1].firstChild, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 10 [paras[1].firstChild, 1], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 10 [paras[1].firstChild, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 10 [paras[1].firstChild, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 10 [paras[1].firstChild, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 10 [paras[1].firstChild, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 10 [paras[1].firstChild, 1], range 23 [document, 0, document, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 24 [document, 0, document, 2]
+PASS Point 10 [paras[1].firstChild, 1], range 25 [comment, 2, comment, 3]
+PASS Point 10 [paras[1].firstChild, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 10 [paras[1].firstChild, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 10 [paras[1].firstChild, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 10 [paras[1].firstChild, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 10 [paras[1].firstChild, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 10 [paras[1].firstChild, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 10 [paras[1].firstChild, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 10 [paras[1].firstChild, 1], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 10 [paras[1].firstChild, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 10 [paras[1].firstChild, 1], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 10 [paras[1].firstChild, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 10 [paras[1].firstChild, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 10 [paras[1].firstChild, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 10 [paras[1].firstChild, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 10 [paras[1].firstChild, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 10 [paras[1].firstChild, 1], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 10 [paras[1].firstChild, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 10 [paras[1].firstChild, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 49 [document, 1, document, 2]
+PASS Point 10 [paras[1].firstChild, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 10 [paras[1].firstChild, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 10 [paras[1].firstChild, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 10 [paras[1].firstChild, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 10 [paras[1].firstChild, 1], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 10 [paras[1].firstChild, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 10 [paras[1].firstChild, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 10 [paras[1].firstChild, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 10 [paras[1].firstChild, 1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 11 [paras[1].firstChild, 2], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 11 [paras[1].firstChild, 2], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 11 [paras[1].firstChild, 2], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 11 [paras[1].firstChild, 2], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 11 [paras[1].firstChild, 2], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 11 [paras[1].firstChild, 2], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 11 [paras[1].firstChild, 2], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 11 [paras[1].firstChild, 2], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 11 [paras[1].firstChild, 2], range 13 [document.head, 1, document.head, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 14 [document.body, 4, document.body, 5]
+PASS Point 11 [paras[1].firstChild, 2], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 11 [paras[1].firstChild, 2], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 11 [paras[1].firstChild, 2], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 11 [paras[1].firstChild, 2], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 11 [paras[1].firstChild, 2], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 11 [paras[1].firstChild, 2], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 11 [paras[1].firstChild, 2], range 23 [document, 0, document, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 24 [document, 0, document, 2]
+PASS Point 11 [paras[1].firstChild, 2], range 25 [comment, 2, comment, 3]
+PASS Point 11 [paras[1].firstChild, 2], range 26 [testDiv, 0, comment, 5]
+PASS Point 11 [paras[1].firstChild, 2], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 11 [paras[1].firstChild, 2], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 11 [paras[1].firstChild, 2], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 11 [paras[1].firstChild, 2], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 11 [paras[1].firstChild, 2], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 11 [paras[1].firstChild, 2], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 11 [paras[1].firstChild, 2], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 11 [paras[1].firstChild, 2], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 11 [paras[1].firstChild, 2], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 11 [paras[1].firstChild, 2], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 11 [paras[1].firstChild, 2], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 11 [paras[1].firstChild, 2], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 11 [paras[1].firstChild, 2], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 11 [paras[1].firstChild, 2], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 11 [paras[1].firstChild, 2], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 11 [paras[1].firstChild, 2], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 11 [paras[1].firstChild, 2], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 49 [document, 1, document, 2]
+PASS Point 11 [paras[1].firstChild, 2], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 11 [paras[1].firstChild, 2], range 51 [paras[3], 1, comment, 8]
+PASS Point 11 [paras[1].firstChild, 2], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 11 [paras[1].firstChild, 2], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 11 [paras[1].firstChild, 2], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 11 [paras[1].firstChild, 2], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 11 [paras[1].firstChild, 2], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 11 [paras[1].firstChild, 2], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 11 [paras[1].firstChild, 2], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 12 [paras[1].firstChild, 8], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 12 [paras[1].firstChild, 8], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 12 [paras[1].firstChild, 8], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 12 [paras[1].firstChild, 8], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 12 [paras[1].firstChild, 8], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 12 [paras[1].firstChild, 8], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 12 [paras[1].firstChild, 8], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 12 [paras[1].firstChild, 8], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 12 [paras[1].firstChild, 8], range 13 [document.head, 1, document.head, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 14 [document.body, 4, document.body, 5]
+PASS Point 12 [paras[1].firstChild, 8], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 12 [paras[1].firstChild, 8], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 12 [paras[1].firstChild, 8], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 12 [paras[1].firstChild, 8], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 12 [paras[1].firstChild, 8], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 12 [paras[1].firstChild, 8], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 12 [paras[1].firstChild, 8], range 23 [document, 0, document, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 24 [document, 0, document, 2]
+PASS Point 12 [paras[1].firstChild, 8], range 25 [comment, 2, comment, 3]
+PASS Point 12 [paras[1].firstChild, 8], range 26 [testDiv, 0, comment, 5]
+PASS Point 12 [paras[1].firstChild, 8], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 12 [paras[1].firstChild, 8], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 12 [paras[1].firstChild, 8], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 12 [paras[1].firstChild, 8], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 12 [paras[1].firstChild, 8], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 12 [paras[1].firstChild, 8], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 12 [paras[1].firstChild, 8], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 12 [paras[1].firstChild, 8], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 12 [paras[1].firstChild, 8], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 12 [paras[1].firstChild, 8], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 12 [paras[1].firstChild, 8], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 12 [paras[1].firstChild, 8], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 12 [paras[1].firstChild, 8], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 12 [paras[1].firstChild, 8], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 12 [paras[1].firstChild, 8], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 12 [paras[1].firstChild, 8], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 12 [paras[1].firstChild, 8], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 49 [document, 1, document, 2]
+PASS Point 12 [paras[1].firstChild, 8], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 12 [paras[1].firstChild, 8], range 51 [paras[3], 1, comment, 8]
+PASS Point 12 [paras[1].firstChild, 8], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 12 [paras[1].firstChild, 8], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 12 [paras[1].firstChild, 8], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 12 [paras[1].firstChild, 8], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 12 [paras[1].firstChild, 8], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 12 [paras[1].firstChild, 8], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 12 [paras[1].firstChild, 8], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 13 [paras[1].firstChild, 9], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 13 [paras[1].firstChild, 9], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 13 [paras[1].firstChild, 9], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 13 [paras[1].firstChild, 9], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 13 [paras[1].firstChild, 9], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 13 [paras[1].firstChild, 9], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 13 [paras[1].firstChild, 9], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 13 [paras[1].firstChild, 9], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 13 [paras[1].firstChild, 9], range 13 [document.head, 1, document.head, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 14 [document.body, 4, document.body, 5]
+PASS Point 13 [paras[1].firstChild, 9], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 13 [paras[1].firstChild, 9], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 13 [paras[1].firstChild, 9], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 13 [paras[1].firstChild, 9], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 13 [paras[1].firstChild, 9], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 13 [paras[1].firstChild, 9], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 13 [paras[1].firstChild, 9], range 23 [document, 0, document, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 24 [document, 0, document, 2]
+PASS Point 13 [paras[1].firstChild, 9], range 25 [comment, 2, comment, 3]
+PASS Point 13 [paras[1].firstChild, 9], range 26 [testDiv, 0, comment, 5]
+PASS Point 13 [paras[1].firstChild, 9], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 13 [paras[1].firstChild, 9], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 13 [paras[1].firstChild, 9], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 13 [paras[1].firstChild, 9], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 13 [paras[1].firstChild, 9], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 13 [paras[1].firstChild, 9], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 13 [paras[1].firstChild, 9], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 13 [paras[1].firstChild, 9], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 13 [paras[1].firstChild, 9], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 13 [paras[1].firstChild, 9], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 13 [paras[1].firstChild, 9], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 13 [paras[1].firstChild, 9], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 13 [paras[1].firstChild, 9], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 13 [paras[1].firstChild, 9], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 13 [paras[1].firstChild, 9], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 13 [paras[1].firstChild, 9], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 13 [paras[1].firstChild, 9], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 49 [document, 1, document, 2]
+PASS Point 13 [paras[1].firstChild, 9], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 13 [paras[1].firstChild, 9], range 51 [paras[3], 1, comment, 8]
+PASS Point 13 [paras[1].firstChild, 9], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 13 [paras[1].firstChild, 9], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 13 [paras[1].firstChild, 9], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 13 [paras[1].firstChild, 9], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 13 [paras[1].firstChild, 9], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 13 [paras[1].firstChild, 9], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 13 [paras[1].firstChild, 9], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 14 [paras[1].firstChild, 10], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 14 [paras[1].firstChild, 10], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 14 [paras[1].firstChild, 10], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 14 [paras[1].firstChild, 10], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] IndexSizeError: DOM Exception 1
+FAIL Point 14 [paras[1].firstChild, 10], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] IndexSizeError: DOM Exception 1
+PASS Point 14 [paras[1].firstChild, 10], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 14 [paras[1].firstChild, 10], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 14 [paras[1].firstChild, 10], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 14 [paras[1].firstChild, 10], range 13 [document.head, 1, document.head, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 14 [document.body, 4, document.body, 5]
+PASS Point 14 [paras[1].firstChild, 10], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 14 [paras[1].firstChild, 10], range 17 [detachedPara1, 0, detachedPara1, 1] IndexSizeError: DOM Exception 1
+PASS Point 14 [paras[1].firstChild, 10], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 14 [paras[1].firstChild, 10], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 14 [paras[1].firstChild, 10], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 14 [paras[1].firstChild, 10], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 14 [paras[1].firstChild, 10], range 23 [document, 0, document, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 24 [document, 0, document, 2]
+PASS Point 14 [paras[1].firstChild, 10], range 25 [comment, 2, comment, 3]
+PASS Point 14 [paras[1].firstChild, 10], range 26 [testDiv, 0, comment, 5]
+PASS Point 14 [paras[1].firstChild, 10], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 14 [paras[1].firstChild, 10], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 14 [paras[1].firstChild, 10], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 14 [paras[1].firstChild, 10], range 30 [detachedTextNode, 0, detachedTextNode, 8] IndexSizeError: DOM Exception 1
+PASS Point 14 [paras[1].firstChild, 10], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 14 [paras[1].firstChild, 10], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 14 [paras[1].firstChild, 10], range 33 [detachedComment, 3, detachedComment, 4] IndexSizeError: DOM Exception 1
+PASS Point 14 [paras[1].firstChild, 10], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 14 [paras[1].firstChild, 10], range 36 [docfrag, 0, docfrag, 0] IndexSizeError: DOM Exception 1
+PASS Point 14 [paras[1].firstChild, 10], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 14 [paras[1].firstChild, 10], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 14 [paras[1].firstChild, 10], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] IndexSizeError: DOM Exception 1
+PASS Point 14 [paras[1].firstChild, 10], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 14 [paras[1].firstChild, 10], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 14 [paras[1].firstChild, 10], range 45 [detachedPara1, 0, detachedPara1, 0] IndexSizeError: DOM Exception 1
+PASS Point 14 [paras[1].firstChild, 10], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 14 [paras[1].firstChild, 10], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 49 [document, 1, document, 2]
+PASS Point 14 [paras[1].firstChild, 10], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 14 [paras[1].firstChild, 10], range 51 [paras[3], 1, comment, 8]
+PASS Point 14 [paras[1].firstChild, 10], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 14 [paras[1].firstChild, 10], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 14 [paras[1].firstChild, 10], range 56 [detachedComment, 5, detachedComment, 5] IndexSizeError: DOM Exception 1
+PASS Point 14 [paras[1].firstChild, 10], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 14 [paras[1].firstChild, 10], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 14 [paras[1].firstChild, 10], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 14 [paras[1].firstChild, 10], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 15 [paras[1].firstChild, 65535], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 15 [paras[1].firstChild, 65535], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 15 [paras[1].firstChild, 65535], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 15 [paras[1].firstChild, 65535], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] IndexSizeError: DOM Exception 1
+FAIL Point 15 [paras[1].firstChild, 65535], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] IndexSizeError: DOM Exception 1
+PASS Point 15 [paras[1].firstChild, 65535], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 15 [paras[1].firstChild, 65535], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 15 [paras[1].firstChild, 65535], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 15 [paras[1].firstChild, 65535], range 13 [document.head, 1, document.head, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 14 [document.body, 4, document.body, 5]
+PASS Point 15 [paras[1].firstChild, 65535], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 15 [paras[1].firstChild, 65535], range 17 [detachedPara1, 0, detachedPara1, 1] IndexSizeError: DOM Exception 1
+PASS Point 15 [paras[1].firstChild, 65535], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 15 [paras[1].firstChild, 65535], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 15 [paras[1].firstChild, 65535], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 23 [document, 0, document, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 24 [document, 0, document, 2]
+PASS Point 15 [paras[1].firstChild, 65535], range 25 [comment, 2, comment, 3]
+PASS Point 15 [paras[1].firstChild, 65535], range 26 [testDiv, 0, comment, 5]
+PASS Point 15 [paras[1].firstChild, 65535], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 15 [paras[1].firstChild, 65535], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 15 [paras[1].firstChild, 65535], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 15 [paras[1].firstChild, 65535], range 30 [detachedTextNode, 0, detachedTextNode, 8] IndexSizeError: DOM Exception 1
+PASS Point 15 [paras[1].firstChild, 65535], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 15 [paras[1].firstChild, 65535], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 15 [paras[1].firstChild, 65535], range 33 [detachedComment, 3, detachedComment, 4] IndexSizeError: DOM Exception 1
+PASS Point 15 [paras[1].firstChild, 65535], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 15 [paras[1].firstChild, 65535], range 36 [docfrag, 0, docfrag, 0] IndexSizeError: DOM Exception 1
+PASS Point 15 [paras[1].firstChild, 65535], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 15 [paras[1].firstChild, 65535], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 15 [paras[1].firstChild, 65535], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] IndexSizeError: DOM Exception 1
+PASS Point 15 [paras[1].firstChild, 65535], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 15 [paras[1].firstChild, 65535], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 15 [paras[1].firstChild, 65535], range 45 [detachedPara1, 0, detachedPara1, 0] IndexSizeError: DOM Exception 1
+PASS Point 15 [paras[1].firstChild, 65535], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 15 [paras[1].firstChild, 65535], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 49 [document, 1, document, 2]
+PASS Point 15 [paras[1].firstChild, 65535], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 15 [paras[1].firstChild, 65535], range 51 [paras[3], 1, comment, 8]
+PASS Point 15 [paras[1].firstChild, 65535], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 15 [paras[1].firstChild, 65535], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 15 [paras[1].firstChild, 65535], range 56 [detachedComment, 5, detachedComment, 5] IndexSizeError: DOM Exception 1
+PASS Point 15 [paras[1].firstChild, 65535], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 15 [paras[1].firstChild, 65535], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 15 [paras[1].firstChild, 65535], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 15 [paras[1].firstChild, 65535], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 16 [detachedPara1.firstChild, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 16 [detachedPara1.firstChild, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 16 [detachedPara1.firstChild, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 16 [detachedPara1.firstChild, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 16 [detachedPara1.firstChild, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 16 [detachedPara1.firstChild, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 16 [detachedPara1.firstChild, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 16 [detachedPara1.firstChild, 0], range 17 [detachedPara1, 0, detachedPara1, 1] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 16 [detachedPara1.firstChild, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 16 [detachedPara1.firstChild, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 23 [document, 0, document, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 24 [document, 0, document, 2]
+PASS Point 16 [detachedPara1.firstChild, 0], range 25 [comment, 2, comment, 3]
+PASS Point 16 [detachedPara1.firstChild, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 16 [detachedPara1.firstChild, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 16 [detachedPara1.firstChild, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 16 [detachedPara1.firstChild, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 16 [detachedPara1.firstChild, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 16 [detachedPara1.firstChild, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 16 [detachedPara1.firstChild, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 16 [detachedPara1.firstChild, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 16 [detachedPara1.firstChild, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 16 [detachedPara1.firstChild, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 16 [detachedPara1.firstChild, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 49 [document, 1, document, 2]
+PASS Point 16 [detachedPara1.firstChild, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 16 [detachedPara1.firstChild, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 16 [detachedPara1.firstChild, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 16 [detachedPara1.firstChild, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 16 [detachedPara1.firstChild, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 16 [detachedPara1.firstChild, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 16 [detachedPara1.firstChild, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 16 [detachedPara1.firstChild, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 16 [detachedPara1.firstChild, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 17 [detachedPara1.firstChild, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 17 [detachedPara1.firstChild, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 17 [detachedPara1.firstChild, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 17 [detachedPara1.firstChild, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 17 [detachedPara1.firstChild, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 17 [detachedPara1.firstChild, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 17 [detachedPara1.firstChild, 1], range 17 [detachedPara1, 0, detachedPara1, 1] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 17 [detachedPara1.firstChild, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 17 [detachedPara1.firstChild, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 23 [document, 0, document, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 24 [document, 0, document, 2]
+PASS Point 17 [detachedPara1.firstChild, 1], range 25 [comment, 2, comment, 3]
+PASS Point 17 [detachedPara1.firstChild, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 17 [detachedPara1.firstChild, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 17 [detachedPara1.firstChild, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 17 [detachedPara1.firstChild, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 17 [detachedPara1.firstChild, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 17 [detachedPara1.firstChild, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 17 [detachedPara1.firstChild, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 17 [detachedPara1.firstChild, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 17 [detachedPara1.firstChild, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 17 [detachedPara1.firstChild, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 17 [detachedPara1.firstChild, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 49 [document, 1, document, 2]
+PASS Point 17 [detachedPara1.firstChild, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 17 [detachedPara1.firstChild, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 17 [detachedPara1.firstChild, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 17 [detachedPara1.firstChild, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 17 [detachedPara1.firstChild, 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 17 [detachedPara1.firstChild, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 17 [detachedPara1.firstChild, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 17 [detachedPara1.firstChild, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 17 [detachedPara1.firstChild, 1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 18 [detachedPara1.firstChild, 8], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 18 [detachedPara1.firstChild, 8], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 18 [detachedPara1.firstChild, 8], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+FAIL Point 18 [detachedPara1.firstChild, 8], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 18 [detachedPara1.firstChild, 8], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 18 [detachedPara1.firstChild, 8], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 18 [detachedPara1.firstChild, 8], range 13 [document.head, 1, document.head, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 14 [document.body, 4, document.body, 5]
+PASS Point 18 [detachedPara1.firstChild, 8], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 18 [detachedPara1.firstChild, 8], range 17 [detachedPara1, 0, detachedPara1, 1] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 18 [detachedPara1.firstChild, 8], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 18 [detachedPara1.firstChild, 8], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 23 [document, 0, document, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 24 [document, 0, document, 2]
+PASS Point 18 [detachedPara1.firstChild, 8], range 25 [comment, 2, comment, 3]
+PASS Point 18 [detachedPara1.firstChild, 8], range 26 [testDiv, 0, comment, 5]
+PASS Point 18 [detachedPara1.firstChild, 8], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 18 [detachedPara1.firstChild, 8], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 18 [detachedPara1.firstChild, 8], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 18 [detachedPara1.firstChild, 8], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 18 [detachedPara1.firstChild, 8], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 18 [detachedPara1.firstChild, 8], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 18 [detachedPara1.firstChild, 8], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 18 [detachedPara1.firstChild, 8], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 49 [document, 1, document, 2]
+PASS Point 18 [detachedPara1.firstChild, 8], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 18 [detachedPara1.firstChild, 8], range 51 [paras[3], 1, comment, 8]
+PASS Point 18 [detachedPara1.firstChild, 8], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 18 [detachedPara1.firstChild, 8], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 18 [detachedPara1.firstChild, 8], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 18 [detachedPara1.firstChild, 8], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 18 [detachedPara1.firstChild, 8], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 18 [detachedPara1.firstChild, 8], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 18 [detachedPara1.firstChild, 8], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 19 [detachedPara1.firstChild, 9], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 19 [detachedPara1.firstChild, 9], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 19 [detachedPara1.firstChild, 9], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 19 [detachedPara1.firstChild, 9], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] assert_throws: Must throw IndexSizeError if offset is greater than length function "function () {
+ range.isPointInRange(node, offset..." did not throw
+FAIL Point 19 [detachedPara1.firstChild, 9], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] assert_throws: Must throw IndexSizeError if offset is greater than length function "function () {
+ range.isPointInRange(node, offset..." did not throw
+PASS Point 19 [detachedPara1.firstChild, 9], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 19 [detachedPara1.firstChild, 9], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 19 [detachedPara1.firstChild, 9], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 19 [detachedPara1.firstChild, 9], range 13 [document.head, 1, document.head, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 14 [document.body, 4, document.body, 5]
+PASS Point 19 [detachedPara1.firstChild, 9], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 19 [detachedPara1.firstChild, 9], range 17 [detachedPara1, 0, detachedPara1, 1] assert_throws: Must throw IndexSizeError if offset is greater than length function "function () {
+ range.isPointInRange(node, offset..." did not throw
+PASS Point 19 [detachedPara1.firstChild, 9], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 19 [detachedPara1.firstChild, 9], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 19 [detachedPara1.firstChild, 9], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 23 [document, 0, document, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 24 [document, 0, document, 2]
+PASS Point 19 [detachedPara1.firstChild, 9], range 25 [comment, 2, comment, 3]
+PASS Point 19 [detachedPara1.firstChild, 9], range 26 [testDiv, 0, comment, 5]
+PASS Point 19 [detachedPara1.firstChild, 9], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 19 [detachedPara1.firstChild, 9], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 19 [detachedPara1.firstChild, 9], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 19 [detachedPara1.firstChild, 9], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 19 [detachedPara1.firstChild, 9], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 19 [detachedPara1.firstChild, 9], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 19 [detachedPara1.firstChild, 9], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 19 [detachedPara1.firstChild, 9], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 19 [detachedPara1.firstChild, 9], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 19 [detachedPara1.firstChild, 9], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] assert_throws: Must throw IndexSizeError if offset is greater than length function "function () {
+ range.isPointInRange(node, offset..." did not throw
+PASS Point 19 [detachedPara1.firstChild, 9], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 19 [detachedPara1.firstChild, 9], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 19 [detachedPara1.firstChild, 9], range 45 [detachedPara1, 0, detachedPara1, 0] assert_throws: Must throw IndexSizeError if offset is greater than length function "function () {
+ range.isPointInRange(node, offset..." did not throw
+PASS Point 19 [detachedPara1.firstChild, 9], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 19 [detachedPara1.firstChild, 9], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 49 [document, 1, document, 2]
+PASS Point 19 [detachedPara1.firstChild, 9], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 19 [detachedPara1.firstChild, 9], range 51 [paras[3], 1, comment, 8]
+PASS Point 19 [detachedPara1.firstChild, 9], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 19 [detachedPara1.firstChild, 9], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 19 [detachedPara1.firstChild, 9], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 19 [detachedPara1.firstChild, 9], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 19 [detachedPara1.firstChild, 9], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 19 [detachedPara1.firstChild, 9], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 19 [detachedPara1.firstChild, 9], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 20 [foreignPara1.firstChild, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 20 [foreignPara1.firstChild, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 20 [foreignPara1.firstChild, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 20 [foreignPara1.firstChild, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 20 [foreignPara1.firstChild, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 20 [foreignPara1.firstChild, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 20 [foreignPara1.firstChild, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 20 [foreignPara1.firstChild, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 20 [foreignPara1.firstChild, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 20 [foreignPara1.firstChild, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 20 [foreignPara1.firstChild, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 23 [document, 0, document, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 24 [document, 0, document, 2]
+PASS Point 20 [foreignPara1.firstChild, 0], range 25 [comment, 2, comment, 3]
+PASS Point 20 [foreignPara1.firstChild, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 20 [foreignPara1.firstChild, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 20 [foreignPara1.firstChild, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 20 [foreignPara1.firstChild, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+FAIL Point 20 [foreignPara1.firstChild, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 20 [foreignPara1.firstChild, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 20 [foreignPara1.firstChild, 0], range 33 [detachedComment, 3, detachedComment, 4]
+FAIL Point 20 [foreignPara1.firstChild, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] WrongDocumentError: DOM Exception 4
+PASS Point 20 [foreignPara1.firstChild, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 20 [foreignPara1.firstChild, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 20 [foreignPara1.firstChild, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 20 [foreignPara1.firstChild, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 20 [foreignPara1.firstChild, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 20 [foreignPara1.firstChild, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 49 [document, 1, document, 2]
+PASS Point 20 [foreignPara1.firstChild, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 20 [foreignPara1.firstChild, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 20 [foreignPara1.firstChild, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 20 [foreignPara1.firstChild, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+FAIL Point 20 [foreignPara1.firstChild, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 20 [foreignPara1.firstChild, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 20 [foreignPara1.firstChild, 0], range 56 [detachedComment, 5, detachedComment, 5]
+FAIL Point 20 [foreignPara1.firstChild, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] WrongDocumentError: DOM Exception 4
+FAIL Point 20 [foreignPara1.firstChild, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 20 [foreignPara1.firstChild, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 20 [foreignPara1.firstChild, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 21 [foreignPara1.firstChild, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 21 [foreignPara1.firstChild, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 21 [foreignPara1.firstChild, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 21 [foreignPara1.firstChild, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 21 [foreignPara1.firstChild, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 21 [foreignPara1.firstChild, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 21 [foreignPara1.firstChild, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 21 [foreignPara1.firstChild, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 21 [foreignPara1.firstChild, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 21 [foreignPara1.firstChild, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 21 [foreignPara1.firstChild, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 23 [document, 0, document, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 24 [document, 0, document, 2]
+PASS Point 21 [foreignPara1.firstChild, 1], range 25 [comment, 2, comment, 3]
+PASS Point 21 [foreignPara1.firstChild, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 21 [foreignPara1.firstChild, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 21 [foreignPara1.firstChild, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 21 [foreignPara1.firstChild, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+FAIL Point 21 [foreignPara1.firstChild, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 21 [foreignPara1.firstChild, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 21 [foreignPara1.firstChild, 1], range 33 [detachedComment, 3, detachedComment, 4]
+FAIL Point 21 [foreignPara1.firstChild, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] WrongDocumentError: DOM Exception 4
+PASS Point 21 [foreignPara1.firstChild, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 21 [foreignPara1.firstChild, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 21 [foreignPara1.firstChild, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 21 [foreignPara1.firstChild, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 21 [foreignPara1.firstChild, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 21 [foreignPara1.firstChild, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 49 [document, 1, document, 2]
+PASS Point 21 [foreignPara1.firstChild, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 21 [foreignPara1.firstChild, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 21 [foreignPara1.firstChild, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 21 [foreignPara1.firstChild, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+FAIL Point 21 [foreignPara1.firstChild, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 21 [foreignPara1.firstChild, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 21 [foreignPara1.firstChild, 1], range 56 [detachedComment, 5, detachedComment, 5]
+FAIL Point 21 [foreignPara1.firstChild, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] WrongDocumentError: DOM Exception 4
+FAIL Point 21 [foreignPara1.firstChild, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 21 [foreignPara1.firstChild, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 21 [foreignPara1.firstChild, 1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 22 [foreignPara1.firstChild, 8], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 22 [foreignPara1.firstChild, 8], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 22 [foreignPara1.firstChild, 8], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 22 [foreignPara1.firstChild, 8], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 22 [foreignPara1.firstChild, 8], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 22 [foreignPara1.firstChild, 8], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 22 [foreignPara1.firstChild, 8], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 22 [foreignPara1.firstChild, 8], range 13 [document.head, 1, document.head, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 14 [document.body, 4, document.body, 5]
+PASS Point 22 [foreignPara1.firstChild, 8], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 22 [foreignPara1.firstChild, 8], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 22 [foreignPara1.firstChild, 8], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 23 [document, 0, document, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 24 [document, 0, document, 2]
+PASS Point 22 [foreignPara1.firstChild, 8], range 25 [comment, 2, comment, 3]
+PASS Point 22 [foreignPara1.firstChild, 8], range 26 [testDiv, 0, comment, 5]
+PASS Point 22 [foreignPara1.firstChild, 8], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 22 [foreignPara1.firstChild, 8], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 22 [foreignPara1.firstChild, 8], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+FAIL Point 22 [foreignPara1.firstChild, 8], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 22 [foreignPara1.firstChild, 8], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 22 [foreignPara1.firstChild, 8], range 33 [detachedComment, 3, detachedComment, 4]
+FAIL Point 22 [foreignPara1.firstChild, 8], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] WrongDocumentError: DOM Exception 4
+PASS Point 22 [foreignPara1.firstChild, 8], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 22 [foreignPara1.firstChild, 8], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 22 [foreignPara1.firstChild, 8], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 22 [foreignPara1.firstChild, 8], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 22 [foreignPara1.firstChild, 8], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 22 [foreignPara1.firstChild, 8], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 49 [document, 1, document, 2]
+PASS Point 22 [foreignPara1.firstChild, 8], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 22 [foreignPara1.firstChild, 8], range 51 [paras[3], 1, comment, 8]
+PASS Point 22 [foreignPara1.firstChild, 8], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 22 [foreignPara1.firstChild, 8], range 53 [xmlDoc, 0, xmlDoc, 0]
+FAIL Point 22 [foreignPara1.firstChild, 8], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 22 [foreignPara1.firstChild, 8], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 22 [foreignPara1.firstChild, 8], range 56 [detachedComment, 5, detachedComment, 5]
+FAIL Point 22 [foreignPara1.firstChild, 8], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] WrongDocumentError: DOM Exception 4
+FAIL Point 22 [foreignPara1.firstChild, 8], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 22 [foreignPara1.firstChild, 8], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 22 [foreignPara1.firstChild, 8], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 23 [foreignPara1.firstChild, 9], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 23 [foreignPara1.firstChild, 9], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 23 [foreignPara1.firstChild, 9], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 23 [foreignPara1.firstChild, 9], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 23 [foreignPara1.firstChild, 9], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 23 [foreignPara1.firstChild, 9], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 23 [foreignPara1.firstChild, 9], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 23 [foreignPara1.firstChild, 9], range 13 [document.head, 1, document.head, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 14 [document.body, 4, document.body, 5]
+PASS Point 23 [foreignPara1.firstChild, 9], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 23 [foreignPara1.firstChild, 9], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 23 [foreignPara1.firstChild, 9], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 23 [document, 0, document, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 24 [document, 0, document, 2]
+PASS Point 23 [foreignPara1.firstChild, 9], range 25 [comment, 2, comment, 3]
+PASS Point 23 [foreignPara1.firstChild, 9], range 26 [testDiv, 0, comment, 5]
+PASS Point 23 [foreignPara1.firstChild, 9], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 23 [foreignPara1.firstChild, 9], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 23 [foreignPara1.firstChild, 9], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+FAIL Point 23 [foreignPara1.firstChild, 9], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] IndexSizeError: DOM Exception 1
+PASS Point 23 [foreignPara1.firstChild, 9], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 23 [foreignPara1.firstChild, 9], range 33 [detachedComment, 3, detachedComment, 4]
+FAIL Point 23 [foreignPara1.firstChild, 9], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] IndexSizeError: DOM Exception 1
+PASS Point 23 [foreignPara1.firstChild, 9], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 23 [foreignPara1.firstChild, 9], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 23 [foreignPara1.firstChild, 9], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 23 [foreignPara1.firstChild, 9], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 23 [foreignPara1.firstChild, 9], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 23 [foreignPara1.firstChild, 9], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 49 [document, 1, document, 2]
+PASS Point 23 [foreignPara1.firstChild, 9], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 23 [foreignPara1.firstChild, 9], range 51 [paras[3], 1, comment, 8]
+PASS Point 23 [foreignPara1.firstChild, 9], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 23 [foreignPara1.firstChild, 9], range 53 [xmlDoc, 0, xmlDoc, 0]
+FAIL Point 23 [foreignPara1.firstChild, 9], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] IndexSizeError: DOM Exception 1
+PASS Point 23 [foreignPara1.firstChild, 9], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 23 [foreignPara1.firstChild, 9], range 56 [detachedComment, 5, detachedComment, 5]
+FAIL Point 23 [foreignPara1.firstChild, 9], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] IndexSizeError: DOM Exception 1
+FAIL Point 23 [foreignPara1.firstChild, 9], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] IndexSizeError: DOM Exception 1
+PASS Point 23 [foreignPara1.firstChild, 9], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 23 [foreignPara1.firstChild, 9], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 24 [document.documentElement, -1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 24 [document.documentElement, -1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 24 [document.documentElement, -1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 24 [document.documentElement, -1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 24 [document.documentElement, -1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 24 [document.documentElement, -1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 24 [document.documentElement, -1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] IndexSizeError: DOM Exception 1
+FAIL Point 24 [document.documentElement, -1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] IndexSizeError: DOM Exception 1
+PASS Point 24 [document.documentElement, -1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 24 [document.documentElement, -1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 24 [document.documentElement, -1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 24 [document.documentElement, -1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 24 [document.documentElement, -1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 24 [document.documentElement, -1], range 13 [document.head, 1, document.head, 1]
+PASS Point 24 [document.documentElement, -1], range 14 [document.body, 4, document.body, 5]
+PASS Point 24 [document.documentElement, -1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 24 [document.documentElement, -1], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 24 [document.documentElement, -1], range 17 [detachedPara1, 0, detachedPara1, 1] IndexSizeError: DOM Exception 1
+PASS Point 24 [document.documentElement, -1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 24 [document.documentElement, -1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 24 [document.documentElement, -1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 24 [document.documentElement, -1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 24 [document.documentElement, -1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 24 [document.documentElement, -1], range 23 [document, 0, document, 1]
+PASS Point 24 [document.documentElement, -1], range 24 [document, 0, document, 2]
+PASS Point 24 [document.documentElement, -1], range 25 [comment, 2, comment, 3]
+PASS Point 24 [document.documentElement, -1], range 26 [testDiv, 0, comment, 5]
+PASS Point 24 [document.documentElement, -1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 24 [document.documentElement, -1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 24 [document.documentElement, -1], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 24 [document.documentElement, -1], range 30 [detachedTextNode, 0, detachedTextNode, 8] IndexSizeError: DOM Exception 1
+PASS Point 24 [document.documentElement, -1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 24 [document.documentElement, -1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 24 [document.documentElement, -1], range 33 [detachedComment, 3, detachedComment, 4] IndexSizeError: DOM Exception 1
+PASS Point 24 [document.documentElement, -1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 24 [document.documentElement, -1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 24 [document.documentElement, -1], range 36 [docfrag, 0, docfrag, 0] IndexSizeError: DOM Exception 1
+PASS Point 24 [document.documentElement, -1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 24 [document.documentElement, -1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 24 [document.documentElement, -1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 24 [document.documentElement, -1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] IndexSizeError: DOM Exception 1
+PASS Point 24 [document.documentElement, -1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 24 [document.documentElement, -1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 24 [document.documentElement, -1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 24 [document.documentElement, -1], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 24 [document.documentElement, -1], range 45 [detachedPara1, 0, detachedPara1, 0] IndexSizeError: DOM Exception 1
+PASS Point 24 [document.documentElement, -1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 24 [document.documentElement, -1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 24 [document.documentElement, -1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 24 [document.documentElement, -1], range 49 [document, 1, document, 2]
+PASS Point 24 [document.documentElement, -1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 24 [document.documentElement, -1], range 51 [paras[3], 1, comment, 8]
+PASS Point 24 [document.documentElement, -1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 24 [document.documentElement, -1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 24 [document.documentElement, -1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 24 [document.documentElement, -1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 24 [document.documentElement, -1], range 56 [detachedComment, 5, detachedComment, 5] IndexSizeError: DOM Exception 1
+PASS Point 24 [document.documentElement, -1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 24 [document.documentElement, -1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 24 [document.documentElement, -1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 24 [document.documentElement, -1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 25 [document.documentElement, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 25 [document.documentElement, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 25 [document.documentElement, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 25 [document.documentElement, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 25 [document.documentElement, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 25 [document.documentElement, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 25 [document.documentElement, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 25 [document.documentElement, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 25 [document.documentElement, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 25 [document.documentElement, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 25 [document.documentElement, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 25 [document.documentElement, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 25 [document.documentElement, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 25 [document.documentElement, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 25 [document.documentElement, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 25 [document.documentElement, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 25 [document.documentElement, 0], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 25 [document.documentElement, 0], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 25 [document.documentElement, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 25 [document.documentElement, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 25 [document.documentElement, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 25 [document.documentElement, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 25 [document.documentElement, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 25 [document.documentElement, 0], range 23 [document, 0, document, 1]
+PASS Point 25 [document.documentElement, 0], range 24 [document, 0, document, 2]
+PASS Point 25 [document.documentElement, 0], range 25 [comment, 2, comment, 3]
+PASS Point 25 [document.documentElement, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 25 [document.documentElement, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 25 [document.documentElement, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 25 [document.documentElement, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 25 [document.documentElement, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 25 [document.documentElement, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 25 [document.documentElement, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 25 [document.documentElement, 0], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 25 [document.documentElement, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 25 [document.documentElement, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 25 [document.documentElement, 0], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 25 [document.documentElement, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 25 [document.documentElement, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 25 [document.documentElement, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 25 [document.documentElement, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 25 [document.documentElement, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 25 [document.documentElement, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 25 [document.documentElement, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 25 [document.documentElement, 0], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 25 [document.documentElement, 0], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 25 [document.documentElement, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 25 [document.documentElement, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 25 [document.documentElement, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 25 [document.documentElement, 0], range 49 [document, 1, document, 2]
+PASS Point 25 [document.documentElement, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 25 [document.documentElement, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 25 [document.documentElement, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 25 [document.documentElement, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 25 [document.documentElement, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 25 [document.documentElement, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 25 [document.documentElement, 0], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 25 [document.documentElement, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 25 [document.documentElement, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 25 [document.documentElement, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 25 [document.documentElement, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 26 [document.documentElement, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 26 [document.documentElement, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 26 [document.documentElement, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 26 [document.documentElement, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 26 [document.documentElement, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 26 [document.documentElement, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 26 [document.documentElement, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 26 [document.documentElement, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 26 [document.documentElement, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 26 [document.documentElement, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 26 [document.documentElement, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 26 [document.documentElement, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 26 [document.documentElement, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 26 [document.documentElement, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 26 [document.documentElement, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 26 [document.documentElement, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 26 [document.documentElement, 1], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 26 [document.documentElement, 1], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 26 [document.documentElement, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 26 [document.documentElement, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 26 [document.documentElement, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 26 [document.documentElement, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 26 [document.documentElement, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 26 [document.documentElement, 1], range 23 [document, 0, document, 1]
+PASS Point 26 [document.documentElement, 1], range 24 [document, 0, document, 2]
+PASS Point 26 [document.documentElement, 1], range 25 [comment, 2, comment, 3]
+PASS Point 26 [document.documentElement, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 26 [document.documentElement, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 26 [document.documentElement, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 26 [document.documentElement, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 26 [document.documentElement, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 26 [document.documentElement, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 26 [document.documentElement, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 26 [document.documentElement, 1], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 26 [document.documentElement, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 26 [document.documentElement, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 26 [document.documentElement, 1], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 26 [document.documentElement, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 26 [document.documentElement, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 26 [document.documentElement, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 26 [document.documentElement, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 26 [document.documentElement, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 26 [document.documentElement, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 26 [document.documentElement, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 26 [document.documentElement, 1], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 26 [document.documentElement, 1], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 26 [document.documentElement, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 26 [document.documentElement, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 26 [document.documentElement, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 26 [document.documentElement, 1], range 49 [document, 1, document, 2]
+PASS Point 26 [document.documentElement, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 26 [document.documentElement, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 26 [document.documentElement, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 26 [document.documentElement, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 26 [document.documentElement, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 26 [document.documentElement, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 26 [document.documentElement, 1], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 26 [document.documentElement, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 26 [document.documentElement, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 26 [document.documentElement, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 26 [document.documentElement, 1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 27 [document.documentElement, 2], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 27 [document.documentElement, 2], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 27 [document.documentElement, 2], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 27 [document.documentElement, 2], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 27 [document.documentElement, 2], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 27 [document.documentElement, 2], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 27 [document.documentElement, 2], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 27 [document.documentElement, 2], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 27 [document.documentElement, 2], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 27 [document.documentElement, 2], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 27 [document.documentElement, 2], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 27 [document.documentElement, 2], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 27 [document.documentElement, 2], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 27 [document.documentElement, 2], range 13 [document.head, 1, document.head, 1]
+PASS Point 27 [document.documentElement, 2], range 14 [document.body, 4, document.body, 5]
+PASS Point 27 [document.documentElement, 2], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 27 [document.documentElement, 2], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 27 [document.documentElement, 2], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 27 [document.documentElement, 2], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 27 [document.documentElement, 2], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 27 [document.documentElement, 2], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 27 [document.documentElement, 2], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 27 [document.documentElement, 2], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 27 [document.documentElement, 2], range 23 [document, 0, document, 1]
+PASS Point 27 [document.documentElement, 2], range 24 [document, 0, document, 2]
+PASS Point 27 [document.documentElement, 2], range 25 [comment, 2, comment, 3]
+PASS Point 27 [document.documentElement, 2], range 26 [testDiv, 0, comment, 5]
+PASS Point 27 [document.documentElement, 2], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 27 [document.documentElement, 2], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 27 [document.documentElement, 2], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 27 [document.documentElement, 2], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 27 [document.documentElement, 2], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 27 [document.documentElement, 2], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 27 [document.documentElement, 2], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 27 [document.documentElement, 2], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 27 [document.documentElement, 2], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 27 [document.documentElement, 2], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 27 [document.documentElement, 2], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 27 [document.documentElement, 2], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 27 [document.documentElement, 2], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 27 [document.documentElement, 2], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 27 [document.documentElement, 2], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 27 [document.documentElement, 2], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 27 [document.documentElement, 2], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 27 [document.documentElement, 2], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 27 [document.documentElement, 2], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 27 [document.documentElement, 2], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 27 [document.documentElement, 2], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 27 [document.documentElement, 2], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 27 [document.documentElement, 2], range 49 [document, 1, document, 2]
+PASS Point 27 [document.documentElement, 2], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 27 [document.documentElement, 2], range 51 [paras[3], 1, comment, 8]
+PASS Point 27 [document.documentElement, 2], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 27 [document.documentElement, 2], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 27 [document.documentElement, 2], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 27 [document.documentElement, 2], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 27 [document.documentElement, 2], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 27 [document.documentElement, 2], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 27 [document.documentElement, 2], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 27 [document.documentElement, 2], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 27 [document.documentElement, 2], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 28 [document.documentElement, 7], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 28 [document.documentElement, 7], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 28 [document.documentElement, 7], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 28 [document.documentElement, 7], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 28 [document.documentElement, 7], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 28 [document.documentElement, 7], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 28 [document.documentElement, 7], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] IndexSizeError: DOM Exception 1
+FAIL Point 28 [document.documentElement, 7], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] IndexSizeError: DOM Exception 1
+PASS Point 28 [document.documentElement, 7], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 28 [document.documentElement, 7], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 28 [document.documentElement, 7], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 28 [document.documentElement, 7], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 28 [document.documentElement, 7], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 28 [document.documentElement, 7], range 13 [document.head, 1, document.head, 1]
+PASS Point 28 [document.documentElement, 7], range 14 [document.body, 4, document.body, 5]
+PASS Point 28 [document.documentElement, 7], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 28 [document.documentElement, 7], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 28 [document.documentElement, 7], range 17 [detachedPara1, 0, detachedPara1, 1] IndexSizeError: DOM Exception 1
+PASS Point 28 [document.documentElement, 7], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 28 [document.documentElement, 7], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 28 [document.documentElement, 7], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 28 [document.documentElement, 7], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 28 [document.documentElement, 7], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 28 [document.documentElement, 7], range 23 [document, 0, document, 1]
+PASS Point 28 [document.documentElement, 7], range 24 [document, 0, document, 2]
+PASS Point 28 [document.documentElement, 7], range 25 [comment, 2, comment, 3]
+PASS Point 28 [document.documentElement, 7], range 26 [testDiv, 0, comment, 5]
+PASS Point 28 [document.documentElement, 7], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 28 [document.documentElement, 7], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 28 [document.documentElement, 7], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 28 [document.documentElement, 7], range 30 [detachedTextNode, 0, detachedTextNode, 8] IndexSizeError: DOM Exception 1
+PASS Point 28 [document.documentElement, 7], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 28 [document.documentElement, 7], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 28 [document.documentElement, 7], range 33 [detachedComment, 3, detachedComment, 4] IndexSizeError: DOM Exception 1
+PASS Point 28 [document.documentElement, 7], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 28 [document.documentElement, 7], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 28 [document.documentElement, 7], range 36 [docfrag, 0, docfrag, 0] IndexSizeError: DOM Exception 1
+PASS Point 28 [document.documentElement, 7], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 28 [document.documentElement, 7], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 28 [document.documentElement, 7], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 28 [document.documentElement, 7], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] IndexSizeError: DOM Exception 1
+PASS Point 28 [document.documentElement, 7], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 28 [document.documentElement, 7], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 28 [document.documentElement, 7], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 28 [document.documentElement, 7], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 28 [document.documentElement, 7], range 45 [detachedPara1, 0, detachedPara1, 0] IndexSizeError: DOM Exception 1
+PASS Point 28 [document.documentElement, 7], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 28 [document.documentElement, 7], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 28 [document.documentElement, 7], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 28 [document.documentElement, 7], range 49 [document, 1, document, 2]
+PASS Point 28 [document.documentElement, 7], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 28 [document.documentElement, 7], range 51 [paras[3], 1, comment, 8]
+PASS Point 28 [document.documentElement, 7], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 28 [document.documentElement, 7], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 28 [document.documentElement, 7], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 28 [document.documentElement, 7], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 28 [document.documentElement, 7], range 56 [detachedComment, 5, detachedComment, 5] IndexSizeError: DOM Exception 1
+PASS Point 28 [document.documentElement, 7], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 28 [document.documentElement, 7], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 28 [document.documentElement, 7], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 28 [document.documentElement, 7], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 29 [document.head, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 29 [document.head, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 29 [document.head, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 29 [document.head, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 29 [document.head, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 29 [document.head, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 29 [document.head, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 29 [document.head, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 29 [document.head, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 29 [document.head, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 29 [document.head, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 29 [document.head, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 29 [document.head, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 29 [document.head, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 29 [document.head, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 29 [document.head, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 29 [document.head, 1], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 29 [document.head, 1], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 29 [document.head, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 29 [document.head, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 29 [document.head, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 29 [document.head, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 29 [document.head, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 29 [document.head, 1], range 23 [document, 0, document, 1]
+PASS Point 29 [document.head, 1], range 24 [document, 0, document, 2]
+PASS Point 29 [document.head, 1], range 25 [comment, 2, comment, 3]
+PASS Point 29 [document.head, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 29 [document.head, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 29 [document.head, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 29 [document.head, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 29 [document.head, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 29 [document.head, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 29 [document.head, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 29 [document.head, 1], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 29 [document.head, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 29 [document.head, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 29 [document.head, 1], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 29 [document.head, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 29 [document.head, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 29 [document.head, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 29 [document.head, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 29 [document.head, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 29 [document.head, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 29 [document.head, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 29 [document.head, 1], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 29 [document.head, 1], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 29 [document.head, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 29 [document.head, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 29 [document.head, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 29 [document.head, 1], range 49 [document, 1, document, 2]
+PASS Point 29 [document.head, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 29 [document.head, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 29 [document.head, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 29 [document.head, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 29 [document.head, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 29 [document.head, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 29 [document.head, 1], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 29 [document.head, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 29 [document.head, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 29 [document.head, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 29 [document.head, 1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 30 [document.body, 3], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 30 [document.body, 3], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 30 [document.body, 3], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 30 [document.body, 3], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 30 [document.body, 3], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 30 [document.body, 3], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 30 [document.body, 3], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 30 [document.body, 3], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 30 [document.body, 3], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 30 [document.body, 3], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 30 [document.body, 3], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 30 [document.body, 3], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 30 [document.body, 3], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 30 [document.body, 3], range 13 [document.head, 1, document.head, 1]
+PASS Point 30 [document.body, 3], range 14 [document.body, 4, document.body, 5]
+PASS Point 30 [document.body, 3], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 30 [document.body, 3], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 30 [document.body, 3], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 30 [document.body, 3], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 30 [document.body, 3], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 30 [document.body, 3], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 30 [document.body, 3], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 30 [document.body, 3], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 30 [document.body, 3], range 23 [document, 0, document, 1]
+PASS Point 30 [document.body, 3], range 24 [document, 0, document, 2]
+PASS Point 30 [document.body, 3], range 25 [comment, 2, comment, 3]
+PASS Point 30 [document.body, 3], range 26 [testDiv, 0, comment, 5]
+PASS Point 30 [document.body, 3], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 30 [document.body, 3], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 30 [document.body, 3], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 30 [document.body, 3], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 30 [document.body, 3], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 30 [document.body, 3], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 30 [document.body, 3], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 30 [document.body, 3], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 30 [document.body, 3], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 30 [document.body, 3], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 30 [document.body, 3], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 30 [document.body, 3], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 30 [document.body, 3], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 30 [document.body, 3], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 30 [document.body, 3], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 30 [document.body, 3], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 30 [document.body, 3], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 30 [document.body, 3], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 30 [document.body, 3], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 30 [document.body, 3], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 30 [document.body, 3], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 30 [document.body, 3], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 30 [document.body, 3], range 49 [document, 1, document, 2]
+PASS Point 30 [document.body, 3], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 30 [document.body, 3], range 51 [paras[3], 1, comment, 8]
+PASS Point 30 [document.body, 3], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 30 [document.body, 3], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 30 [document.body, 3], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 30 [document.body, 3], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 30 [document.body, 3], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 30 [document.body, 3], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 30 [document.body, 3], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 30 [document.body, 3], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 30 [document.body, 3], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 31 [foreignDoc.documentElement, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 31 [foreignDoc.documentElement, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 31 [foreignDoc.documentElement, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 31 [foreignDoc.documentElement, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 31 [foreignDoc.documentElement, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 31 [foreignDoc.documentElement, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 31 [foreignDoc.documentElement, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 31 [foreignDoc.documentElement, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 31 [foreignDoc.documentElement, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 31 [foreignDoc.documentElement, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 31 [foreignDoc.documentElement, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 23 [document, 0, document, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 24 [document, 0, document, 2]
+PASS Point 31 [foreignDoc.documentElement, 0], range 25 [comment, 2, comment, 3]
+PASS Point 31 [foreignDoc.documentElement, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 31 [foreignDoc.documentElement, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 31 [foreignDoc.documentElement, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 31 [foreignDoc.documentElement, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+FAIL Point 31 [foreignDoc.documentElement, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 31 [foreignDoc.documentElement, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 31 [foreignDoc.documentElement, 0], range 33 [detachedComment, 3, detachedComment, 4]
+FAIL Point 31 [foreignDoc.documentElement, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] WrongDocumentError: DOM Exception 4
+PASS Point 31 [foreignDoc.documentElement, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 31 [foreignDoc.documentElement, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 31 [foreignDoc.documentElement, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 31 [foreignDoc.documentElement, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 31 [foreignDoc.documentElement, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 31 [foreignDoc.documentElement, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 49 [document, 1, document, 2]
+PASS Point 31 [foreignDoc.documentElement, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 31 [foreignDoc.documentElement, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 31 [foreignDoc.documentElement, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 31 [foreignDoc.documentElement, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+FAIL Point 31 [foreignDoc.documentElement, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 31 [foreignDoc.documentElement, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 31 [foreignDoc.documentElement, 0], range 56 [detachedComment, 5, detachedComment, 5]
+FAIL Point 31 [foreignDoc.documentElement, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] WrongDocumentError: DOM Exception 4
+FAIL Point 31 [foreignDoc.documentElement, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 31 [foreignDoc.documentElement, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 31 [foreignDoc.documentElement, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 32 [foreignDoc.documentElement, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 32 [foreignDoc.documentElement, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 32 [foreignDoc.documentElement, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 32 [foreignDoc.documentElement, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 32 [foreignDoc.documentElement, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 32 [foreignDoc.documentElement, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 32 [foreignDoc.documentElement, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 32 [foreignDoc.documentElement, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 32 [foreignDoc.documentElement, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 32 [foreignDoc.documentElement, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 32 [foreignDoc.documentElement, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 23 [document, 0, document, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 24 [document, 0, document, 2]
+PASS Point 32 [foreignDoc.documentElement, 1], range 25 [comment, 2, comment, 3]
+PASS Point 32 [foreignDoc.documentElement, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 32 [foreignDoc.documentElement, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 32 [foreignDoc.documentElement, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 32 [foreignDoc.documentElement, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+FAIL Point 32 [foreignDoc.documentElement, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 32 [foreignDoc.documentElement, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 32 [foreignDoc.documentElement, 1], range 33 [detachedComment, 3, detachedComment, 4]
+FAIL Point 32 [foreignDoc.documentElement, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] WrongDocumentError: DOM Exception 4
+PASS Point 32 [foreignDoc.documentElement, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 32 [foreignDoc.documentElement, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 32 [foreignDoc.documentElement, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 32 [foreignDoc.documentElement, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 32 [foreignDoc.documentElement, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 32 [foreignDoc.documentElement, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 49 [document, 1, document, 2]
+PASS Point 32 [foreignDoc.documentElement, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 32 [foreignDoc.documentElement, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 32 [foreignDoc.documentElement, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 32 [foreignDoc.documentElement, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+FAIL Point 32 [foreignDoc.documentElement, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 32 [foreignDoc.documentElement, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 32 [foreignDoc.documentElement, 1], range 56 [detachedComment, 5, detachedComment, 5]
+FAIL Point 32 [foreignDoc.documentElement, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] WrongDocumentError: DOM Exception 4
+FAIL Point 32 [foreignDoc.documentElement, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 32 [foreignDoc.documentElement, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 32 [foreignDoc.documentElement, 1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 33 [foreignDoc.head, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 33 [foreignDoc.head, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 33 [foreignDoc.head, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 33 [foreignDoc.head, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 33 [foreignDoc.head, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 33 [foreignDoc.head, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 33 [foreignDoc.head, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 33 [foreignDoc.head, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 33 [foreignDoc.head, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 33 [foreignDoc.head, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 33 [foreignDoc.head, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 33 [foreignDoc.head, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 33 [foreignDoc.head, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 33 [foreignDoc.head, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 33 [foreignDoc.head, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 33 [foreignDoc.head, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 33 [foreignDoc.head, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 33 [foreignDoc.head, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 33 [foreignDoc.head, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 33 [foreignDoc.head, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 33 [foreignDoc.head, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 33 [foreignDoc.head, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 33 [foreignDoc.head, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 33 [foreignDoc.head, 0], range 23 [document, 0, document, 1]
+PASS Point 33 [foreignDoc.head, 0], range 24 [document, 0, document, 2]
+PASS Point 33 [foreignDoc.head, 0], range 25 [comment, 2, comment, 3]
+PASS Point 33 [foreignDoc.head, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 33 [foreignDoc.head, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 33 [foreignDoc.head, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 33 [foreignDoc.head, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 33 [foreignDoc.head, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+FAIL Point 33 [foreignDoc.head, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 33 [foreignDoc.head, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 33 [foreignDoc.head, 0], range 33 [detachedComment, 3, detachedComment, 4]
+FAIL Point 33 [foreignDoc.head, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] WrongDocumentError: DOM Exception 4
+PASS Point 33 [foreignDoc.head, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 33 [foreignDoc.head, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 33 [foreignDoc.head, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 33 [foreignDoc.head, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 33 [foreignDoc.head, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 33 [foreignDoc.head, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 33 [foreignDoc.head, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 33 [foreignDoc.head, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 33 [foreignDoc.head, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 33 [foreignDoc.head, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 33 [foreignDoc.head, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 33 [foreignDoc.head, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 33 [foreignDoc.head, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 33 [foreignDoc.head, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 33 [foreignDoc.head, 0], range 49 [document, 1, document, 2]
+PASS Point 33 [foreignDoc.head, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 33 [foreignDoc.head, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 33 [foreignDoc.head, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 33 [foreignDoc.head, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+FAIL Point 33 [foreignDoc.head, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 33 [foreignDoc.head, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 33 [foreignDoc.head, 0], range 56 [detachedComment, 5, detachedComment, 5]
+FAIL Point 33 [foreignDoc.head, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] WrongDocumentError: DOM Exception 4
+FAIL Point 33 [foreignDoc.head, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 33 [foreignDoc.head, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 33 [foreignDoc.head, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 34 [foreignDoc.body, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 34 [foreignDoc.body, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 34 [foreignDoc.body, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 34 [foreignDoc.body, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 34 [foreignDoc.body, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 34 [foreignDoc.body, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 34 [foreignDoc.body, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 34 [foreignDoc.body, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 34 [foreignDoc.body, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 34 [foreignDoc.body, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 34 [foreignDoc.body, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 34 [foreignDoc.body, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 34 [foreignDoc.body, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 34 [foreignDoc.body, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 34 [foreignDoc.body, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 34 [foreignDoc.body, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 34 [foreignDoc.body, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 34 [foreignDoc.body, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 34 [foreignDoc.body, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 34 [foreignDoc.body, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 34 [foreignDoc.body, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 34 [foreignDoc.body, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 34 [foreignDoc.body, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 34 [foreignDoc.body, 1], range 23 [document, 0, document, 1]
+PASS Point 34 [foreignDoc.body, 1], range 24 [document, 0, document, 2]
+PASS Point 34 [foreignDoc.body, 1], range 25 [comment, 2, comment, 3]
+PASS Point 34 [foreignDoc.body, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 34 [foreignDoc.body, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 34 [foreignDoc.body, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 34 [foreignDoc.body, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 34 [foreignDoc.body, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+FAIL Point 34 [foreignDoc.body, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 34 [foreignDoc.body, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 34 [foreignDoc.body, 1], range 33 [detachedComment, 3, detachedComment, 4]
+FAIL Point 34 [foreignDoc.body, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] WrongDocumentError: DOM Exception 4
+PASS Point 34 [foreignDoc.body, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 34 [foreignDoc.body, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 34 [foreignDoc.body, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 34 [foreignDoc.body, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 34 [foreignDoc.body, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 34 [foreignDoc.body, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 34 [foreignDoc.body, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 34 [foreignDoc.body, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 34 [foreignDoc.body, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 34 [foreignDoc.body, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 34 [foreignDoc.body, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 34 [foreignDoc.body, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 34 [foreignDoc.body, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 34 [foreignDoc.body, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 34 [foreignDoc.body, 1], range 49 [document, 1, document, 2]
+PASS Point 34 [foreignDoc.body, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 34 [foreignDoc.body, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 34 [foreignDoc.body, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 34 [foreignDoc.body, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+FAIL Point 34 [foreignDoc.body, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 34 [foreignDoc.body, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 34 [foreignDoc.body, 1], range 56 [detachedComment, 5, detachedComment, 5]
+FAIL Point 34 [foreignDoc.body, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] WrongDocumentError: DOM Exception 4
+FAIL Point 34 [foreignDoc.body, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 34 [foreignDoc.body, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 34 [foreignDoc.body, 1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 35 [paras[0], 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 35 [paras[0], 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 35 [paras[0], 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 35 [paras[0], 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 35 [paras[0], 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 35 [paras[0], 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 35 [paras[0], 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 35 [paras[0], 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 35 [paras[0], 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 35 [paras[0], 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 35 [paras[0], 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 35 [paras[0], 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 35 [paras[0], 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 35 [paras[0], 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 35 [paras[0], 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 35 [paras[0], 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 35 [paras[0], 0], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 35 [paras[0], 0], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 35 [paras[0], 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 35 [paras[0], 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 35 [paras[0], 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 35 [paras[0], 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 35 [paras[0], 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 35 [paras[0], 0], range 23 [document, 0, document, 1]
+PASS Point 35 [paras[0], 0], range 24 [document, 0, document, 2]
+PASS Point 35 [paras[0], 0], range 25 [comment, 2, comment, 3]
+PASS Point 35 [paras[0], 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 35 [paras[0], 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 35 [paras[0], 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 35 [paras[0], 0], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 35 [paras[0], 0], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 35 [paras[0], 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 35 [paras[0], 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 35 [paras[0], 0], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 35 [paras[0], 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 35 [paras[0], 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 35 [paras[0], 0], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 35 [paras[0], 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 35 [paras[0], 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 35 [paras[0], 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 35 [paras[0], 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 35 [paras[0], 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 35 [paras[0], 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 35 [paras[0], 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 35 [paras[0], 0], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 35 [paras[0], 0], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 35 [paras[0], 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 35 [paras[0], 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 35 [paras[0], 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 35 [paras[0], 0], range 49 [document, 1, document, 2]
+PASS Point 35 [paras[0], 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 35 [paras[0], 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 35 [paras[0], 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 35 [paras[0], 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 35 [paras[0], 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 35 [paras[0], 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 35 [paras[0], 0], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 35 [paras[0], 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 35 [paras[0], 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 35 [paras[0], 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 35 [paras[0], 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 36 [paras[0], 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 36 [paras[0], 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 36 [paras[0], 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 36 [paras[0], 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 36 [paras[0], 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 36 [paras[0], 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 36 [paras[0], 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 36 [paras[0], 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 36 [paras[0], 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 36 [paras[0], 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 36 [paras[0], 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 36 [paras[0], 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 36 [paras[0], 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 36 [paras[0], 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 36 [paras[0], 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 36 [paras[0], 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 36 [paras[0], 1], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 36 [paras[0], 1], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 36 [paras[0], 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 36 [paras[0], 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 36 [paras[0], 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 36 [paras[0], 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 36 [paras[0], 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 36 [paras[0], 1], range 23 [document, 0, document, 1]
+PASS Point 36 [paras[0], 1], range 24 [document, 0, document, 2]
+PASS Point 36 [paras[0], 1], range 25 [comment, 2, comment, 3]
+PASS Point 36 [paras[0], 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 36 [paras[0], 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 36 [paras[0], 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 36 [paras[0], 1], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 36 [paras[0], 1], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 36 [paras[0], 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 36 [paras[0], 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 36 [paras[0], 1], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 36 [paras[0], 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 36 [paras[0], 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 36 [paras[0], 1], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 36 [paras[0], 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 36 [paras[0], 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 36 [paras[0], 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 36 [paras[0], 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 36 [paras[0], 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 36 [paras[0], 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 36 [paras[0], 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 36 [paras[0], 1], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 36 [paras[0], 1], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 36 [paras[0], 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 36 [paras[0], 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 36 [paras[0], 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 36 [paras[0], 1], range 49 [document, 1, document, 2]
+PASS Point 36 [paras[0], 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 36 [paras[0], 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 36 [paras[0], 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 36 [paras[0], 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 36 [paras[0], 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 36 [paras[0], 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 36 [paras[0], 1], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 36 [paras[0], 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 36 [paras[0], 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 36 [paras[0], 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 36 [paras[0], 1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 37 [paras[0], 2], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 37 [paras[0], 2], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 37 [paras[0], 2], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 37 [paras[0], 2], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 37 [paras[0], 2], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 37 [paras[0], 2], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 37 [paras[0], 2], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] IndexSizeError: DOM Exception 1
+FAIL Point 37 [paras[0], 2], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] IndexSizeError: DOM Exception 1
+PASS Point 37 [paras[0], 2], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 37 [paras[0], 2], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 37 [paras[0], 2], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 37 [paras[0], 2], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 37 [paras[0], 2], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 37 [paras[0], 2], range 13 [document.head, 1, document.head, 1]
+PASS Point 37 [paras[0], 2], range 14 [document.body, 4, document.body, 5]
+PASS Point 37 [paras[0], 2], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 37 [paras[0], 2], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 37 [paras[0], 2], range 17 [detachedPara1, 0, detachedPara1, 1] IndexSizeError: DOM Exception 1
+PASS Point 37 [paras[0], 2], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 37 [paras[0], 2], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 37 [paras[0], 2], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 37 [paras[0], 2], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 37 [paras[0], 2], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 37 [paras[0], 2], range 23 [document, 0, document, 1]
+PASS Point 37 [paras[0], 2], range 24 [document, 0, document, 2]
+PASS Point 37 [paras[0], 2], range 25 [comment, 2, comment, 3]
+PASS Point 37 [paras[0], 2], range 26 [testDiv, 0, comment, 5]
+PASS Point 37 [paras[0], 2], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 37 [paras[0], 2], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 37 [paras[0], 2], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 37 [paras[0], 2], range 30 [detachedTextNode, 0, detachedTextNode, 8] IndexSizeError: DOM Exception 1
+PASS Point 37 [paras[0], 2], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 37 [paras[0], 2], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 37 [paras[0], 2], range 33 [detachedComment, 3, detachedComment, 4] IndexSizeError: DOM Exception 1
+PASS Point 37 [paras[0], 2], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 37 [paras[0], 2], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 37 [paras[0], 2], range 36 [docfrag, 0, docfrag, 0] IndexSizeError: DOM Exception 1
+PASS Point 37 [paras[0], 2], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 37 [paras[0], 2], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 37 [paras[0], 2], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 37 [paras[0], 2], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] IndexSizeError: DOM Exception 1
+PASS Point 37 [paras[0], 2], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 37 [paras[0], 2], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 37 [paras[0], 2], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 37 [paras[0], 2], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 37 [paras[0], 2], range 45 [detachedPara1, 0, detachedPara1, 0] IndexSizeError: DOM Exception 1
+PASS Point 37 [paras[0], 2], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 37 [paras[0], 2], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 37 [paras[0], 2], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 37 [paras[0], 2], range 49 [document, 1, document, 2]
+PASS Point 37 [paras[0], 2], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 37 [paras[0], 2], range 51 [paras[3], 1, comment, 8]
+PASS Point 37 [paras[0], 2], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 37 [paras[0], 2], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 37 [paras[0], 2], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 37 [paras[0], 2], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 37 [paras[0], 2], range 56 [detachedComment, 5, detachedComment, 5] IndexSizeError: DOM Exception 1
+PASS Point 37 [paras[0], 2], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 37 [paras[0], 2], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 37 [paras[0], 2], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 37 [paras[0], 2], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 38 [paras[1], 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 38 [paras[1], 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 38 [paras[1], 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 38 [paras[1], 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 38 [paras[1], 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 38 [paras[1], 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 38 [paras[1], 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 38 [paras[1], 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 38 [paras[1], 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 38 [paras[1], 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 38 [paras[1], 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 38 [paras[1], 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 38 [paras[1], 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 38 [paras[1], 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 38 [paras[1], 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 38 [paras[1], 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 38 [paras[1], 0], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 38 [paras[1], 0], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 38 [paras[1], 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 38 [paras[1], 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 38 [paras[1], 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 38 [paras[1], 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 38 [paras[1], 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 38 [paras[1], 0], range 23 [document, 0, document, 1]
+PASS Point 38 [paras[1], 0], range 24 [document, 0, document, 2]
+PASS Point 38 [paras[1], 0], range 25 [comment, 2, comment, 3]
+PASS Point 38 [paras[1], 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 38 [paras[1], 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 38 [paras[1], 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 38 [paras[1], 0], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 38 [paras[1], 0], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 38 [paras[1], 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 38 [paras[1], 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 38 [paras[1], 0], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 38 [paras[1], 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 38 [paras[1], 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 38 [paras[1], 0], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 38 [paras[1], 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 38 [paras[1], 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 38 [paras[1], 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 38 [paras[1], 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 38 [paras[1], 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 38 [paras[1], 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 38 [paras[1], 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 38 [paras[1], 0], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 38 [paras[1], 0], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 38 [paras[1], 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 38 [paras[1], 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 38 [paras[1], 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 38 [paras[1], 0], range 49 [document, 1, document, 2]
+PASS Point 38 [paras[1], 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 38 [paras[1], 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 38 [paras[1], 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 38 [paras[1], 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 38 [paras[1], 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 38 [paras[1], 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 38 [paras[1], 0], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 38 [paras[1], 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 38 [paras[1], 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 38 [paras[1], 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 38 [paras[1], 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 39 [paras[1], 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 39 [paras[1], 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 39 [paras[1], 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 39 [paras[1], 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 39 [paras[1], 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 39 [paras[1], 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 39 [paras[1], 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 39 [paras[1], 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 39 [paras[1], 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 39 [paras[1], 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 39 [paras[1], 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 39 [paras[1], 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 39 [paras[1], 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 39 [paras[1], 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 39 [paras[1], 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 39 [paras[1], 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 39 [paras[1], 1], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 39 [paras[1], 1], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 39 [paras[1], 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 39 [paras[1], 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 39 [paras[1], 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 39 [paras[1], 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 39 [paras[1], 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 39 [paras[1], 1], range 23 [document, 0, document, 1]
+PASS Point 39 [paras[1], 1], range 24 [document, 0, document, 2]
+PASS Point 39 [paras[1], 1], range 25 [comment, 2, comment, 3]
+PASS Point 39 [paras[1], 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 39 [paras[1], 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 39 [paras[1], 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 39 [paras[1], 1], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 39 [paras[1], 1], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 39 [paras[1], 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 39 [paras[1], 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 39 [paras[1], 1], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 39 [paras[1], 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 39 [paras[1], 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 39 [paras[1], 1], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 39 [paras[1], 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 39 [paras[1], 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 39 [paras[1], 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 39 [paras[1], 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 39 [paras[1], 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 39 [paras[1], 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 39 [paras[1], 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 39 [paras[1], 1], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 39 [paras[1], 1], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 39 [paras[1], 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 39 [paras[1], 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 39 [paras[1], 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 39 [paras[1], 1], range 49 [document, 1, document, 2]
+PASS Point 39 [paras[1], 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 39 [paras[1], 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 39 [paras[1], 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 39 [paras[1], 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 39 [paras[1], 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 39 [paras[1], 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 39 [paras[1], 1], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 39 [paras[1], 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 39 [paras[1], 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 39 [paras[1], 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 39 [paras[1], 1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 40 [paras[1], 2], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 40 [paras[1], 2], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 40 [paras[1], 2], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 40 [paras[1], 2], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 40 [paras[1], 2], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 40 [paras[1], 2], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 40 [paras[1], 2], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] IndexSizeError: DOM Exception 1
+FAIL Point 40 [paras[1], 2], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] IndexSizeError: DOM Exception 1
+PASS Point 40 [paras[1], 2], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 40 [paras[1], 2], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 40 [paras[1], 2], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 40 [paras[1], 2], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 40 [paras[1], 2], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 40 [paras[1], 2], range 13 [document.head, 1, document.head, 1]
+PASS Point 40 [paras[1], 2], range 14 [document.body, 4, document.body, 5]
+PASS Point 40 [paras[1], 2], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 40 [paras[1], 2], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 40 [paras[1], 2], range 17 [detachedPara1, 0, detachedPara1, 1] IndexSizeError: DOM Exception 1
+PASS Point 40 [paras[1], 2], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 40 [paras[1], 2], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 40 [paras[1], 2], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 40 [paras[1], 2], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 40 [paras[1], 2], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 40 [paras[1], 2], range 23 [document, 0, document, 1]
+PASS Point 40 [paras[1], 2], range 24 [document, 0, document, 2]
+PASS Point 40 [paras[1], 2], range 25 [comment, 2, comment, 3]
+PASS Point 40 [paras[1], 2], range 26 [testDiv, 0, comment, 5]
+PASS Point 40 [paras[1], 2], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 40 [paras[1], 2], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 40 [paras[1], 2], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 40 [paras[1], 2], range 30 [detachedTextNode, 0, detachedTextNode, 8] IndexSizeError: DOM Exception 1
+PASS Point 40 [paras[1], 2], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 40 [paras[1], 2], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 40 [paras[1], 2], range 33 [detachedComment, 3, detachedComment, 4] IndexSizeError: DOM Exception 1
+PASS Point 40 [paras[1], 2], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 40 [paras[1], 2], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 40 [paras[1], 2], range 36 [docfrag, 0, docfrag, 0] IndexSizeError: DOM Exception 1
+PASS Point 40 [paras[1], 2], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 40 [paras[1], 2], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 40 [paras[1], 2], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 40 [paras[1], 2], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] IndexSizeError: DOM Exception 1
+PASS Point 40 [paras[1], 2], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 40 [paras[1], 2], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 40 [paras[1], 2], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 40 [paras[1], 2], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 40 [paras[1], 2], range 45 [detachedPara1, 0, detachedPara1, 0] IndexSizeError: DOM Exception 1
+PASS Point 40 [paras[1], 2], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 40 [paras[1], 2], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 40 [paras[1], 2], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 40 [paras[1], 2], range 49 [document, 1, document, 2]
+PASS Point 40 [paras[1], 2], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 40 [paras[1], 2], range 51 [paras[3], 1, comment, 8]
+PASS Point 40 [paras[1], 2], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 40 [paras[1], 2], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 40 [paras[1], 2], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 40 [paras[1], 2], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 40 [paras[1], 2], range 56 [detachedComment, 5, detachedComment, 5] IndexSizeError: DOM Exception 1
+PASS Point 40 [paras[1], 2], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 40 [paras[1], 2], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 40 [paras[1], 2], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 40 [paras[1], 2], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 41 [detachedPara1, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 41 [detachedPara1, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 41 [detachedPara1, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 41 [detachedPara1, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 41 [detachedPara1, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 41 [detachedPara1, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 41 [detachedPara1, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 41 [detachedPara1, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 41 [detachedPara1, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 41 [detachedPara1, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 41 [detachedPara1, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 41 [detachedPara1, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 41 [detachedPara1, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 41 [detachedPara1, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 41 [detachedPara1, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 41 [detachedPara1, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 41 [detachedPara1, 0], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 41 [detachedPara1, 0], range 17 [detachedPara1, 0, detachedPara1, 1] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 41 [detachedPara1, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 41 [detachedPara1, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 41 [detachedPara1, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 41 [detachedPara1, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 41 [detachedPara1, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 41 [detachedPara1, 0], range 23 [document, 0, document, 1]
+PASS Point 41 [detachedPara1, 0], range 24 [document, 0, document, 2]
+PASS Point 41 [detachedPara1, 0], range 25 [comment, 2, comment, 3]
+PASS Point 41 [detachedPara1, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 41 [detachedPara1, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 41 [detachedPara1, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 41 [detachedPara1, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 41 [detachedPara1, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 41 [detachedPara1, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 41 [detachedPara1, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 41 [detachedPara1, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 41 [detachedPara1, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 41 [detachedPara1, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 41 [detachedPara1, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 41 [detachedPara1, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 41 [detachedPara1, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 41 [detachedPara1, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 41 [detachedPara1, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 41 [detachedPara1, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 41 [detachedPara1, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 41 [detachedPara1, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 41 [detachedPara1, 0], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 41 [detachedPara1, 0], range 45 [detachedPara1, 0, detachedPara1, 0] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 41 [detachedPara1, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 41 [detachedPara1, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 41 [detachedPara1, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 41 [detachedPara1, 0], range 49 [document, 1, document, 2]
+PASS Point 41 [detachedPara1, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 41 [detachedPara1, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 41 [detachedPara1, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 41 [detachedPara1, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 41 [detachedPara1, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 41 [detachedPara1, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 41 [detachedPara1, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 41 [detachedPara1, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 41 [detachedPara1, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 41 [detachedPara1, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 41 [detachedPara1, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 42 [detachedPara1, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 42 [detachedPara1, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 42 [detachedPara1, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 42 [detachedPara1, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 42 [detachedPara1, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 42 [detachedPara1, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 42 [detachedPara1, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 42 [detachedPara1, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 42 [detachedPara1, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 42 [detachedPara1, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 42 [detachedPara1, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 42 [detachedPara1, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 42 [detachedPara1, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 42 [detachedPara1, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 42 [detachedPara1, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 42 [detachedPara1, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 42 [detachedPara1, 1], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 42 [detachedPara1, 1], range 17 [detachedPara1, 0, detachedPara1, 1] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 42 [detachedPara1, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 42 [detachedPara1, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 42 [detachedPara1, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 42 [detachedPara1, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 42 [detachedPara1, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 42 [detachedPara1, 1], range 23 [document, 0, document, 1]
+PASS Point 42 [detachedPara1, 1], range 24 [document, 0, document, 2]
+PASS Point 42 [detachedPara1, 1], range 25 [comment, 2, comment, 3]
+PASS Point 42 [detachedPara1, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 42 [detachedPara1, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 42 [detachedPara1, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 42 [detachedPara1, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 42 [detachedPara1, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 42 [detachedPara1, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 42 [detachedPara1, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 42 [detachedPara1, 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 42 [detachedPara1, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 42 [detachedPara1, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 42 [detachedPara1, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 42 [detachedPara1, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 42 [detachedPara1, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 42 [detachedPara1, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 42 [detachedPara1, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 42 [detachedPara1, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 42 [detachedPara1, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 42 [detachedPara1, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 42 [detachedPara1, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 42 [detachedPara1, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 42 [detachedPara1, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 42 [detachedPara1, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 42 [detachedPara1, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 42 [detachedPara1, 1], range 49 [document, 1, document, 2]
+PASS Point 42 [detachedPara1, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 42 [detachedPara1, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 42 [detachedPara1, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 42 [detachedPara1, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 42 [detachedPara1, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 42 [detachedPara1, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 42 [detachedPara1, 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 42 [detachedPara1, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 42 [detachedPara1, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 42 [detachedPara1, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 42 [detachedPara1, 1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 43 [testDiv, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 43 [testDiv, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 43 [testDiv, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 43 [testDiv, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 43 [testDiv, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 43 [testDiv, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 43 [testDiv, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 43 [testDiv, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 43 [testDiv, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 43 [testDiv, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 43 [testDiv, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 43 [testDiv, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 43 [testDiv, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 43 [testDiv, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 43 [testDiv, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 43 [testDiv, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 43 [testDiv, 0], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 43 [testDiv, 0], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 43 [testDiv, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 43 [testDiv, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 43 [testDiv, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 43 [testDiv, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 43 [testDiv, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 43 [testDiv, 0], range 23 [document, 0, document, 1]
+PASS Point 43 [testDiv, 0], range 24 [document, 0, document, 2]
+PASS Point 43 [testDiv, 0], range 25 [comment, 2, comment, 3]
+PASS Point 43 [testDiv, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 43 [testDiv, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 43 [testDiv, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 43 [testDiv, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 43 [testDiv, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 43 [testDiv, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 43 [testDiv, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 43 [testDiv, 0], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 43 [testDiv, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 43 [testDiv, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 43 [testDiv, 0], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 43 [testDiv, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 43 [testDiv, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 43 [testDiv, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 43 [testDiv, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 43 [testDiv, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 43 [testDiv, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 43 [testDiv, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 43 [testDiv, 0], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 43 [testDiv, 0], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 43 [testDiv, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 43 [testDiv, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 43 [testDiv, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 43 [testDiv, 0], range 49 [document, 1, document, 2]
+PASS Point 43 [testDiv, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 43 [testDiv, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 43 [testDiv, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 43 [testDiv, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 43 [testDiv, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 43 [testDiv, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 43 [testDiv, 0], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 43 [testDiv, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 43 [testDiv, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 43 [testDiv, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 43 [testDiv, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 44 [testDiv, 3], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 44 [testDiv, 3], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 44 [testDiv, 3], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 44 [testDiv, 3], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 44 [testDiv, 3], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 44 [testDiv, 3], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 44 [testDiv, 3], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 44 [testDiv, 3], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 44 [testDiv, 3], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 44 [testDiv, 3], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 44 [testDiv, 3], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 44 [testDiv, 3], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 44 [testDiv, 3], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 44 [testDiv, 3], range 13 [document.head, 1, document.head, 1]
+PASS Point 44 [testDiv, 3], range 14 [document.body, 4, document.body, 5]
+PASS Point 44 [testDiv, 3], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 44 [testDiv, 3], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 44 [testDiv, 3], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 44 [testDiv, 3], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 44 [testDiv, 3], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 44 [testDiv, 3], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 44 [testDiv, 3], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 44 [testDiv, 3], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 44 [testDiv, 3], range 23 [document, 0, document, 1]
+PASS Point 44 [testDiv, 3], range 24 [document, 0, document, 2]
+PASS Point 44 [testDiv, 3], range 25 [comment, 2, comment, 3]
+PASS Point 44 [testDiv, 3], range 26 [testDiv, 0, comment, 5]
+PASS Point 44 [testDiv, 3], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 44 [testDiv, 3], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 44 [testDiv, 3], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 44 [testDiv, 3], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 44 [testDiv, 3], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 44 [testDiv, 3], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 44 [testDiv, 3], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 44 [testDiv, 3], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 44 [testDiv, 3], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 44 [testDiv, 3], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 44 [testDiv, 3], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 44 [testDiv, 3], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 44 [testDiv, 3], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 44 [testDiv, 3], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 44 [testDiv, 3], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 44 [testDiv, 3], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 44 [testDiv, 3], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 44 [testDiv, 3], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 44 [testDiv, 3], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 44 [testDiv, 3], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 44 [testDiv, 3], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 44 [testDiv, 3], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 44 [testDiv, 3], range 49 [document, 1, document, 2]
+PASS Point 44 [testDiv, 3], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 44 [testDiv, 3], range 51 [paras[3], 1, comment, 8]
+PASS Point 44 [testDiv, 3], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 44 [testDiv, 3], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 44 [testDiv, 3], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 44 [testDiv, 3], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 44 [testDiv, 3], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 44 [testDiv, 3], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 44 [testDiv, 3], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 44 [testDiv, 3], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 44 [testDiv, 3], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 45 [document, -1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 45 [document, -1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 45 [document, -1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 45 [document, -1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 45 [document, -1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 45 [document, -1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 45 [document, -1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] IndexSizeError: DOM Exception 1
+FAIL Point 45 [document, -1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] IndexSizeError: DOM Exception 1
+PASS Point 45 [document, -1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 45 [document, -1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 45 [document, -1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 45 [document, -1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 45 [document, -1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 45 [document, -1], range 13 [document.head, 1, document.head, 1]
+PASS Point 45 [document, -1], range 14 [document.body, 4, document.body, 5]
+PASS Point 45 [document, -1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 45 [document, -1], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 45 [document, -1], range 17 [detachedPara1, 0, detachedPara1, 1] IndexSizeError: DOM Exception 1
+PASS Point 45 [document, -1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 45 [document, -1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 45 [document, -1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 45 [document, -1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 45 [document, -1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 45 [document, -1], range 23 [document, 0, document, 1]
+PASS Point 45 [document, -1], range 24 [document, 0, document, 2]
+PASS Point 45 [document, -1], range 25 [comment, 2, comment, 3]
+PASS Point 45 [document, -1], range 26 [testDiv, 0, comment, 5]
+PASS Point 45 [document, -1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 45 [document, -1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 45 [document, -1], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 45 [document, -1], range 30 [detachedTextNode, 0, detachedTextNode, 8] IndexSizeError: DOM Exception 1
+PASS Point 45 [document, -1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 45 [document, -1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 45 [document, -1], range 33 [detachedComment, 3, detachedComment, 4] IndexSizeError: DOM Exception 1
+PASS Point 45 [document, -1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 45 [document, -1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 45 [document, -1], range 36 [docfrag, 0, docfrag, 0] IndexSizeError: DOM Exception 1
+PASS Point 45 [document, -1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 45 [document, -1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 45 [document, -1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 45 [document, -1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] IndexSizeError: DOM Exception 1
+PASS Point 45 [document, -1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 45 [document, -1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 45 [document, -1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 45 [document, -1], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 45 [document, -1], range 45 [detachedPara1, 0, detachedPara1, 0] IndexSizeError: DOM Exception 1
+PASS Point 45 [document, -1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 45 [document, -1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 45 [document, -1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 45 [document, -1], range 49 [document, 1, document, 2]
+PASS Point 45 [document, -1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 45 [document, -1], range 51 [paras[3], 1, comment, 8]
+PASS Point 45 [document, -1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 45 [document, -1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 45 [document, -1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 45 [document, -1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 45 [document, -1], range 56 [detachedComment, 5, detachedComment, 5] IndexSizeError: DOM Exception 1
+PASS Point 45 [document, -1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 45 [document, -1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 45 [document, -1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 45 [document, -1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 46 [document, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 46 [document, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 46 [document, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 46 [document, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 46 [document, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 46 [document, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 46 [document, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 46 [document, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 46 [document, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 46 [document, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 46 [document, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 46 [document, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 46 [document, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 46 [document, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 46 [document, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 46 [document, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 46 [document, 0], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 46 [document, 0], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 46 [document, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 46 [document, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 46 [document, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 46 [document, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 46 [document, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 46 [document, 0], range 23 [document, 0, document, 1]
+PASS Point 46 [document, 0], range 24 [document, 0, document, 2]
+PASS Point 46 [document, 0], range 25 [comment, 2, comment, 3]
+PASS Point 46 [document, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 46 [document, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 46 [document, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 46 [document, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 46 [document, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 46 [document, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 46 [document, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 46 [document, 0], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 46 [document, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 46 [document, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 46 [document, 0], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 46 [document, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 46 [document, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 46 [document, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 46 [document, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 46 [document, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 46 [document, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 46 [document, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 46 [document, 0], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 46 [document, 0], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 46 [document, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 46 [document, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 46 [document, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 46 [document, 0], range 49 [document, 1, document, 2]
+PASS Point 46 [document, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 46 [document, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 46 [document, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 46 [document, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 46 [document, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 46 [document, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 46 [document, 0], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 46 [document, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 46 [document, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 46 [document, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 46 [document, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 47 [document, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 47 [document, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 47 [document, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 47 [document, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 47 [document, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 47 [document, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 47 [document, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 47 [document, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 47 [document, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 47 [document, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 47 [document, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 47 [document, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 47 [document, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 47 [document, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 47 [document, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 47 [document, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 47 [document, 1], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 47 [document, 1], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 47 [document, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 47 [document, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 47 [document, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 47 [document, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 47 [document, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 47 [document, 1], range 23 [document, 0, document, 1]
+PASS Point 47 [document, 1], range 24 [document, 0, document, 2]
+PASS Point 47 [document, 1], range 25 [comment, 2, comment, 3]
+PASS Point 47 [document, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 47 [document, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 47 [document, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 47 [document, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 47 [document, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 47 [document, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 47 [document, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 47 [document, 1], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 47 [document, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 47 [document, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 47 [document, 1], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 47 [document, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 47 [document, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 47 [document, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 47 [document, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 47 [document, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 47 [document, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 47 [document, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 47 [document, 1], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 47 [document, 1], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 47 [document, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 47 [document, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 47 [document, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 47 [document, 1], range 49 [document, 1, document, 2]
+PASS Point 47 [document, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 47 [document, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 47 [document, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 47 [document, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 47 [document, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 47 [document, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 47 [document, 1], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 47 [document, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 47 [document, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 47 [document, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 47 [document, 1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 48 [document, 2], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 48 [document, 2], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 48 [document, 2], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 48 [document, 2], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 48 [document, 2], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 48 [document, 2], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 48 [document, 2], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 48 [document, 2], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 48 [document, 2], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 48 [document, 2], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 48 [document, 2], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 48 [document, 2], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 48 [document, 2], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 48 [document, 2], range 13 [document.head, 1, document.head, 1]
+PASS Point 48 [document, 2], range 14 [document.body, 4, document.body, 5]
+PASS Point 48 [document, 2], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 48 [document, 2], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 48 [document, 2], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 48 [document, 2], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 48 [document, 2], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 48 [document, 2], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 48 [document, 2], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 48 [document, 2], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 48 [document, 2], range 23 [document, 0, document, 1]
+PASS Point 48 [document, 2], range 24 [document, 0, document, 2]
+PASS Point 48 [document, 2], range 25 [comment, 2, comment, 3]
+PASS Point 48 [document, 2], range 26 [testDiv, 0, comment, 5]
+PASS Point 48 [document, 2], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 48 [document, 2], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 48 [document, 2], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 48 [document, 2], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 48 [document, 2], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 48 [document, 2], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 48 [document, 2], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 48 [document, 2], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 48 [document, 2], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 48 [document, 2], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 48 [document, 2], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 48 [document, 2], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 48 [document, 2], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 48 [document, 2], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 48 [document, 2], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 48 [document, 2], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 48 [document, 2], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 48 [document, 2], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 48 [document, 2], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 48 [document, 2], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 48 [document, 2], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 48 [document, 2], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 48 [document, 2], range 49 [document, 1, document, 2]
+PASS Point 48 [document, 2], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 48 [document, 2], range 51 [paras[3], 1, comment, 8]
+PASS Point 48 [document, 2], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 48 [document, 2], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 48 [document, 2], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 48 [document, 2], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 48 [document, 2], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 48 [document, 2], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 48 [document, 2], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 48 [document, 2], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 48 [document, 2], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 49 [document, 3], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 49 [document, 3], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 49 [document, 3], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 49 [document, 3], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 49 [document, 3], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 49 [document, 3], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 49 [document, 3], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] IndexSizeError: DOM Exception 1
+FAIL Point 49 [document, 3], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] IndexSizeError: DOM Exception 1
+PASS Point 49 [document, 3], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 49 [document, 3], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 49 [document, 3], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 49 [document, 3], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 49 [document, 3], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 49 [document, 3], range 13 [document.head, 1, document.head, 1]
+PASS Point 49 [document, 3], range 14 [document.body, 4, document.body, 5]
+PASS Point 49 [document, 3], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 49 [document, 3], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 49 [document, 3], range 17 [detachedPara1, 0, detachedPara1, 1] IndexSizeError: DOM Exception 1
+PASS Point 49 [document, 3], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 49 [document, 3], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 49 [document, 3], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 49 [document, 3], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 49 [document, 3], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 49 [document, 3], range 23 [document, 0, document, 1]
+PASS Point 49 [document, 3], range 24 [document, 0, document, 2]
+PASS Point 49 [document, 3], range 25 [comment, 2, comment, 3]
+PASS Point 49 [document, 3], range 26 [testDiv, 0, comment, 5]
+PASS Point 49 [document, 3], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 49 [document, 3], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 49 [document, 3], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 49 [document, 3], range 30 [detachedTextNode, 0, detachedTextNode, 8] IndexSizeError: DOM Exception 1
+PASS Point 49 [document, 3], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 49 [document, 3], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 49 [document, 3], range 33 [detachedComment, 3, detachedComment, 4] IndexSizeError: DOM Exception 1
+PASS Point 49 [document, 3], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 49 [document, 3], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 49 [document, 3], range 36 [docfrag, 0, docfrag, 0] IndexSizeError: DOM Exception 1
+PASS Point 49 [document, 3], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 49 [document, 3], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 49 [document, 3], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 49 [document, 3], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] IndexSizeError: DOM Exception 1
+PASS Point 49 [document, 3], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 49 [document, 3], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 49 [document, 3], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 49 [document, 3], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 49 [document, 3], range 45 [detachedPara1, 0, detachedPara1, 0] IndexSizeError: DOM Exception 1
+PASS Point 49 [document, 3], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 49 [document, 3], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 49 [document, 3], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 49 [document, 3], range 49 [document, 1, document, 2]
+PASS Point 49 [document, 3], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 49 [document, 3], range 51 [paras[3], 1, comment, 8]
+PASS Point 49 [document, 3], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 49 [document, 3], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 49 [document, 3], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 49 [document, 3], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 49 [document, 3], range 56 [detachedComment, 5, detachedComment, 5] IndexSizeError: DOM Exception 1
+PASS Point 49 [document, 3], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 49 [document, 3], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 49 [document, 3], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 49 [document, 3], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 50 [comment, -1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 50 [comment, -1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 50 [comment, -1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 50 [comment, -1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 50 [comment, -1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 50 [comment, -1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 50 [comment, -1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] IndexSizeError: DOM Exception 1
+FAIL Point 50 [comment, -1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] IndexSizeError: DOM Exception 1
+PASS Point 50 [comment, -1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 50 [comment, -1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 50 [comment, -1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 50 [comment, -1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 50 [comment, -1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 50 [comment, -1], range 13 [document.head, 1, document.head, 1]
+PASS Point 50 [comment, -1], range 14 [document.body, 4, document.body, 5]
+PASS Point 50 [comment, -1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 50 [comment, -1], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 50 [comment, -1], range 17 [detachedPara1, 0, detachedPara1, 1] IndexSizeError: DOM Exception 1
+PASS Point 50 [comment, -1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 50 [comment, -1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 50 [comment, -1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 50 [comment, -1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 50 [comment, -1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 50 [comment, -1], range 23 [document, 0, document, 1]
+PASS Point 50 [comment, -1], range 24 [document, 0, document, 2]
+PASS Point 50 [comment, -1], range 25 [comment, 2, comment, 3]
+PASS Point 50 [comment, -1], range 26 [testDiv, 0, comment, 5]
+PASS Point 50 [comment, -1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 50 [comment, -1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 50 [comment, -1], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 50 [comment, -1], range 30 [detachedTextNode, 0, detachedTextNode, 8] IndexSizeError: DOM Exception 1
+PASS Point 50 [comment, -1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 50 [comment, -1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 50 [comment, -1], range 33 [detachedComment, 3, detachedComment, 4] IndexSizeError: DOM Exception 1
+PASS Point 50 [comment, -1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 50 [comment, -1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 50 [comment, -1], range 36 [docfrag, 0, docfrag, 0] IndexSizeError: DOM Exception 1
+PASS Point 50 [comment, -1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 50 [comment, -1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 50 [comment, -1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 50 [comment, -1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] IndexSizeError: DOM Exception 1
+PASS Point 50 [comment, -1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 50 [comment, -1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 50 [comment, -1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 50 [comment, -1], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 50 [comment, -1], range 45 [detachedPara1, 0, detachedPara1, 0] IndexSizeError: DOM Exception 1
+PASS Point 50 [comment, -1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 50 [comment, -1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 50 [comment, -1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 50 [comment, -1], range 49 [document, 1, document, 2]
+PASS Point 50 [comment, -1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 50 [comment, -1], range 51 [paras[3], 1, comment, 8]
+PASS Point 50 [comment, -1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 50 [comment, -1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 50 [comment, -1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 50 [comment, -1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 50 [comment, -1], range 56 [detachedComment, 5, detachedComment, 5] IndexSizeError: DOM Exception 1
+PASS Point 50 [comment, -1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 50 [comment, -1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 50 [comment, -1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 50 [comment, -1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 51 [comment, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 51 [comment, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 51 [comment, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 51 [comment, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 51 [comment, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 51 [comment, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 51 [comment, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 51 [comment, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 51 [comment, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 51 [comment, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 51 [comment, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 51 [comment, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 51 [comment, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 51 [comment, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 51 [comment, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 51 [comment, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 51 [comment, 0], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 51 [comment, 0], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 51 [comment, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 51 [comment, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 51 [comment, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 51 [comment, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 51 [comment, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 51 [comment, 0], range 23 [document, 0, document, 1]
+PASS Point 51 [comment, 0], range 24 [document, 0, document, 2]
+PASS Point 51 [comment, 0], range 25 [comment, 2, comment, 3]
+PASS Point 51 [comment, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 51 [comment, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 51 [comment, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 51 [comment, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 51 [comment, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 51 [comment, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 51 [comment, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 51 [comment, 0], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 51 [comment, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 51 [comment, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 51 [comment, 0], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 51 [comment, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 51 [comment, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 51 [comment, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 51 [comment, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 51 [comment, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 51 [comment, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 51 [comment, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 51 [comment, 0], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 51 [comment, 0], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 51 [comment, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 51 [comment, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 51 [comment, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 51 [comment, 0], range 49 [document, 1, document, 2]
+PASS Point 51 [comment, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 51 [comment, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 51 [comment, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 51 [comment, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 51 [comment, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 51 [comment, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 51 [comment, 0], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 51 [comment, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 51 [comment, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 51 [comment, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 51 [comment, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 52 [comment, 4], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 52 [comment, 4], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 52 [comment, 4], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 52 [comment, 4], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 52 [comment, 4], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 52 [comment, 4], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 52 [comment, 4], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 52 [comment, 4], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS Point 52 [comment, 4], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 52 [comment, 4], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 52 [comment, 4], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 52 [comment, 4], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 52 [comment, 4], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 52 [comment, 4], range 13 [document.head, 1, document.head, 1]
+PASS Point 52 [comment, 4], range 14 [document.body, 4, document.body, 5]
+PASS Point 52 [comment, 4], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 52 [comment, 4], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 52 [comment, 4], range 17 [detachedPara1, 0, detachedPara1, 1] WrongDocumentError: DOM Exception 4
+PASS Point 52 [comment, 4], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 52 [comment, 4], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 52 [comment, 4], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 52 [comment, 4], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 52 [comment, 4], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 52 [comment, 4], range 23 [document, 0, document, 1]
+PASS Point 52 [comment, 4], range 24 [document, 0, document, 2]
+PASS Point 52 [comment, 4], range 25 [comment, 2, comment, 3]
+PASS Point 52 [comment, 4], range 26 [testDiv, 0, comment, 5]
+PASS Point 52 [comment, 4], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 52 [comment, 4], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 52 [comment, 4], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 52 [comment, 4], range 30 [detachedTextNode, 0, detachedTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 52 [comment, 4], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 52 [comment, 4], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 52 [comment, 4], range 33 [detachedComment, 3, detachedComment, 4] WrongDocumentError: DOM Exception 4
+PASS Point 52 [comment, 4], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 52 [comment, 4], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 52 [comment, 4], range 36 [docfrag, 0, docfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 52 [comment, 4], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 52 [comment, 4], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 52 [comment, 4], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 52 [comment, 4], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+PASS Point 52 [comment, 4], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 52 [comment, 4], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 52 [comment, 4], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 52 [comment, 4], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 52 [comment, 4], range 45 [detachedPara1, 0, detachedPara1, 0] WrongDocumentError: DOM Exception 4
+PASS Point 52 [comment, 4], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 52 [comment, 4], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 52 [comment, 4], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 52 [comment, 4], range 49 [document, 1, document, 2]
+PASS Point 52 [comment, 4], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 52 [comment, 4], range 51 [paras[3], 1, comment, 8]
+PASS Point 52 [comment, 4], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 52 [comment, 4], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 52 [comment, 4], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 52 [comment, 4], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 52 [comment, 4], range 56 [detachedComment, 5, detachedComment, 5] WrongDocumentError: DOM Exception 4
+PASS Point 52 [comment, 4], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 52 [comment, 4], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 52 [comment, 4], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 52 [comment, 4], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 53 [comment, 96], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 53 [comment, 96], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 53 [comment, 96], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 53 [comment, 96], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 53 [comment, 96], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 53 [comment, 96], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+FAIL Point 53 [comment, 96], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] IndexSizeError: DOM Exception 1
+FAIL Point 53 [comment, 96], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] IndexSizeError: DOM Exception 1
+PASS Point 53 [comment, 96], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 53 [comment, 96], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 53 [comment, 96], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 53 [comment, 96], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 53 [comment, 96], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 53 [comment, 96], range 13 [document.head, 1, document.head, 1]
+PASS Point 53 [comment, 96], range 14 [document.body, 4, document.body, 5]
+PASS Point 53 [comment, 96], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 53 [comment, 96], range 16 [paras[0], 0, paras[0], 1]
+FAIL Point 53 [comment, 96], range 17 [detachedPara1, 0, detachedPara1, 1] IndexSizeError: DOM Exception 1
+PASS Point 53 [comment, 96], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 53 [comment, 96], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 53 [comment, 96], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 53 [comment, 96], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 53 [comment, 96], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 53 [comment, 96], range 23 [document, 0, document, 1]
+PASS Point 53 [comment, 96], range 24 [document, 0, document, 2]
+PASS Point 53 [comment, 96], range 25 [comment, 2, comment, 3]
+PASS Point 53 [comment, 96], range 26 [testDiv, 0, comment, 5]
+PASS Point 53 [comment, 96], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 53 [comment, 96], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 53 [comment, 96], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 53 [comment, 96], range 30 [detachedTextNode, 0, detachedTextNode, 8] IndexSizeError: DOM Exception 1
+PASS Point 53 [comment, 96], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 53 [comment, 96], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 53 [comment, 96], range 33 [detachedComment, 3, detachedComment, 4] IndexSizeError: DOM Exception 1
+PASS Point 53 [comment, 96], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 53 [comment, 96], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 53 [comment, 96], range 36 [docfrag, 0, docfrag, 0] IndexSizeError: DOM Exception 1
+PASS Point 53 [comment, 96], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 53 [comment, 96], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 53 [comment, 96], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+FAIL Point 53 [comment, 96], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] IndexSizeError: DOM Exception 1
+PASS Point 53 [comment, 96], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 53 [comment, 96], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 53 [comment, 96], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 53 [comment, 96], range 44 [paras[0], 0, paras[0], 0]
+FAIL Point 53 [comment, 96], range 45 [detachedPara1, 0, detachedPara1, 0] IndexSizeError: DOM Exception 1
+PASS Point 53 [comment, 96], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 53 [comment, 96], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 53 [comment, 96], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 53 [comment, 96], range 49 [document, 1, document, 2]
+PASS Point 53 [comment, 96], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 53 [comment, 96], range 51 [paras[3], 1, comment, 8]
+PASS Point 53 [comment, 96], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 53 [comment, 96], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 53 [comment, 96], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 53 [comment, 96], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 53 [comment, 96], range 56 [detachedComment, 5, detachedComment, 5] IndexSizeError: DOM Exception 1
+PASS Point 53 [comment, 96], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 53 [comment, 96], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 53 [comment, 96], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 53 [comment, 96], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 54 [foreignDoc, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 54 [foreignDoc, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 54 [foreignDoc, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 54 [foreignDoc, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 54 [foreignDoc, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 54 [foreignDoc, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 54 [foreignDoc, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 54 [foreignDoc, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 54 [foreignDoc, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 54 [foreignDoc, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 54 [foreignDoc, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 54 [foreignDoc, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 54 [foreignDoc, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 54 [foreignDoc, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 54 [foreignDoc, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 54 [foreignDoc, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 54 [foreignDoc, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 54 [foreignDoc, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 54 [foreignDoc, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 54 [foreignDoc, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 54 [foreignDoc, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 54 [foreignDoc, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 54 [foreignDoc, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 54 [foreignDoc, 0], range 23 [document, 0, document, 1]
+PASS Point 54 [foreignDoc, 0], range 24 [document, 0, document, 2]
+PASS Point 54 [foreignDoc, 0], range 25 [comment, 2, comment, 3]
+PASS Point 54 [foreignDoc, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 54 [foreignDoc, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 54 [foreignDoc, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 54 [foreignDoc, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 54 [foreignDoc, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+FAIL Point 54 [foreignDoc, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 54 [foreignDoc, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 54 [foreignDoc, 0], range 33 [detachedComment, 3, detachedComment, 4]
+FAIL Point 54 [foreignDoc, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] WrongDocumentError: DOM Exception 4
+PASS Point 54 [foreignDoc, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 54 [foreignDoc, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 54 [foreignDoc, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 54 [foreignDoc, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 54 [foreignDoc, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 54 [foreignDoc, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 54 [foreignDoc, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 54 [foreignDoc, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 54 [foreignDoc, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 54 [foreignDoc, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 54 [foreignDoc, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 54 [foreignDoc, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 54 [foreignDoc, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 54 [foreignDoc, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 54 [foreignDoc, 0], range 49 [document, 1, document, 2]
+PASS Point 54 [foreignDoc, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 54 [foreignDoc, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 54 [foreignDoc, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 54 [foreignDoc, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+FAIL Point 54 [foreignDoc, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 54 [foreignDoc, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 54 [foreignDoc, 0], range 56 [detachedComment, 5, detachedComment, 5]
+FAIL Point 54 [foreignDoc, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] WrongDocumentError: DOM Exception 4
+FAIL Point 54 [foreignDoc, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 54 [foreignDoc, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 54 [foreignDoc, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 55 [foreignDoc, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 55 [foreignDoc, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 55 [foreignDoc, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 55 [foreignDoc, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 55 [foreignDoc, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 55 [foreignDoc, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 55 [foreignDoc, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 55 [foreignDoc, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 55 [foreignDoc, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 55 [foreignDoc, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 55 [foreignDoc, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 55 [foreignDoc, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 55 [foreignDoc, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 55 [foreignDoc, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 55 [foreignDoc, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 55 [foreignDoc, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 55 [foreignDoc, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 55 [foreignDoc, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 55 [foreignDoc, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 55 [foreignDoc, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 55 [foreignDoc, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 55 [foreignDoc, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 55 [foreignDoc, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 55 [foreignDoc, 1], range 23 [document, 0, document, 1]
+PASS Point 55 [foreignDoc, 1], range 24 [document, 0, document, 2]
+PASS Point 55 [foreignDoc, 1], range 25 [comment, 2, comment, 3]
+PASS Point 55 [foreignDoc, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 55 [foreignDoc, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 55 [foreignDoc, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 55 [foreignDoc, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 55 [foreignDoc, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+FAIL Point 55 [foreignDoc, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 55 [foreignDoc, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 55 [foreignDoc, 1], range 33 [detachedComment, 3, detachedComment, 4]
+FAIL Point 55 [foreignDoc, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] WrongDocumentError: DOM Exception 4
+PASS Point 55 [foreignDoc, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 55 [foreignDoc, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 55 [foreignDoc, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 55 [foreignDoc, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 55 [foreignDoc, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 55 [foreignDoc, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 55 [foreignDoc, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 55 [foreignDoc, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 55 [foreignDoc, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 55 [foreignDoc, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 55 [foreignDoc, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 55 [foreignDoc, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 55 [foreignDoc, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 55 [foreignDoc, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 55 [foreignDoc, 1], range 49 [document, 1, document, 2]
+PASS Point 55 [foreignDoc, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 55 [foreignDoc, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 55 [foreignDoc, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 55 [foreignDoc, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+FAIL Point 55 [foreignDoc, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 55 [foreignDoc, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 55 [foreignDoc, 1], range 56 [detachedComment, 5, detachedComment, 5]
+FAIL Point 55 [foreignDoc, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] WrongDocumentError: DOM Exception 4
+FAIL Point 55 [foreignDoc, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 55 [foreignDoc, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 55 [foreignDoc, 1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 56 [foreignComment, 2], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 56 [foreignComment, 2], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 56 [foreignComment, 2], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 56 [foreignComment, 2], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 56 [foreignComment, 2], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 56 [foreignComment, 2], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 56 [foreignComment, 2], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 56 [foreignComment, 2], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 56 [foreignComment, 2], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 56 [foreignComment, 2], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 56 [foreignComment, 2], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 56 [foreignComment, 2], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 56 [foreignComment, 2], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 56 [foreignComment, 2], range 13 [document.head, 1, document.head, 1]
+PASS Point 56 [foreignComment, 2], range 14 [document.body, 4, document.body, 5]
+PASS Point 56 [foreignComment, 2], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 56 [foreignComment, 2], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 56 [foreignComment, 2], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 56 [foreignComment, 2], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 56 [foreignComment, 2], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 56 [foreignComment, 2], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 56 [foreignComment, 2], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 56 [foreignComment, 2], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 56 [foreignComment, 2], range 23 [document, 0, document, 1]
+PASS Point 56 [foreignComment, 2], range 24 [document, 0, document, 2]
+PASS Point 56 [foreignComment, 2], range 25 [comment, 2, comment, 3]
+PASS Point 56 [foreignComment, 2], range 26 [testDiv, 0, comment, 5]
+PASS Point 56 [foreignComment, 2], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 56 [foreignComment, 2], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 56 [foreignComment, 2], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 56 [foreignComment, 2], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+FAIL Point 56 [foreignComment, 2], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 56 [foreignComment, 2], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 56 [foreignComment, 2], range 33 [detachedComment, 3, detachedComment, 4]
+FAIL Point 56 [foreignComment, 2], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] WrongDocumentError: DOM Exception 4
+PASS Point 56 [foreignComment, 2], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 56 [foreignComment, 2], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 56 [foreignComment, 2], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 56 [foreignComment, 2], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 56 [foreignComment, 2], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 56 [foreignComment, 2], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 56 [foreignComment, 2], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 56 [foreignComment, 2], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 56 [foreignComment, 2], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 56 [foreignComment, 2], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 56 [foreignComment, 2], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 56 [foreignComment, 2], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 56 [foreignComment, 2], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 56 [foreignComment, 2], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 56 [foreignComment, 2], range 49 [document, 1, document, 2]
+PASS Point 56 [foreignComment, 2], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 56 [foreignComment, 2], range 51 [paras[3], 1, comment, 8]
+PASS Point 56 [foreignComment, 2], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 56 [foreignComment, 2], range 53 [xmlDoc, 0, xmlDoc, 0]
+FAIL Point 56 [foreignComment, 2], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 56 [foreignComment, 2], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 56 [foreignComment, 2], range 56 [detachedComment, 5, detachedComment, 5]
+FAIL Point 56 [foreignComment, 2], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] WrongDocumentError: DOM Exception 4
+FAIL Point 56 [foreignComment, 2], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 56 [foreignComment, 2], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 56 [foreignComment, 2], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 57 [foreignTextNode, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 57 [foreignTextNode, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 57 [foreignTextNode, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 57 [foreignTextNode, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 57 [foreignTextNode, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 57 [foreignTextNode, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 57 [foreignTextNode, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 57 [foreignTextNode, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 57 [foreignTextNode, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 57 [foreignTextNode, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 57 [foreignTextNode, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 57 [foreignTextNode, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 57 [foreignTextNode, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 57 [foreignTextNode, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 57 [foreignTextNode, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 57 [foreignTextNode, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 57 [foreignTextNode, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 57 [foreignTextNode, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 57 [foreignTextNode, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 57 [foreignTextNode, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 57 [foreignTextNode, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 57 [foreignTextNode, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 57 [foreignTextNode, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 57 [foreignTextNode, 0], range 23 [document, 0, document, 1]
+PASS Point 57 [foreignTextNode, 0], range 24 [document, 0, document, 2]
+PASS Point 57 [foreignTextNode, 0], range 25 [comment, 2, comment, 3]
+PASS Point 57 [foreignTextNode, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 57 [foreignTextNode, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 57 [foreignTextNode, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 57 [foreignTextNode, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 57 [foreignTextNode, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+FAIL Point 57 [foreignTextNode, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 57 [foreignTextNode, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 57 [foreignTextNode, 0], range 33 [detachedComment, 3, detachedComment, 4]
+FAIL Point 57 [foreignTextNode, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] WrongDocumentError: DOM Exception 4
+PASS Point 57 [foreignTextNode, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 57 [foreignTextNode, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 57 [foreignTextNode, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 57 [foreignTextNode, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 57 [foreignTextNode, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 57 [foreignTextNode, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 57 [foreignTextNode, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 57 [foreignTextNode, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 57 [foreignTextNode, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 57 [foreignTextNode, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 57 [foreignTextNode, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 57 [foreignTextNode, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 57 [foreignTextNode, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 57 [foreignTextNode, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 57 [foreignTextNode, 0], range 49 [document, 1, document, 2]
+PASS Point 57 [foreignTextNode, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 57 [foreignTextNode, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 57 [foreignTextNode, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 57 [foreignTextNode, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+FAIL Point 57 [foreignTextNode, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 57 [foreignTextNode, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 57 [foreignTextNode, 0], range 56 [detachedComment, 5, detachedComment, 5]
+FAIL Point 57 [foreignTextNode, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] WrongDocumentError: DOM Exception 4
+FAIL Point 57 [foreignTextNode, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 57 [foreignTextNode, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 57 [foreignTextNode, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 58 [foreignTextNode, 36], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 58 [foreignTextNode, 36], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 58 [foreignTextNode, 36], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 58 [foreignTextNode, 36], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 58 [foreignTextNode, 36], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 58 [foreignTextNode, 36], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 58 [foreignTextNode, 36], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 58 [foreignTextNode, 36], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 58 [foreignTextNode, 36], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 58 [foreignTextNode, 36], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 58 [foreignTextNode, 36], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 58 [foreignTextNode, 36], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 58 [foreignTextNode, 36], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 58 [foreignTextNode, 36], range 13 [document.head, 1, document.head, 1]
+PASS Point 58 [foreignTextNode, 36], range 14 [document.body, 4, document.body, 5]
+PASS Point 58 [foreignTextNode, 36], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 58 [foreignTextNode, 36], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 58 [foreignTextNode, 36], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 58 [foreignTextNode, 36], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 58 [foreignTextNode, 36], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 58 [foreignTextNode, 36], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 58 [foreignTextNode, 36], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 58 [foreignTextNode, 36], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 58 [foreignTextNode, 36], range 23 [document, 0, document, 1]
+PASS Point 58 [foreignTextNode, 36], range 24 [document, 0, document, 2]
+PASS Point 58 [foreignTextNode, 36], range 25 [comment, 2, comment, 3]
+PASS Point 58 [foreignTextNode, 36], range 26 [testDiv, 0, comment, 5]
+PASS Point 58 [foreignTextNode, 36], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 58 [foreignTextNode, 36], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 58 [foreignTextNode, 36], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 58 [foreignTextNode, 36], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+FAIL Point 58 [foreignTextNode, 36], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 58 [foreignTextNode, 36], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 58 [foreignTextNode, 36], range 33 [detachedComment, 3, detachedComment, 4]
+FAIL Point 58 [foreignTextNode, 36], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] WrongDocumentError: DOM Exception 4
+PASS Point 58 [foreignTextNode, 36], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 58 [foreignTextNode, 36], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 58 [foreignTextNode, 36], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 58 [foreignTextNode, 36], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 58 [foreignTextNode, 36], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 58 [foreignTextNode, 36], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 58 [foreignTextNode, 36], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 58 [foreignTextNode, 36], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 58 [foreignTextNode, 36], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 58 [foreignTextNode, 36], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 58 [foreignTextNode, 36], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 58 [foreignTextNode, 36], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 58 [foreignTextNode, 36], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 58 [foreignTextNode, 36], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 58 [foreignTextNode, 36], range 49 [document, 1, document, 2]
+PASS Point 58 [foreignTextNode, 36], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 58 [foreignTextNode, 36], range 51 [paras[3], 1, comment, 8]
+PASS Point 58 [foreignTextNode, 36], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 58 [foreignTextNode, 36], range 53 [xmlDoc, 0, xmlDoc, 0]
+FAIL Point 58 [foreignTextNode, 36], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 58 [foreignTextNode, 36], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 58 [foreignTextNode, 36], range 56 [detachedComment, 5, detachedComment, 5]
+FAIL Point 58 [foreignTextNode, 36], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] WrongDocumentError: DOM Exception 4
+FAIL Point 58 [foreignTextNode, 36], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] WrongDocumentError: DOM Exception 4
+PASS Point 58 [foreignTextNode, 36], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 58 [foreignTextNode, 36], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 59 [xmlDoc, -1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 59 [xmlDoc, -1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 59 [xmlDoc, -1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 59 [xmlDoc, -1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 59 [xmlDoc, -1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 59 [xmlDoc, -1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 59 [xmlDoc, -1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 59 [xmlDoc, -1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 59 [xmlDoc, -1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 59 [xmlDoc, -1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 59 [xmlDoc, -1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 59 [xmlDoc, -1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 59 [xmlDoc, -1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 59 [xmlDoc, -1], range 13 [document.head, 1, document.head, 1]
+PASS Point 59 [xmlDoc, -1], range 14 [document.body, 4, document.body, 5]
+PASS Point 59 [xmlDoc, -1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 59 [xmlDoc, -1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 59 [xmlDoc, -1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 59 [xmlDoc, -1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 59 [xmlDoc, -1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 59 [xmlDoc, -1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 59 [xmlDoc, -1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 59 [xmlDoc, -1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 59 [xmlDoc, -1], range 23 [document, 0, document, 1]
+PASS Point 59 [xmlDoc, -1], range 24 [document, 0, document, 2]
+PASS Point 59 [xmlDoc, -1], range 25 [comment, 2, comment, 3]
+PASS Point 59 [xmlDoc, -1], range 26 [testDiv, 0, comment, 5]
+PASS Point 59 [xmlDoc, -1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 59 [xmlDoc, -1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 59 [xmlDoc, -1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 59 [xmlDoc, -1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 59 [xmlDoc, -1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+FAIL Point 59 [xmlDoc, -1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] IndexSizeError: DOM Exception 1
+PASS Point 59 [xmlDoc, -1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 59 [xmlDoc, -1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+FAIL Point 59 [xmlDoc, -1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6] IndexSizeError: DOM Exception 1
+PASS Point 59 [xmlDoc, -1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 59 [xmlDoc, -1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 59 [xmlDoc, -1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 59 [xmlDoc, -1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 59 [xmlDoc, -1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 59 [xmlDoc, -1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 59 [xmlDoc, -1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 59 [xmlDoc, -1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 59 [xmlDoc, -1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 59 [xmlDoc, -1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 59 [xmlDoc, -1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 59 [xmlDoc, -1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 59 [xmlDoc, -1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 59 [xmlDoc, -1], range 49 [document, 1, document, 2]
+PASS Point 59 [xmlDoc, -1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 59 [xmlDoc, -1], range 51 [paras[3], 1, comment, 8]
+PASS Point 59 [xmlDoc, -1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 59 [xmlDoc, -1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 59 [xmlDoc, -1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+FAIL Point 59 [xmlDoc, -1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7] IndexSizeError: DOM Exception 1
+PASS Point 59 [xmlDoc, -1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 59 [xmlDoc, -1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 59 [xmlDoc, -1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+FAIL Point 59 [xmlDoc, -1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0] IndexSizeError: DOM Exception 1
+FAIL Point 59 [xmlDoc, -1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 60 [xmlDoc, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 60 [xmlDoc, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 60 [xmlDoc, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 60 [xmlDoc, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 60 [xmlDoc, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 60 [xmlDoc, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 60 [xmlDoc, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 60 [xmlDoc, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 60 [xmlDoc, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 60 [xmlDoc, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 60 [xmlDoc, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 60 [xmlDoc, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 60 [xmlDoc, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 60 [xmlDoc, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 60 [xmlDoc, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 60 [xmlDoc, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 60 [xmlDoc, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 60 [xmlDoc, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 60 [xmlDoc, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 60 [xmlDoc, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 60 [xmlDoc, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 60 [xmlDoc, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 60 [xmlDoc, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 60 [xmlDoc, 0], range 23 [document, 0, document, 1]
+PASS Point 60 [xmlDoc, 0], range 24 [document, 0, document, 2]
+PASS Point 60 [xmlDoc, 0], range 25 [comment, 2, comment, 3]
+PASS Point 60 [xmlDoc, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 60 [xmlDoc, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 60 [xmlDoc, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 60 [xmlDoc, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 60 [xmlDoc, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 60 [xmlDoc, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+FAIL Point 60 [xmlDoc, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 60 [xmlDoc, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 60 [xmlDoc, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+FAIL Point 60 [xmlDoc, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6] WrongDocumentError: DOM Exception 4
+PASS Point 60 [xmlDoc, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 60 [xmlDoc, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 60 [xmlDoc, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 60 [xmlDoc, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 60 [xmlDoc, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 60 [xmlDoc, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 60 [xmlDoc, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 60 [xmlDoc, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 60 [xmlDoc, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 60 [xmlDoc, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 60 [xmlDoc, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 60 [xmlDoc, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 60 [xmlDoc, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 60 [xmlDoc, 0], range 49 [document, 1, document, 2]
+PASS Point 60 [xmlDoc, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 60 [xmlDoc, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 60 [xmlDoc, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 60 [xmlDoc, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 60 [xmlDoc, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+FAIL Point 60 [xmlDoc, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 60 [xmlDoc, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 60 [xmlDoc, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 60 [xmlDoc, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+FAIL Point 60 [xmlDoc, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 60 [xmlDoc, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 61 [xmlDoc, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 61 [xmlDoc, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 61 [xmlDoc, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 61 [xmlDoc, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 61 [xmlDoc, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 61 [xmlDoc, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 61 [xmlDoc, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 61 [xmlDoc, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 61 [xmlDoc, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 61 [xmlDoc, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 61 [xmlDoc, 1], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 61 [xmlDoc, 1], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 61 [xmlDoc, 1], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 61 [xmlDoc, 1], range 13 [document.head, 1, document.head, 1]
+PASS Point 61 [xmlDoc, 1], range 14 [document.body, 4, document.body, 5]
+PASS Point 61 [xmlDoc, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 61 [xmlDoc, 1], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 61 [xmlDoc, 1], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 61 [xmlDoc, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 61 [xmlDoc, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 61 [xmlDoc, 1], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 61 [xmlDoc, 1], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 61 [xmlDoc, 1], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 61 [xmlDoc, 1], range 23 [document, 0, document, 1]
+PASS Point 61 [xmlDoc, 1], range 24 [document, 0, document, 2]
+PASS Point 61 [xmlDoc, 1], range 25 [comment, 2, comment, 3]
+PASS Point 61 [xmlDoc, 1], range 26 [testDiv, 0, comment, 5]
+PASS Point 61 [xmlDoc, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 61 [xmlDoc, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 61 [xmlDoc, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 61 [xmlDoc, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 61 [xmlDoc, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+FAIL Point 61 [xmlDoc, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 61 [xmlDoc, 1], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 61 [xmlDoc, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+FAIL Point 61 [xmlDoc, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6] WrongDocumentError: DOM Exception 4
+PASS Point 61 [xmlDoc, 1], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 61 [xmlDoc, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 61 [xmlDoc, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 61 [xmlDoc, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 61 [xmlDoc, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 61 [xmlDoc, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 61 [xmlDoc, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 61 [xmlDoc, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 61 [xmlDoc, 1], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 61 [xmlDoc, 1], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 61 [xmlDoc, 1], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 61 [xmlDoc, 1], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 61 [xmlDoc, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 61 [xmlDoc, 1], range 49 [document, 1, document, 2]
+PASS Point 61 [xmlDoc, 1], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 61 [xmlDoc, 1], range 51 [paras[3], 1, comment, 8]
+PASS Point 61 [xmlDoc, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 61 [xmlDoc, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 61 [xmlDoc, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+FAIL Point 61 [xmlDoc, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 61 [xmlDoc, 1], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 61 [xmlDoc, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 61 [xmlDoc, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+FAIL Point 61 [xmlDoc, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 61 [xmlDoc, 1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 62 [xmlDoc, 5], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 62 [xmlDoc, 5], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 62 [xmlDoc, 5], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 62 [xmlDoc, 5], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 62 [xmlDoc, 5], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 62 [xmlDoc, 5], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 62 [xmlDoc, 5], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 62 [xmlDoc, 5], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 62 [xmlDoc, 5], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 62 [xmlDoc, 5], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 62 [xmlDoc, 5], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 62 [xmlDoc, 5], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 62 [xmlDoc, 5], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 62 [xmlDoc, 5], range 13 [document.head, 1, document.head, 1]
+PASS Point 62 [xmlDoc, 5], range 14 [document.body, 4, document.body, 5]
+PASS Point 62 [xmlDoc, 5], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 62 [xmlDoc, 5], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 62 [xmlDoc, 5], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 62 [xmlDoc, 5], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 62 [xmlDoc, 5], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 62 [xmlDoc, 5], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 62 [xmlDoc, 5], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 62 [xmlDoc, 5], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 62 [xmlDoc, 5], range 23 [document, 0, document, 1]
+PASS Point 62 [xmlDoc, 5], range 24 [document, 0, document, 2]
+PASS Point 62 [xmlDoc, 5], range 25 [comment, 2, comment, 3]
+PASS Point 62 [xmlDoc, 5], range 26 [testDiv, 0, comment, 5]
+PASS Point 62 [xmlDoc, 5], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 62 [xmlDoc, 5], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 62 [xmlDoc, 5], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 62 [xmlDoc, 5], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 62 [xmlDoc, 5], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+FAIL Point 62 [xmlDoc, 5], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] IndexSizeError: DOM Exception 1
+PASS Point 62 [xmlDoc, 5], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 62 [xmlDoc, 5], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+FAIL Point 62 [xmlDoc, 5], range 35 [detachedXmlComment, 2, detachedXmlComment, 6] IndexSizeError: DOM Exception 1
+PASS Point 62 [xmlDoc, 5], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 62 [xmlDoc, 5], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 62 [xmlDoc, 5], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 62 [xmlDoc, 5], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 62 [xmlDoc, 5], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 62 [xmlDoc, 5], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 62 [xmlDoc, 5], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 62 [xmlDoc, 5], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 62 [xmlDoc, 5], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 62 [xmlDoc, 5], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 62 [xmlDoc, 5], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 62 [xmlDoc, 5], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 62 [xmlDoc, 5], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 62 [xmlDoc, 5], range 49 [document, 1, document, 2]
+PASS Point 62 [xmlDoc, 5], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 62 [xmlDoc, 5], range 51 [paras[3], 1, comment, 8]
+PASS Point 62 [xmlDoc, 5], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 62 [xmlDoc, 5], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 62 [xmlDoc, 5], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+FAIL Point 62 [xmlDoc, 5], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7] IndexSizeError: DOM Exception 1
+PASS Point 62 [xmlDoc, 5], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 62 [xmlDoc, 5], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 62 [xmlDoc, 5], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+FAIL Point 62 [xmlDoc, 5], range 59 [xmlDocfrag, 0, xmlDocfrag, 0] IndexSizeError: DOM Exception 1
+FAIL Point 62 [xmlDoc, 5], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 63 [xmlComment, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 63 [xmlComment, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 63 [xmlComment, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 63 [xmlComment, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 63 [xmlComment, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 63 [xmlComment, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 63 [xmlComment, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 63 [xmlComment, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 63 [xmlComment, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 63 [xmlComment, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 63 [xmlComment, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 63 [xmlComment, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 63 [xmlComment, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 63 [xmlComment, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 63 [xmlComment, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 63 [xmlComment, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 63 [xmlComment, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 63 [xmlComment, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 63 [xmlComment, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 63 [xmlComment, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 63 [xmlComment, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 63 [xmlComment, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 63 [xmlComment, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 63 [xmlComment, 0], range 23 [document, 0, document, 1]
+PASS Point 63 [xmlComment, 0], range 24 [document, 0, document, 2]
+PASS Point 63 [xmlComment, 0], range 25 [comment, 2, comment, 3]
+PASS Point 63 [xmlComment, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 63 [xmlComment, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 63 [xmlComment, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 63 [xmlComment, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 63 [xmlComment, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 63 [xmlComment, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+FAIL Point 63 [xmlComment, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 63 [xmlComment, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 63 [xmlComment, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+FAIL Point 63 [xmlComment, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6] WrongDocumentError: DOM Exception 4
+PASS Point 63 [xmlComment, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 63 [xmlComment, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 63 [xmlComment, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 63 [xmlComment, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 63 [xmlComment, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 63 [xmlComment, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 63 [xmlComment, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 63 [xmlComment, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 63 [xmlComment, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 63 [xmlComment, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 63 [xmlComment, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 63 [xmlComment, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 63 [xmlComment, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 63 [xmlComment, 0], range 49 [document, 1, document, 2]
+PASS Point 63 [xmlComment, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 63 [xmlComment, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 63 [xmlComment, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 63 [xmlComment, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 63 [xmlComment, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+FAIL Point 63 [xmlComment, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 63 [xmlComment, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 63 [xmlComment, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 63 [xmlComment, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+FAIL Point 63 [xmlComment, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 63 [xmlComment, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 64 [xmlComment, 4], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 64 [xmlComment, 4], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 64 [xmlComment, 4], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 64 [xmlComment, 4], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 64 [xmlComment, 4], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 64 [xmlComment, 4], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 64 [xmlComment, 4], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 64 [xmlComment, 4], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 64 [xmlComment, 4], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 64 [xmlComment, 4], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 64 [xmlComment, 4], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 64 [xmlComment, 4], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 64 [xmlComment, 4], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 64 [xmlComment, 4], range 13 [document.head, 1, document.head, 1]
+PASS Point 64 [xmlComment, 4], range 14 [document.body, 4, document.body, 5]
+PASS Point 64 [xmlComment, 4], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 64 [xmlComment, 4], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 64 [xmlComment, 4], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 64 [xmlComment, 4], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 64 [xmlComment, 4], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 64 [xmlComment, 4], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 64 [xmlComment, 4], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 64 [xmlComment, 4], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 64 [xmlComment, 4], range 23 [document, 0, document, 1]
+PASS Point 64 [xmlComment, 4], range 24 [document, 0, document, 2]
+PASS Point 64 [xmlComment, 4], range 25 [comment, 2, comment, 3]
+PASS Point 64 [xmlComment, 4], range 26 [testDiv, 0, comment, 5]
+PASS Point 64 [xmlComment, 4], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 64 [xmlComment, 4], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 64 [xmlComment, 4], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 64 [xmlComment, 4], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 64 [xmlComment, 4], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+FAIL Point 64 [xmlComment, 4], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 64 [xmlComment, 4], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 64 [xmlComment, 4], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+FAIL Point 64 [xmlComment, 4], range 35 [detachedXmlComment, 2, detachedXmlComment, 6] WrongDocumentError: DOM Exception 4
+PASS Point 64 [xmlComment, 4], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 64 [xmlComment, 4], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 64 [xmlComment, 4], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 64 [xmlComment, 4], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 64 [xmlComment, 4], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 64 [xmlComment, 4], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 64 [xmlComment, 4], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 64 [xmlComment, 4], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 64 [xmlComment, 4], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 64 [xmlComment, 4], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 64 [xmlComment, 4], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 64 [xmlComment, 4], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 64 [xmlComment, 4], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 64 [xmlComment, 4], range 49 [document, 1, document, 2]
+PASS Point 64 [xmlComment, 4], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 64 [xmlComment, 4], range 51 [paras[3], 1, comment, 8]
+PASS Point 64 [xmlComment, 4], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 64 [xmlComment, 4], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 64 [xmlComment, 4], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+FAIL Point 64 [xmlComment, 4], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 64 [xmlComment, 4], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 64 [xmlComment, 4], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 64 [xmlComment, 4], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+FAIL Point 64 [xmlComment, 4], range 59 [xmlDocfrag, 0, xmlDocfrag, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 64 [xmlComment, 4], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 65 [processingInstruction, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 65 [processingInstruction, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 65 [processingInstruction, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 65 [processingInstruction, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 65 [processingInstruction, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 65 [processingInstruction, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 65 [processingInstruction, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 65 [processingInstruction, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 65 [processingInstruction, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 65 [processingInstruction, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 65 [processingInstruction, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 65 [processingInstruction, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 65 [processingInstruction, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 65 [processingInstruction, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 65 [processingInstruction, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 65 [processingInstruction, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 65 [processingInstruction, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 65 [processingInstruction, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 65 [processingInstruction, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 65 [processingInstruction, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 65 [processingInstruction, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 65 [processingInstruction, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 65 [processingInstruction, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 65 [processingInstruction, 0], range 23 [document, 0, document, 1]
+PASS Point 65 [processingInstruction, 0], range 24 [document, 0, document, 2]
+PASS Point 65 [processingInstruction, 0], range 25 [comment, 2, comment, 3]
+PASS Point 65 [processingInstruction, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 65 [processingInstruction, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 65 [processingInstruction, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 65 [processingInstruction, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 65 [processingInstruction, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 65 [processingInstruction, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+FAIL Point 65 [processingInstruction, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 65 [processingInstruction, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 65 [processingInstruction, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+FAIL Point 65 [processingInstruction, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6] WrongDocumentError: DOM Exception 4
+PASS Point 65 [processingInstruction, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 65 [processingInstruction, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 65 [processingInstruction, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 65 [processingInstruction, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 65 [processingInstruction, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 65 [processingInstruction, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 65 [processingInstruction, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 65 [processingInstruction, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 65 [processingInstruction, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 65 [processingInstruction, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 65 [processingInstruction, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 65 [processingInstruction, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 65 [processingInstruction, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 65 [processingInstruction, 0], range 49 [document, 1, document, 2]
+PASS Point 65 [processingInstruction, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 65 [processingInstruction, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 65 [processingInstruction, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 65 [processingInstruction, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 65 [processingInstruction, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+FAIL Point 65 [processingInstruction, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 65 [processingInstruction, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 65 [processingInstruction, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 65 [processingInstruction, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+FAIL Point 65 [processingInstruction, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 65 [processingInstruction, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 66 [processingInstruction, 5], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 66 [processingInstruction, 5], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 66 [processingInstruction, 5], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 66 [processingInstruction, 5], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 66 [processingInstruction, 5], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 66 [processingInstruction, 5], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 66 [processingInstruction, 5], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 66 [processingInstruction, 5], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 66 [processingInstruction, 5], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 66 [processingInstruction, 5], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 66 [processingInstruction, 5], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 66 [processingInstruction, 5], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 66 [processingInstruction, 5], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 66 [processingInstruction, 5], range 13 [document.head, 1, document.head, 1]
+PASS Point 66 [processingInstruction, 5], range 14 [document.body, 4, document.body, 5]
+PASS Point 66 [processingInstruction, 5], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 66 [processingInstruction, 5], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 66 [processingInstruction, 5], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 66 [processingInstruction, 5], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 66 [processingInstruction, 5], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 66 [processingInstruction, 5], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 66 [processingInstruction, 5], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 66 [processingInstruction, 5], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 66 [processingInstruction, 5], range 23 [document, 0, document, 1]
+PASS Point 66 [processingInstruction, 5], range 24 [document, 0, document, 2]
+PASS Point 66 [processingInstruction, 5], range 25 [comment, 2, comment, 3]
+PASS Point 66 [processingInstruction, 5], range 26 [testDiv, 0, comment, 5]
+PASS Point 66 [processingInstruction, 5], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 66 [processingInstruction, 5], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 66 [processingInstruction, 5], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 66 [processingInstruction, 5], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 66 [processingInstruction, 5], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+FAIL Point 66 [processingInstruction, 5], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 66 [processingInstruction, 5], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 66 [processingInstruction, 5], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+FAIL Point 66 [processingInstruction, 5], range 35 [detachedXmlComment, 2, detachedXmlComment, 6] WrongDocumentError: DOM Exception 4
+PASS Point 66 [processingInstruction, 5], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 66 [processingInstruction, 5], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 66 [processingInstruction, 5], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 66 [processingInstruction, 5], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 66 [processingInstruction, 5], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 66 [processingInstruction, 5], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 66 [processingInstruction, 5], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 66 [processingInstruction, 5], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 66 [processingInstruction, 5], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 66 [processingInstruction, 5], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 66 [processingInstruction, 5], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 66 [processingInstruction, 5], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 66 [processingInstruction, 5], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 66 [processingInstruction, 5], range 49 [document, 1, document, 2]
+PASS Point 66 [processingInstruction, 5], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 66 [processingInstruction, 5], range 51 [paras[3], 1, comment, 8]
+PASS Point 66 [processingInstruction, 5], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 66 [processingInstruction, 5], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 66 [processingInstruction, 5], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+FAIL Point 66 [processingInstruction, 5], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 66 [processingInstruction, 5], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 66 [processingInstruction, 5], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 66 [processingInstruction, 5], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+FAIL Point 66 [processingInstruction, 5], range 59 [xmlDocfrag, 0, xmlDocfrag, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 66 [processingInstruction, 5], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 67 [processingInstruction, 9], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 67 [processingInstruction, 9], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 67 [processingInstruction, 9], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 67 [processingInstruction, 9], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 67 [processingInstruction, 9], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 67 [processingInstruction, 9], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 67 [processingInstruction, 9], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 67 [processingInstruction, 9], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 67 [processingInstruction, 9], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 67 [processingInstruction, 9], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 67 [processingInstruction, 9], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 67 [processingInstruction, 9], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 67 [processingInstruction, 9], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 67 [processingInstruction, 9], range 13 [document.head, 1, document.head, 1]
+PASS Point 67 [processingInstruction, 9], range 14 [document.body, 4, document.body, 5]
+PASS Point 67 [processingInstruction, 9], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 67 [processingInstruction, 9], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 67 [processingInstruction, 9], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 67 [processingInstruction, 9], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 67 [processingInstruction, 9], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 67 [processingInstruction, 9], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 67 [processingInstruction, 9], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 67 [processingInstruction, 9], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 67 [processingInstruction, 9], range 23 [document, 0, document, 1]
+PASS Point 67 [processingInstruction, 9], range 24 [document, 0, document, 2]
+PASS Point 67 [processingInstruction, 9], range 25 [comment, 2, comment, 3]
+PASS Point 67 [processingInstruction, 9], range 26 [testDiv, 0, comment, 5]
+PASS Point 67 [processingInstruction, 9], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 67 [processingInstruction, 9], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 67 [processingInstruction, 9], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 67 [processingInstruction, 9], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 67 [processingInstruction, 9], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+FAIL Point 67 [processingInstruction, 9], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] WrongDocumentError: DOM Exception 4
+PASS Point 67 [processingInstruction, 9], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 67 [processingInstruction, 9], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+FAIL Point 67 [processingInstruction, 9], range 35 [detachedXmlComment, 2, detachedXmlComment, 6] WrongDocumentError: DOM Exception 4
+PASS Point 67 [processingInstruction, 9], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 67 [processingInstruction, 9], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 67 [processingInstruction, 9], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 67 [processingInstruction, 9], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 67 [processingInstruction, 9], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 67 [processingInstruction, 9], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 67 [processingInstruction, 9], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 67 [processingInstruction, 9], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 67 [processingInstruction, 9], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 67 [processingInstruction, 9], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 67 [processingInstruction, 9], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 67 [processingInstruction, 9], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 67 [processingInstruction, 9], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 67 [processingInstruction, 9], range 49 [document, 1, document, 2]
+PASS Point 67 [processingInstruction, 9], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 67 [processingInstruction, 9], range 51 [paras[3], 1, comment, 8]
+PASS Point 67 [processingInstruction, 9], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 67 [processingInstruction, 9], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 67 [processingInstruction, 9], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+FAIL Point 67 [processingInstruction, 9], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7] WrongDocumentError: DOM Exception 4
+PASS Point 67 [processingInstruction, 9], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 67 [processingInstruction, 9], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 67 [processingInstruction, 9], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+FAIL Point 67 [processingInstruction, 9], range 59 [xmlDocfrag, 0, xmlDocfrag, 0] WrongDocumentError: DOM Exception 4
+FAIL Point 67 [processingInstruction, 9], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 68 [detachedTextNode, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 68 [detachedTextNode, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 68 [detachedTextNode, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 68 [detachedTextNode, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 68 [detachedTextNode, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 68 [detachedTextNode, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 68 [detachedTextNode, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 68 [detachedTextNode, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 68 [detachedTextNode, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 68 [detachedTextNode, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 68 [detachedTextNode, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 68 [detachedTextNode, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 68 [detachedTextNode, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 68 [detachedTextNode, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 68 [detachedTextNode, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 68 [detachedTextNode, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 68 [detachedTextNode, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 68 [detachedTextNode, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 68 [detachedTextNode, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 68 [detachedTextNode, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 68 [detachedTextNode, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 68 [detachedTextNode, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 68 [detachedTextNode, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 68 [detachedTextNode, 0], range 23 [document, 0, document, 1]
+PASS Point 68 [detachedTextNode, 0], range 24 [document, 0, document, 2]
+PASS Point 68 [detachedTextNode, 0], range 25 [comment, 2, comment, 3]
+PASS Point 68 [detachedTextNode, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 68 [detachedTextNode, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 68 [detachedTextNode, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 68 [detachedTextNode, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 68 [detachedTextNode, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 68 [detachedTextNode, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 68 [detachedTextNode, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 68 [detachedTextNode, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 68 [detachedTextNode, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 68 [detachedTextNode, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 68 [detachedTextNode, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 68 [detachedTextNode, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 68 [detachedTextNode, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 68 [detachedTextNode, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 68 [detachedTextNode, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 68 [detachedTextNode, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 68 [detachedTextNode, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 68 [detachedTextNode, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 68 [detachedTextNode, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 68 [detachedTextNode, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 68 [detachedTextNode, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 68 [detachedTextNode, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 68 [detachedTextNode, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 68 [detachedTextNode, 0], range 49 [document, 1, document, 2]
+PASS Point 68 [detachedTextNode, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 68 [detachedTextNode, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 68 [detachedTextNode, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 68 [detachedTextNode, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 68 [detachedTextNode, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 68 [detachedTextNode, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 68 [detachedTextNode, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 68 [detachedTextNode, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 68 [detachedTextNode, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 68 [detachedTextNode, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 68 [detachedTextNode, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 69 [detachedTextNode, 8], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 69 [detachedTextNode, 8], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 69 [detachedTextNode, 8], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 69 [detachedTextNode, 8], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 69 [detachedTextNode, 8], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 69 [detachedTextNode, 8], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 69 [detachedTextNode, 8], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 69 [detachedTextNode, 8], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 69 [detachedTextNode, 8], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 69 [detachedTextNode, 8], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 69 [detachedTextNode, 8], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 69 [detachedTextNode, 8], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 69 [detachedTextNode, 8], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 69 [detachedTextNode, 8], range 13 [document.head, 1, document.head, 1]
+PASS Point 69 [detachedTextNode, 8], range 14 [document.body, 4, document.body, 5]
+PASS Point 69 [detachedTextNode, 8], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 69 [detachedTextNode, 8], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 69 [detachedTextNode, 8], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 69 [detachedTextNode, 8], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 69 [detachedTextNode, 8], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 69 [detachedTextNode, 8], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 69 [detachedTextNode, 8], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 69 [detachedTextNode, 8], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 69 [detachedTextNode, 8], range 23 [document, 0, document, 1]
+PASS Point 69 [detachedTextNode, 8], range 24 [document, 0, document, 2]
+PASS Point 69 [detachedTextNode, 8], range 25 [comment, 2, comment, 3]
+PASS Point 69 [detachedTextNode, 8], range 26 [testDiv, 0, comment, 5]
+PASS Point 69 [detachedTextNode, 8], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 69 [detachedTextNode, 8], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 69 [detachedTextNode, 8], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 69 [detachedTextNode, 8], range 30 [detachedTextNode, 0, detachedTextNode, 8] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 69 [detachedTextNode, 8], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 69 [detachedTextNode, 8], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 69 [detachedTextNode, 8], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 69 [detachedTextNode, 8], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 69 [detachedTextNode, 8], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 69 [detachedTextNode, 8], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 69 [detachedTextNode, 8], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 69 [detachedTextNode, 8], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 69 [detachedTextNode, 8], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 69 [detachedTextNode, 8], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 69 [detachedTextNode, 8], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 69 [detachedTextNode, 8], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 69 [detachedTextNode, 8], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 69 [detachedTextNode, 8], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 69 [detachedTextNode, 8], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 69 [detachedTextNode, 8], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 69 [detachedTextNode, 8], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 69 [detachedTextNode, 8], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 69 [detachedTextNode, 8], range 49 [document, 1, document, 2]
+PASS Point 69 [detachedTextNode, 8], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 69 [detachedTextNode, 8], range 51 [paras[3], 1, comment, 8]
+PASS Point 69 [detachedTextNode, 8], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 69 [detachedTextNode, 8], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 69 [detachedTextNode, 8], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 69 [detachedTextNode, 8], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 69 [detachedTextNode, 8], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 69 [detachedTextNode, 8], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 69 [detachedTextNode, 8], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 69 [detachedTextNode, 8], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 69 [detachedTextNode, 8], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 70 [detachedForeignTextNode, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 70 [detachedForeignTextNode, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 70 [detachedForeignTextNode, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 70 [detachedForeignTextNode, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 70 [detachedForeignTextNode, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 70 [detachedForeignTextNode, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 70 [detachedForeignTextNode, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 70 [detachedForeignTextNode, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 70 [detachedForeignTextNode, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 70 [detachedForeignTextNode, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 70 [detachedForeignTextNode, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 23 [document, 0, document, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 24 [document, 0, document, 2]
+PASS Point 70 [detachedForeignTextNode, 0], range 25 [comment, 2, comment, 3]
+PASS Point 70 [detachedForeignTextNode, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 70 [detachedForeignTextNode, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 70 [detachedForeignTextNode, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 70 [detachedForeignTextNode, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+FAIL Point 70 [detachedForeignTextNode, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 70 [detachedForeignTextNode, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 70 [detachedForeignTextNode, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 70 [detachedForeignTextNode, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 70 [detachedForeignTextNode, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 70 [detachedForeignTextNode, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 70 [detachedForeignTextNode, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 70 [detachedForeignTextNode, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 70 [detachedForeignTextNode, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 49 [document, 1, document, 2]
+PASS Point 70 [detachedForeignTextNode, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 70 [detachedForeignTextNode, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 70 [detachedForeignTextNode, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 70 [detachedForeignTextNode, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 70 [detachedForeignTextNode, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 70 [detachedForeignTextNode, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 70 [detachedForeignTextNode, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 70 [detachedForeignTextNode, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 70 [detachedForeignTextNode, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 71 [detachedForeignTextNode, 8], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 71 [detachedForeignTextNode, 8], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 71 [detachedForeignTextNode, 8], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 71 [detachedForeignTextNode, 8], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 71 [detachedForeignTextNode, 8], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 71 [detachedForeignTextNode, 8], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 71 [detachedForeignTextNode, 8], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 71 [detachedForeignTextNode, 8], range 13 [document.head, 1, document.head, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 14 [document.body, 4, document.body, 5]
+PASS Point 71 [detachedForeignTextNode, 8], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 71 [detachedForeignTextNode, 8], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 71 [detachedForeignTextNode, 8], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 23 [document, 0, document, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 24 [document, 0, document, 2]
+PASS Point 71 [detachedForeignTextNode, 8], range 25 [comment, 2, comment, 3]
+PASS Point 71 [detachedForeignTextNode, 8], range 26 [testDiv, 0, comment, 5]
+PASS Point 71 [detachedForeignTextNode, 8], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 71 [detachedForeignTextNode, 8], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 71 [detachedForeignTextNode, 8], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+FAIL Point 71 [detachedForeignTextNode, 8], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 71 [detachedForeignTextNode, 8], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 71 [detachedForeignTextNode, 8], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 71 [detachedForeignTextNode, 8], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 71 [detachedForeignTextNode, 8], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 71 [detachedForeignTextNode, 8], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 71 [detachedForeignTextNode, 8], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 71 [detachedForeignTextNode, 8], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 71 [detachedForeignTextNode, 8], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 49 [document, 1, document, 2]
+PASS Point 71 [detachedForeignTextNode, 8], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 71 [detachedForeignTextNode, 8], range 51 [paras[3], 1, comment, 8]
+PASS Point 71 [detachedForeignTextNode, 8], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 71 [detachedForeignTextNode, 8], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 71 [detachedForeignTextNode, 8], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 71 [detachedForeignTextNode, 8], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 71 [detachedForeignTextNode, 8], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 71 [detachedForeignTextNode, 8], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 71 [detachedForeignTextNode, 8], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 72 [detachedXmlTextNode, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 72 [detachedXmlTextNode, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 72 [detachedXmlTextNode, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 72 [detachedXmlTextNode, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 72 [detachedXmlTextNode, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 72 [detachedXmlTextNode, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 72 [detachedXmlTextNode, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 72 [detachedXmlTextNode, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 72 [detachedXmlTextNode, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 72 [detachedXmlTextNode, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 72 [detachedXmlTextNode, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 23 [document, 0, document, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 24 [document, 0, document, 2]
+PASS Point 72 [detachedXmlTextNode, 0], range 25 [comment, 2, comment, 3]
+PASS Point 72 [detachedXmlTextNode, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 72 [detachedXmlTextNode, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 72 [detachedXmlTextNode, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 72 [detachedXmlTextNode, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 72 [detachedXmlTextNode, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+FAIL Point 72 [detachedXmlTextNode, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 72 [detachedXmlTextNode, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 72 [detachedXmlTextNode, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 72 [detachedXmlTextNode, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 72 [detachedXmlTextNode, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 72 [detachedXmlTextNode, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 72 [detachedXmlTextNode, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 72 [detachedXmlTextNode, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 49 [document, 1, document, 2]
+PASS Point 72 [detachedXmlTextNode, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 72 [detachedXmlTextNode, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 72 [detachedXmlTextNode, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 72 [detachedXmlTextNode, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 72 [detachedXmlTextNode, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 72 [detachedXmlTextNode, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 72 [detachedXmlTextNode, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 72 [detachedXmlTextNode, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 72 [detachedXmlTextNode, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 73 [detachedXmlTextNode, 8], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 73 [detachedXmlTextNode, 8], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 73 [detachedXmlTextNode, 8], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 73 [detachedXmlTextNode, 8], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 73 [detachedXmlTextNode, 8], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 73 [detachedXmlTextNode, 8], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 73 [detachedXmlTextNode, 8], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 73 [detachedXmlTextNode, 8], range 13 [document.head, 1, document.head, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 14 [document.body, 4, document.body, 5]
+PASS Point 73 [detachedXmlTextNode, 8], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 73 [detachedXmlTextNode, 8], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 73 [detachedXmlTextNode, 8], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 23 [document, 0, document, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 24 [document, 0, document, 2]
+PASS Point 73 [detachedXmlTextNode, 8], range 25 [comment, 2, comment, 3]
+PASS Point 73 [detachedXmlTextNode, 8], range 26 [testDiv, 0, comment, 5]
+PASS Point 73 [detachedXmlTextNode, 8], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 73 [detachedXmlTextNode, 8], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 73 [detachedXmlTextNode, 8], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 73 [detachedXmlTextNode, 8], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+FAIL Point 73 [detachedXmlTextNode, 8], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 73 [detachedXmlTextNode, 8], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 73 [detachedXmlTextNode, 8], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 73 [detachedXmlTextNode, 8], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 73 [detachedXmlTextNode, 8], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 73 [detachedXmlTextNode, 8], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 73 [detachedXmlTextNode, 8], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 73 [detachedXmlTextNode, 8], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 49 [document, 1, document, 2]
+PASS Point 73 [detachedXmlTextNode, 8], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 73 [detachedXmlTextNode, 8], range 51 [paras[3], 1, comment, 8]
+PASS Point 73 [detachedXmlTextNode, 8], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 73 [detachedXmlTextNode, 8], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 73 [detachedXmlTextNode, 8], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 73 [detachedXmlTextNode, 8], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 73 [detachedXmlTextNode, 8], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 73 [detachedXmlTextNode, 8], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 73 [detachedXmlTextNode, 8], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 74 [detachedProcessingInstruction, 12], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 74 [detachedProcessingInstruction, 12], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 74 [detachedProcessingInstruction, 12], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 74 [detachedProcessingInstruction, 12], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 74 [detachedProcessingInstruction, 12], range 13 [document.head, 1, document.head, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 14 [document.body, 4, document.body, 5]
+PASS Point 74 [detachedProcessingInstruction, 12], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 74 [detachedProcessingInstruction, 12], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 23 [document, 0, document, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 24 [document, 0, document, 2]
+PASS Point 74 [detachedProcessingInstruction, 12], range 25 [comment, 2, comment, 3]
+PASS Point 74 [detachedProcessingInstruction, 12], range 26 [testDiv, 0, comment, 5]
+PASS Point 74 [detachedProcessingInstruction, 12], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 74 [detachedProcessingInstruction, 12], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 74 [detachedProcessingInstruction, 12], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 74 [detachedProcessingInstruction, 12], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 74 [detachedProcessingInstruction, 12], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 74 [detachedProcessingInstruction, 12], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 74 [detachedProcessingInstruction, 12], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 74 [detachedProcessingInstruction, 12], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 49 [document, 1, document, 2]
+PASS Point 74 [detachedProcessingInstruction, 12], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 74 [detachedProcessingInstruction, 12], range 51 [paras[3], 1, comment, 8]
+PASS Point 74 [detachedProcessingInstruction, 12], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 74 [detachedProcessingInstruction, 12], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 74 [detachedProcessingInstruction, 12], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 74 [detachedProcessingInstruction, 12], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 74 [detachedProcessingInstruction, 12], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 74 [detachedProcessingInstruction, 12], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 74 [detachedProcessingInstruction, 12], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 75 [detachedComment, 3], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 75 [detachedComment, 3], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 75 [detachedComment, 3], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 75 [detachedComment, 3], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 75 [detachedComment, 3], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 75 [detachedComment, 3], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 75 [detachedComment, 3], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 75 [detachedComment, 3], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 75 [detachedComment, 3], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 75 [detachedComment, 3], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 75 [detachedComment, 3], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 75 [detachedComment, 3], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 75 [detachedComment, 3], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 75 [detachedComment, 3], range 13 [document.head, 1, document.head, 1]
+PASS Point 75 [detachedComment, 3], range 14 [document.body, 4, document.body, 5]
+PASS Point 75 [detachedComment, 3], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 75 [detachedComment, 3], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 75 [detachedComment, 3], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 75 [detachedComment, 3], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 75 [detachedComment, 3], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 75 [detachedComment, 3], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 75 [detachedComment, 3], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 75 [detachedComment, 3], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 75 [detachedComment, 3], range 23 [document, 0, document, 1]
+PASS Point 75 [detachedComment, 3], range 24 [document, 0, document, 2]
+PASS Point 75 [detachedComment, 3], range 25 [comment, 2, comment, 3]
+PASS Point 75 [detachedComment, 3], range 26 [testDiv, 0, comment, 5]
+PASS Point 75 [detachedComment, 3], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 75 [detachedComment, 3], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 75 [detachedComment, 3], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 75 [detachedComment, 3], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 75 [detachedComment, 3], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 75 [detachedComment, 3], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 75 [detachedComment, 3], range 33 [detachedComment, 3, detachedComment, 4] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 75 [detachedComment, 3], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 75 [detachedComment, 3], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 75 [detachedComment, 3], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 75 [detachedComment, 3], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 75 [detachedComment, 3], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 75 [detachedComment, 3], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 75 [detachedComment, 3], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 75 [detachedComment, 3], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 75 [detachedComment, 3], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 75 [detachedComment, 3], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 75 [detachedComment, 3], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 75 [detachedComment, 3], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 75 [detachedComment, 3], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 75 [detachedComment, 3], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 75 [detachedComment, 3], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 75 [detachedComment, 3], range 49 [document, 1, document, 2]
+PASS Point 75 [detachedComment, 3], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 75 [detachedComment, 3], range 51 [paras[3], 1, comment, 8]
+PASS Point 75 [detachedComment, 3], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 75 [detachedComment, 3], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 75 [detachedComment, 3], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 75 [detachedComment, 3], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 75 [detachedComment, 3], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 75 [detachedComment, 3], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 75 [detachedComment, 3], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 75 [detachedComment, 3], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 75 [detachedComment, 3], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 76 [detachedComment, 5], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 76 [detachedComment, 5], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 76 [detachedComment, 5], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 76 [detachedComment, 5], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 76 [detachedComment, 5], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 76 [detachedComment, 5], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 76 [detachedComment, 5], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 76 [detachedComment, 5], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 76 [detachedComment, 5], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 76 [detachedComment, 5], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 76 [detachedComment, 5], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 76 [detachedComment, 5], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 76 [detachedComment, 5], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 76 [detachedComment, 5], range 13 [document.head, 1, document.head, 1]
+PASS Point 76 [detachedComment, 5], range 14 [document.body, 4, document.body, 5]
+PASS Point 76 [detachedComment, 5], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 76 [detachedComment, 5], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 76 [detachedComment, 5], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 76 [detachedComment, 5], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 76 [detachedComment, 5], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 76 [detachedComment, 5], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 76 [detachedComment, 5], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 76 [detachedComment, 5], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 76 [detachedComment, 5], range 23 [document, 0, document, 1]
+PASS Point 76 [detachedComment, 5], range 24 [document, 0, document, 2]
+PASS Point 76 [detachedComment, 5], range 25 [comment, 2, comment, 3]
+PASS Point 76 [detachedComment, 5], range 26 [testDiv, 0, comment, 5]
+PASS Point 76 [detachedComment, 5], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 76 [detachedComment, 5], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 76 [detachedComment, 5], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 76 [detachedComment, 5], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 76 [detachedComment, 5], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 76 [detachedComment, 5], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 76 [detachedComment, 5], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 76 [detachedComment, 5], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 76 [detachedComment, 5], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 76 [detachedComment, 5], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 76 [detachedComment, 5], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 76 [detachedComment, 5], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 76 [detachedComment, 5], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 76 [detachedComment, 5], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 76 [detachedComment, 5], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 76 [detachedComment, 5], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 76 [detachedComment, 5], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 76 [detachedComment, 5], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 76 [detachedComment, 5], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 76 [detachedComment, 5], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 76 [detachedComment, 5], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 76 [detachedComment, 5], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 76 [detachedComment, 5], range 49 [document, 1, document, 2]
+PASS Point 76 [detachedComment, 5], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 76 [detachedComment, 5], range 51 [paras[3], 1, comment, 8]
+PASS Point 76 [detachedComment, 5], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 76 [detachedComment, 5], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 76 [detachedComment, 5], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 76 [detachedComment, 5], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 76 [detachedComment, 5], range 56 [detachedComment, 5, detachedComment, 5] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 76 [detachedComment, 5], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 76 [detachedComment, 5], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 76 [detachedComment, 5], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 76 [detachedComment, 5], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 77 [detachedForeignComment, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 77 [detachedForeignComment, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 77 [detachedForeignComment, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 77 [detachedForeignComment, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 77 [detachedForeignComment, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 77 [detachedForeignComment, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 77 [detachedForeignComment, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 77 [detachedForeignComment, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 77 [detachedForeignComment, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 77 [detachedForeignComment, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 77 [detachedForeignComment, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 77 [detachedForeignComment, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 77 [detachedForeignComment, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 77 [detachedForeignComment, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 77 [detachedForeignComment, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 77 [detachedForeignComment, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 77 [detachedForeignComment, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 77 [detachedForeignComment, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 77 [detachedForeignComment, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 77 [detachedForeignComment, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 77 [detachedForeignComment, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 77 [detachedForeignComment, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 77 [detachedForeignComment, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 77 [detachedForeignComment, 0], range 23 [document, 0, document, 1]
+PASS Point 77 [detachedForeignComment, 0], range 24 [document, 0, document, 2]
+PASS Point 77 [detachedForeignComment, 0], range 25 [comment, 2, comment, 3]
+PASS Point 77 [detachedForeignComment, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 77 [detachedForeignComment, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 77 [detachedForeignComment, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 77 [detachedForeignComment, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 77 [detachedForeignComment, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 77 [detachedForeignComment, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 77 [detachedForeignComment, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 77 [detachedForeignComment, 0], range 33 [detachedComment, 3, detachedComment, 4]
+FAIL Point 77 [detachedForeignComment, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 77 [detachedForeignComment, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 77 [detachedForeignComment, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 77 [detachedForeignComment, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 77 [detachedForeignComment, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 77 [detachedForeignComment, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 77 [detachedForeignComment, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 77 [detachedForeignComment, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 77 [detachedForeignComment, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 77 [detachedForeignComment, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 77 [detachedForeignComment, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 77 [detachedForeignComment, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 77 [detachedForeignComment, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 77 [detachedForeignComment, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 77 [detachedForeignComment, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 77 [detachedForeignComment, 0], range 49 [document, 1, document, 2]
+PASS Point 77 [detachedForeignComment, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 77 [detachedForeignComment, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 77 [detachedForeignComment, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 77 [detachedForeignComment, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 77 [detachedForeignComment, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 77 [detachedForeignComment, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 77 [detachedForeignComment, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 77 [detachedForeignComment, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 77 [detachedForeignComment, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 77 [detachedForeignComment, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 77 [detachedForeignComment, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 78 [detachedForeignComment, 4], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 78 [detachedForeignComment, 4], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 78 [detachedForeignComment, 4], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 78 [detachedForeignComment, 4], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 78 [detachedForeignComment, 4], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 78 [detachedForeignComment, 4], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 78 [detachedForeignComment, 4], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 78 [detachedForeignComment, 4], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 78 [detachedForeignComment, 4], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 78 [detachedForeignComment, 4], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 78 [detachedForeignComment, 4], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 78 [detachedForeignComment, 4], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 78 [detachedForeignComment, 4], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 78 [detachedForeignComment, 4], range 13 [document.head, 1, document.head, 1]
+PASS Point 78 [detachedForeignComment, 4], range 14 [document.body, 4, document.body, 5]
+PASS Point 78 [detachedForeignComment, 4], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 78 [detachedForeignComment, 4], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 78 [detachedForeignComment, 4], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 78 [detachedForeignComment, 4], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 78 [detachedForeignComment, 4], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 78 [detachedForeignComment, 4], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 78 [detachedForeignComment, 4], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 78 [detachedForeignComment, 4], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 78 [detachedForeignComment, 4], range 23 [document, 0, document, 1]
+PASS Point 78 [detachedForeignComment, 4], range 24 [document, 0, document, 2]
+PASS Point 78 [detachedForeignComment, 4], range 25 [comment, 2, comment, 3]
+PASS Point 78 [detachedForeignComment, 4], range 26 [testDiv, 0, comment, 5]
+PASS Point 78 [detachedForeignComment, 4], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 78 [detachedForeignComment, 4], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 78 [detachedForeignComment, 4], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 78 [detachedForeignComment, 4], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 78 [detachedForeignComment, 4], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 78 [detachedForeignComment, 4], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 78 [detachedForeignComment, 4], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 78 [detachedForeignComment, 4], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 78 [detachedForeignComment, 4], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 78 [detachedForeignComment, 4], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 78 [detachedForeignComment, 4], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 78 [detachedForeignComment, 4], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 78 [detachedForeignComment, 4], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 78 [detachedForeignComment, 4], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 78 [detachedForeignComment, 4], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 78 [detachedForeignComment, 4], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 78 [detachedForeignComment, 4], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 78 [detachedForeignComment, 4], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 78 [detachedForeignComment, 4], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 78 [detachedForeignComment, 4], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 78 [detachedForeignComment, 4], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 78 [detachedForeignComment, 4], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 78 [detachedForeignComment, 4], range 49 [document, 1, document, 2]
+PASS Point 78 [detachedForeignComment, 4], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 78 [detachedForeignComment, 4], range 51 [paras[3], 1, comment, 8]
+PASS Point 78 [detachedForeignComment, 4], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 78 [detachedForeignComment, 4], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 78 [detachedForeignComment, 4], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 78 [detachedForeignComment, 4], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 78 [detachedForeignComment, 4], range 56 [detachedComment, 5, detachedComment, 5]
+FAIL Point 78 [detachedForeignComment, 4], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 78 [detachedForeignComment, 4], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 78 [detachedForeignComment, 4], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 78 [detachedForeignComment, 4], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 79 [detachedXmlComment, 2], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 79 [detachedXmlComment, 2], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 79 [detachedXmlComment, 2], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 79 [detachedXmlComment, 2], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 79 [detachedXmlComment, 2], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 79 [detachedXmlComment, 2], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 79 [detachedXmlComment, 2], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 79 [detachedXmlComment, 2], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 79 [detachedXmlComment, 2], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 79 [detachedXmlComment, 2], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 79 [detachedXmlComment, 2], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 79 [detachedXmlComment, 2], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 79 [detachedXmlComment, 2], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 79 [detachedXmlComment, 2], range 13 [document.head, 1, document.head, 1]
+PASS Point 79 [detachedXmlComment, 2], range 14 [document.body, 4, document.body, 5]
+PASS Point 79 [detachedXmlComment, 2], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 79 [detachedXmlComment, 2], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 79 [detachedXmlComment, 2], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 79 [detachedXmlComment, 2], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 79 [detachedXmlComment, 2], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 79 [detachedXmlComment, 2], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 79 [detachedXmlComment, 2], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 79 [detachedXmlComment, 2], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 79 [detachedXmlComment, 2], range 23 [document, 0, document, 1]
+PASS Point 79 [detachedXmlComment, 2], range 24 [document, 0, document, 2]
+PASS Point 79 [detachedXmlComment, 2], range 25 [comment, 2, comment, 3]
+PASS Point 79 [detachedXmlComment, 2], range 26 [testDiv, 0, comment, 5]
+PASS Point 79 [detachedXmlComment, 2], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 79 [detachedXmlComment, 2], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 79 [detachedXmlComment, 2], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 79 [detachedXmlComment, 2], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 79 [detachedXmlComment, 2], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 79 [detachedXmlComment, 2], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 79 [detachedXmlComment, 2], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 79 [detachedXmlComment, 2], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+FAIL Point 79 [detachedXmlComment, 2], range 35 [detachedXmlComment, 2, detachedXmlComment, 6] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 79 [detachedXmlComment, 2], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 79 [detachedXmlComment, 2], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 79 [detachedXmlComment, 2], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 79 [detachedXmlComment, 2], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 79 [detachedXmlComment, 2], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 79 [detachedXmlComment, 2], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 79 [detachedXmlComment, 2], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 79 [detachedXmlComment, 2], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 79 [detachedXmlComment, 2], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 79 [detachedXmlComment, 2], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 79 [detachedXmlComment, 2], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 79 [detachedXmlComment, 2], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 79 [detachedXmlComment, 2], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 79 [detachedXmlComment, 2], range 49 [document, 1, document, 2]
+PASS Point 79 [detachedXmlComment, 2], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 79 [detachedXmlComment, 2], range 51 [paras[3], 1, comment, 8]
+PASS Point 79 [detachedXmlComment, 2], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 79 [detachedXmlComment, 2], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 79 [detachedXmlComment, 2], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 79 [detachedXmlComment, 2], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 79 [detachedXmlComment, 2], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 79 [detachedXmlComment, 2], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 79 [detachedXmlComment, 2], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 79 [detachedXmlComment, 2], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 79 [detachedXmlComment, 2], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 80 [docfrag, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 80 [docfrag, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 80 [docfrag, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 80 [docfrag, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 80 [docfrag, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 80 [docfrag, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 80 [docfrag, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 80 [docfrag, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 80 [docfrag, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 80 [docfrag, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 80 [docfrag, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 80 [docfrag, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 80 [docfrag, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 80 [docfrag, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 80 [docfrag, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 80 [docfrag, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 80 [docfrag, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 80 [docfrag, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 80 [docfrag, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 80 [docfrag, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 80 [docfrag, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 80 [docfrag, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 80 [docfrag, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 80 [docfrag, 0], range 23 [document, 0, document, 1]
+PASS Point 80 [docfrag, 0], range 24 [document, 0, document, 2]
+PASS Point 80 [docfrag, 0], range 25 [comment, 2, comment, 3]
+PASS Point 80 [docfrag, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 80 [docfrag, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 80 [docfrag, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 80 [docfrag, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 80 [docfrag, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 80 [docfrag, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 80 [docfrag, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 80 [docfrag, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 80 [docfrag, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 80 [docfrag, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 80 [docfrag, 0], range 36 [docfrag, 0, docfrag, 0] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 80 [docfrag, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 80 [docfrag, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 80 [docfrag, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 80 [docfrag, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 80 [docfrag, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 80 [docfrag, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 80 [docfrag, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 80 [docfrag, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 80 [docfrag, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 80 [docfrag, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 80 [docfrag, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 80 [docfrag, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 80 [docfrag, 0], range 49 [document, 1, document, 2]
+PASS Point 80 [docfrag, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 80 [docfrag, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 80 [docfrag, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 80 [docfrag, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 80 [docfrag, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 80 [docfrag, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 80 [docfrag, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 80 [docfrag, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 80 [docfrag, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 80 [docfrag, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 80 [docfrag, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 81 [foreignDocfrag, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 81 [foreignDocfrag, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 81 [foreignDocfrag, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 81 [foreignDocfrag, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 81 [foreignDocfrag, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 81 [foreignDocfrag, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 81 [foreignDocfrag, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 81 [foreignDocfrag, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 81 [foreignDocfrag, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 81 [foreignDocfrag, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 81 [foreignDocfrag, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 81 [foreignDocfrag, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 81 [foreignDocfrag, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 81 [foreignDocfrag, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 81 [foreignDocfrag, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 81 [foreignDocfrag, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 81 [foreignDocfrag, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 81 [foreignDocfrag, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 81 [foreignDocfrag, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 81 [foreignDocfrag, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 81 [foreignDocfrag, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 81 [foreignDocfrag, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 81 [foreignDocfrag, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 81 [foreignDocfrag, 0], range 23 [document, 0, document, 1]
+PASS Point 81 [foreignDocfrag, 0], range 24 [document, 0, document, 2]
+PASS Point 81 [foreignDocfrag, 0], range 25 [comment, 2, comment, 3]
+PASS Point 81 [foreignDocfrag, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 81 [foreignDocfrag, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 81 [foreignDocfrag, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 81 [foreignDocfrag, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 81 [foreignDocfrag, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 81 [foreignDocfrag, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 81 [foreignDocfrag, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 81 [foreignDocfrag, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 81 [foreignDocfrag, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 81 [foreignDocfrag, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 81 [foreignDocfrag, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 81 [foreignDocfrag, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 81 [foreignDocfrag, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 81 [foreignDocfrag, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 81 [foreignDocfrag, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 81 [foreignDocfrag, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 81 [foreignDocfrag, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 81 [foreignDocfrag, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 81 [foreignDocfrag, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 81 [foreignDocfrag, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 81 [foreignDocfrag, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 81 [foreignDocfrag, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 81 [foreignDocfrag, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 81 [foreignDocfrag, 0], range 49 [document, 1, document, 2]
+PASS Point 81 [foreignDocfrag, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 81 [foreignDocfrag, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 81 [foreignDocfrag, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 81 [foreignDocfrag, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 81 [foreignDocfrag, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 81 [foreignDocfrag, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 81 [foreignDocfrag, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 81 [foreignDocfrag, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+FAIL Point 81 [foreignDocfrag, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+PASS Point 81 [foreignDocfrag, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 81 [foreignDocfrag, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 82 [xmlDocfrag, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 82 [xmlDocfrag, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 82 [xmlDocfrag, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 82 [xmlDocfrag, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 82 [xmlDocfrag, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 82 [xmlDocfrag, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 82 [xmlDocfrag, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 82 [xmlDocfrag, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 82 [xmlDocfrag, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 82 [xmlDocfrag, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 82 [xmlDocfrag, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 82 [xmlDocfrag, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 82 [xmlDocfrag, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 82 [xmlDocfrag, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 82 [xmlDocfrag, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 82 [xmlDocfrag, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 82 [xmlDocfrag, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 82 [xmlDocfrag, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 82 [xmlDocfrag, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 82 [xmlDocfrag, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 82 [xmlDocfrag, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 82 [xmlDocfrag, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 82 [xmlDocfrag, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 82 [xmlDocfrag, 0], range 23 [document, 0, document, 1]
+PASS Point 82 [xmlDocfrag, 0], range 24 [document, 0, document, 2]
+PASS Point 82 [xmlDocfrag, 0], range 25 [comment, 2, comment, 3]
+PASS Point 82 [xmlDocfrag, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 82 [xmlDocfrag, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 82 [xmlDocfrag, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 82 [xmlDocfrag, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 82 [xmlDocfrag, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 82 [xmlDocfrag, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 82 [xmlDocfrag, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 82 [xmlDocfrag, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 82 [xmlDocfrag, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 82 [xmlDocfrag, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 82 [xmlDocfrag, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 82 [xmlDocfrag, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 82 [xmlDocfrag, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 82 [xmlDocfrag, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 82 [xmlDocfrag, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 82 [xmlDocfrag, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 82 [xmlDocfrag, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 82 [xmlDocfrag, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 82 [xmlDocfrag, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 82 [xmlDocfrag, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 82 [xmlDocfrag, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 82 [xmlDocfrag, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 82 [xmlDocfrag, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 82 [xmlDocfrag, 0], range 49 [document, 1, document, 2]
+PASS Point 82 [xmlDocfrag, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 82 [xmlDocfrag, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 82 [xmlDocfrag, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 82 [xmlDocfrag, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 82 [xmlDocfrag, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 82 [xmlDocfrag, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 82 [xmlDocfrag, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 82 [xmlDocfrag, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 82 [xmlDocfrag, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+FAIL Point 82 [xmlDocfrag, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0] assert_true: Must return true if point is not before start, after end, or in different tree expected true got false
+FAIL Point 82 [xmlDocfrag, 0], range 60 detached InvalidStateError: DOM Exception 11
+FAIL Point 83 [doctype, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL Point 83 [doctype, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 83 [doctype, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 83 [doctype, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+FAIL Point 83 [doctype, 0], range 10 [document.documentElement, 0, document.documentElement, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 11 [document.documentElement, 0, document.documentElement, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 12 [document.documentElement, 1, document.documentElement, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 13 [document.head, 1, document.head, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 14 [document.body, 4, document.body, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 83 [doctype, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+FAIL Point 83 [doctype, 0], range 16 [paras[0], 0, paras[0], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 17 [detachedPara1, 0, detachedPara1, 1] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL Point 83 [doctype, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 20 [paras[0].firstChild, 3, paras[3], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 21 [paras[0], 0, paras[0].firstChild, 7] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 22 [testDiv, 2, paras[4], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 23 [document, 0, document, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 24 [document, 0, document, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 25 [comment, 2, comment, 3] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 26 [testDiv, 0, comment, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 83 [doctype, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 83 [doctype, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 83 [doctype, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 83 [doctype, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 83 [doctype, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 83 [doctype, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 83 [doctype, 0], range 33 [detachedComment, 3, detachedComment, 4] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 83 [doctype, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 83 [doctype, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 83 [doctype, 0], range 36 [docfrag, 0, docfrag, 0] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 83 [doctype, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+FAIL Point 83 [doctype, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 83 [doctype, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 83 [doctype, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 83 [doctype, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+FAIL Point 83 [doctype, 0], range 44 [paras[0], 0, paras[0], 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 45 [detachedPara1, 0, detachedPara1, 0] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL Point 83 [doctype, 0], range 46 [testDiv, 1, paras[2].firstChild, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 47 [document.documentElement, 1, document.body, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 83 [doctype, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+FAIL Point 83 [doctype, 0], range 49 [document, 1, document, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 50 [paras[2].firstChild, 4, comment, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 83 [doctype, 0], range 51 [paras[3], 1, comment, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 83 [doctype, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 83 [doctype, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 83 [doctype, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 83 [doctype, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 83 [doctype, 0], range 56 [detachedComment, 5, detachedComment, 5] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 83 [doctype, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 83 [doctype, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 83 [doctype, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 83 [doctype, 0], range 60 detached InvalidStateError: DOM Exception 11
+FAIL Point 84 [doctype, -17], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL Point 84 [doctype, -17], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 84 [doctype, -17], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 84 [doctype, -17], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+FAIL Point 84 [doctype, -17], range 10 [document.documentElement, 0, document.documentElement, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 11 [document.documentElement, 0, document.documentElement, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 12 [document.documentElement, 1, document.documentElement, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 13 [document.head, 1, document.head, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 14 [document.body, 4, document.body, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 84 [doctype, -17], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+FAIL Point 84 [doctype, -17], range 16 [paras[0], 0, paras[0], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 17 [detachedPara1, 0, detachedPara1, 1] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL Point 84 [doctype, -17], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 20 [paras[0].firstChild, 3, paras[3], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 21 [paras[0], 0, paras[0].firstChild, 7] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 22 [testDiv, 2, paras[4], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 23 [document, 0, document, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 24 [document, 0, document, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 25 [comment, 2, comment, 3] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 26 [testDiv, 0, comment, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 84 [doctype, -17], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 84 [doctype, -17], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 84 [doctype, -17], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 84 [doctype, -17], range 30 [detachedTextNode, 0, detachedTextNode, 8] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 84 [doctype, -17], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 84 [doctype, -17], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 84 [doctype, -17], range 33 [detachedComment, 3, detachedComment, 4] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 84 [doctype, -17], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 84 [doctype, -17], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 84 [doctype, -17], range 36 [docfrag, 0, docfrag, 0] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 84 [doctype, -17], range 37 [processingInstruction, 0, processingInstruction, 4]
+FAIL Point 84 [doctype, -17], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 84 [doctype, -17], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 84 [doctype, -17], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 84 [doctype, -17], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+FAIL Point 84 [doctype, -17], range 44 [paras[0], 0, paras[0], 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 45 [detachedPara1, 0, detachedPara1, 0] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL Point 84 [doctype, -17], range 46 [testDiv, 1, paras[2].firstChild, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 47 [document.documentElement, 1, document.body, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 84 [doctype, -17], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+FAIL Point 84 [doctype, -17], range 49 [document, 1, document, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 50 [paras[2].firstChild, 4, comment, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 84 [doctype, -17], range 51 [paras[3], 1, comment, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 84 [doctype, -17], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 84 [doctype, -17], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 84 [doctype, -17], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 84 [doctype, -17], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 84 [doctype, -17], range 56 [detachedComment, 5, detachedComment, 5] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 84 [doctype, -17], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 84 [doctype, -17], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 84 [doctype, -17], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 84 [doctype, -17], range 60 detached InvalidStateError: DOM Exception 11
+FAIL Point 85 [doctype, 1], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL Point 85 [doctype, 1], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 85 [doctype, 1], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 85 [doctype, 1], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+FAIL Point 85 [doctype, 1], range 10 [document.documentElement, 0, document.documentElement, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 11 [document.documentElement, 0, document.documentElement, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 12 [document.documentElement, 1, document.documentElement, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 13 [document.head, 1, document.head, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 14 [document.body, 4, document.body, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 85 [doctype, 1], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+FAIL Point 85 [doctype, 1], range 16 [paras[0], 0, paras[0], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 17 [detachedPara1, 0, detachedPara1, 1] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL Point 85 [doctype, 1], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 20 [paras[0].firstChild, 3, paras[3], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 21 [paras[0], 0, paras[0].firstChild, 7] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 22 [testDiv, 2, paras[4], 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 23 [document, 0, document, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 24 [document, 0, document, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 25 [comment, 2, comment, 3] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 26 [testDiv, 0, comment, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 85 [doctype, 1], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 85 [doctype, 1], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Point 85 [doctype, 1], range 29 [xmlDoc, 1, xmlComment, 0]
+FAIL Point 85 [doctype, 1], range 30 [detachedTextNode, 0, detachedTextNode, 8] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 85 [doctype, 1], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Point 85 [doctype, 1], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+FAIL Point 85 [doctype, 1], range 33 [detachedComment, 3, detachedComment, 4] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 85 [doctype, 1], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Point 85 [doctype, 1], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+FAIL Point 85 [doctype, 1], range 36 [docfrag, 0, docfrag, 0] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 85 [doctype, 1], range 37 [processingInstruction, 0, processingInstruction, 4]
+FAIL Point 85 [doctype, 1], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 85 [doctype, 1], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 85 [doctype, 1], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 85 [doctype, 1], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+FAIL Point 85 [doctype, 1], range 44 [paras[0], 0, paras[0], 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 45 [detachedPara1, 0, detachedPara1, 0] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL Point 85 [doctype, 1], range 46 [testDiv, 1, paras[2].firstChild, 5] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 47 [document.documentElement, 1, document.body, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 85 [doctype, 1], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+FAIL Point 85 [doctype, 1], range 49 [document, 1, document, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 50 [paras[2].firstChild, 4, comment, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 85 [doctype, 1], range 51 [paras[3], 1, comment, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 85 [doctype, 1], range 52 [foreignDoc, 0, foreignDoc, 0]
+PASS Point 85 [doctype, 1], range 53 [xmlDoc, 0, xmlDoc, 0]
+PASS Point 85 [doctype, 1], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+PASS Point 85 [doctype, 1], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+FAIL Point 85 [doctype, 1], range 56 [detachedComment, 5, detachedComment, 5] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 85 [doctype, 1], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 85 [doctype, 1], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+PASS Point 85 [doctype, 1], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 85 [doctype, 1], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 86 [foreignDoctype, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 86 [foreignDoctype, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 86 [foreignDoctype, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 86 [foreignDoctype, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 86 [foreignDoctype, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 86 [foreignDoctype, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 86 [foreignDoctype, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 86 [foreignDoctype, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+FAIL Point 86 [foreignDoctype, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 86 [foreignDoctype, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 86 [foreignDoctype, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 86 [foreignDoctype, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 86 [foreignDoctype, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 86 [foreignDoctype, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 86 [foreignDoctype, 0], range 14 [document.body, 4, document.body, 5]
+FAIL Point 86 [foreignDoctype, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 86 [foreignDoctype, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 86 [foreignDoctype, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 86 [foreignDoctype, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 86 [foreignDoctype, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 86 [foreignDoctype, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 86 [foreignDoctype, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 86 [foreignDoctype, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 86 [foreignDoctype, 0], range 23 [document, 0, document, 1]
+PASS Point 86 [foreignDoctype, 0], range 24 [document, 0, document, 2]
+PASS Point 86 [foreignDoctype, 0], range 25 [comment, 2, comment, 3]
+PASS Point 86 [foreignDoctype, 0], range 26 [testDiv, 0, comment, 5]
+FAIL Point 86 [foreignDoctype, 0], range 27 [foreignDoc, 1, foreignComment, 2] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 86 [foreignDoctype, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 86 [foreignDoctype, 0], range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Point 86 [foreignDoctype, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+FAIL Point 86 [foreignDoctype, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 86 [foreignDoctype, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Point 86 [foreignDoctype, 0], range 33 [detachedComment, 3, detachedComment, 4]
+FAIL Point 86 [foreignDoctype, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 86 [foreignDoctype, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Point 86 [foreignDoctype, 0], range 36 [docfrag, 0, docfrag, 0]
+PASS Point 86 [foreignDoctype, 0], range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS Point 86 [foreignDoctype, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 86 [foreignDoctype, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 86 [foreignDoctype, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+FAIL Point 86 [foreignDoctype, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 86 [foreignDoctype, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL Point 86 [foreignDoctype, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 86 [foreignDoctype, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 86 [foreignDoctype, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 86 [foreignDoctype, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 86 [foreignDoctype, 0], range 47 [document.documentElement, 1, document.body, 0]
+FAIL Point 86 [foreignDoctype, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 86 [foreignDoctype, 0], range 49 [document, 1, document, 2]
+PASS Point 86 [foreignDoctype, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 86 [foreignDoctype, 0], range 51 [paras[3], 1, comment, 8]
+FAIL Point 86 [foreignDoctype, 0], range 52 [foreignDoc, 0, foreignDoc, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 86 [foreignDoctype, 0], range 53 [xmlDoc, 0, xmlDoc, 0]
+FAIL Point 86 [foreignDoctype, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 86 [foreignDoctype, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7]
+PASS Point 86 [foreignDoctype, 0], range 56 [detachedComment, 5, detachedComment, 5]
+FAIL Point 86 [foreignDoctype, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL Point 86 [foreignDoctype, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 86 [foreignDoctype, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0]
+FAIL Point 86 [foreignDoctype, 0], range 60 detached InvalidStateError: DOM Exception 11
+PASS Point 87 [xmlDoctype, 0], range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Point 87 [xmlDoctype, 0], range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Point 87 [xmlDoctype, 0], range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Point 87 [xmlDoctype, 0], range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Point 87 [xmlDoctype, 0], range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 87 [xmlDoctype, 0], range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Point 87 [xmlDoctype, 0], range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Point 87 [xmlDoctype, 0], range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Point 87 [xmlDoctype, 0], range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Point 87 [xmlDoctype, 0], range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Point 87 [xmlDoctype, 0], range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Point 87 [xmlDoctype, 0], range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Point 87 [xmlDoctype, 0], range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Point 87 [xmlDoctype, 0], range 13 [document.head, 1, document.head, 1]
+PASS Point 87 [xmlDoctype, 0], range 14 [document.body, 4, document.body, 5]
+PASS Point 87 [xmlDoctype, 0], range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Point 87 [xmlDoctype, 0], range 16 [paras[0], 0, paras[0], 1]
+PASS Point 87 [xmlDoctype, 0], range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Point 87 [xmlDoctype, 0], range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Point 87 [xmlDoctype, 0], range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Point 87 [xmlDoctype, 0], range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Point 87 [xmlDoctype, 0], range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Point 87 [xmlDoctype, 0], range 22 [testDiv, 2, paras[4], 1]
+PASS Point 87 [xmlDoctype, 0], range 23 [document, 0, document, 1]
+PASS Point 87 [xmlDoctype, 0], range 24 [document, 0, document, 2]
+PASS Point 87 [xmlDoctype, 0], range 25 [comment, 2, comment, 3]
+PASS Point 87 [xmlDoctype, 0], range 26 [testDiv, 0, comment, 5]
+PASS Point 87 [xmlDoctype, 0], range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Point 87 [xmlDoctype, 0], range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+FAIL Point 87 [xmlDoctype, 0], range 29 [xmlDoc, 1, xmlComment, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 87 [xmlDoctype, 0], range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Point 87 [xmlDoctype, 0], range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+FAIL Point 87 [xmlDoctype, 0], range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 87 [xmlDoctype, 0], range 33 [detachedComment, 3, detachedComment, 4]
+PASS Point 87 [xmlDoctype, 0], range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+FAIL Point 87 [xmlDoctype, 0], range 35 [detachedXmlComment, 2, detachedXmlComment, 6] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 87 [xmlDoctype, 0], range 36 [docfrag, 0, docfrag, 0]
+FAIL Point 87 [xmlDoctype, 0], range 37 [processingInstruction, 0, processingInstruction, 4] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 87 [xmlDoctype, 0], range 38 [paras[1].firstChild, 0, paras[1].firstChild, 1]
+PASS Point 87 [xmlDoctype, 0], range 39 [paras[1].firstChild, 2, paras[1].firstChild, 8]
+PASS Point 87 [xmlDoctype, 0], range 40 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 1]
+PASS Point 87 [xmlDoctype, 0], range 41 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 1]
+PASS Point 87 [xmlDoctype, 0], range 42 [foreignDoc.head, 1, foreignDoc.head, 1]
+PASS Point 87 [xmlDoctype, 0], range 43 [foreignDoc.body, 0, foreignDoc.body, 0]
+PASS Point 87 [xmlDoctype, 0], range 44 [paras[0], 0, paras[0], 0]
+PASS Point 87 [xmlDoctype, 0], range 45 [detachedPara1, 0, detachedPara1, 0]
+PASS Point 87 [xmlDoctype, 0], range 46 [testDiv, 1, paras[2].firstChild, 5]
+PASS Point 87 [xmlDoctype, 0], range 47 [document.documentElement, 1, document.body, 0]
+PASS Point 87 [xmlDoctype, 0], range 48 [foreignDoc.documentElement, 1, foreignDoc.body, 0]
+PASS Point 87 [xmlDoctype, 0], range 49 [document, 1, document, 2]
+PASS Point 87 [xmlDoctype, 0], range 50 [paras[2].firstChild, 4, comment, 2]
+PASS Point 87 [xmlDoctype, 0], range 51 [paras[3], 1, comment, 8]
+PASS Point 87 [xmlDoctype, 0], range 52 [foreignDoc, 0, foreignDoc, 0]
+FAIL Point 87 [xmlDoctype, 0], range 53 [xmlDoc, 0, xmlDoc, 0] assert_throws: Must throw InvalidNodeTypeError if node is a doctype function "function () {
+ range.isPointInRange(node, offset..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS Point 87 [xmlDoctype, 0], range 54 [detachedForeignTextNode, 7, detachedForeignTextNode, 7]
+FAIL Point 87 [xmlDoctype, 0], range 55 [detachedXmlTextNode, 7, detachedXmlTextNode, 7] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS Point 87 [xmlDoctype, 0], range 56 [detachedComment, 5, detachedComment, 5]
+PASS Point 87 [xmlDoctype, 0], range 57 [detachedForeignComment, 4, detachedForeignComment, 4]
+PASS Point 87 [xmlDoctype, 0], range 58 [foreignDocfrag, 0, foreignDocfrag, 0]
+FAIL Point 87 [xmlDoctype, 0], range 59 [xmlDocfrag, 0, xmlDocfrag, 0] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL Point 87 [xmlDoctype, 0], range 60 detached InvalidStateError: DOM Exception 11
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangeisPointInRangehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-isPointInRange.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-isPointInRange.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-isPointInRange.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,83 @@
</span><ins>+<!doctype html>
+<title>Range.isPointInRange() tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+var testRangesCached = [];
+test(function() {
+ for (var j = 0; j < testRanges.length; j++) {
+ test(function() {
+ testRangesCached[j] = rangeFromEndpoints(eval(testRanges[j]));
+ }, "Set up for range " + j + " " + testRanges[j]);
+ }
+ var detachedRange = document.createRange();
+ detachedRange.detach();
+ testRanges.push("detached");
+ testRangesCached.push(detachedRange);
+}, "Setup");
+
+for (var i = 0; i < testPoints.length; i++) {
+ var node = eval(testPoints[i])[0];
+ var offset = eval(testPoints[i])[1];
+
+ // isPointInRange is an unsigned long, so per WebIDL, we need to treat it
+ // as though it wrapped to an unsigned 32-bit integer.
+ var normalizedOffset = offset % Math.pow(2, 32);
+ if (normalizedOffset < 0) {
+ normalizedOffset += Math.pow(2, 32);
+ }
+
+ for (var j = 0; j < testRanges.length; j++) {
+ test(function() {
+ var range = testRangesCached[j].cloneRange();
+
+ // "If node's root is different from the context object's root,
+ // return false and terminate these steps."
+ if (furthestAncestor(node) !== furthestAncestor(range.startContainer)) {
+ assert_false(range.isPointInRange(node, offset),
+ "Must return false if node has a different root from the context object");
+ return;
+ }
+
+ // "If node is a doctype, throw an "InvalidNodeTypeError" exception
+ // and terminate these steps."
+ if (node.nodeType == Node.DOCUMENT_TYPE_NODE) {
+ assert_throws("INVALID_NODE_TYPE_ERR", function() {
+ range.isPointInRange(node, offset);
+ }, "Must throw InvalidNodeTypeError if node is a doctype");
+ return;
+ }
+
+ // "If offset is greater than node's length, throw an
+ // "IndexSizeError" exception and terminate these steps."
+ if (normalizedOffset > nodeLength(node)) {
+ assert_throws("INDEX_SIZE_ERR", function() {
+ range.isPointInRange(node, offset);
+ }, "Must throw IndexSizeError if offset is greater than length");
+ return;
+ }
+
+ // "If (node, offset) is before start or after end, return false
+ // and terminate these steps."
+ if (getPosition(node, normalizedOffset, range.startContainer, range.startOffset) === "before"
+ || getPosition(node, normalizedOffset, range.endContainer, range.endOffset) === "after") {
+ assert_false(range.isPointInRange(node, offset),
+ "Must return false if point is before start or after end");
+ return;
+ }
+
+ // "Return true."
+ assert_true(range.isPointInRange(node, offset),
+ "Must return true if point is not before start, after end, or in different tree");
+ }, "Point " + i + " " + testPoints[i] + ", range " + j + " " + testRanges[j]);
+ }
+}
+
+testDiv.style.display = "none";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangemutationsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-mutations-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-mutations-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-mutations-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,5826 @@
</span><ins>+
+PASS paras[0].firstChild.splitText(376), with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.splitText(376), with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.splitText(0), with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.splitText(0), with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.splitText(1), with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.splitText(1), with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.splitText(paras[0].firstChild.length), with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.splitText(paras[0].firstChild.length), with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.splitText(1), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.splitText(1), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.splitText(2), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.splitText(2), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.splitText(3), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.splitText(3), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[1].firstChild.splitText(376), with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.splitText(376), with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.splitText(0), with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.splitText(0), with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.splitText(1), with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.splitText(1), with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.splitText(paras[1].firstChild.length), with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.splitText(paras[1].firstChild.length), with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.splitText(1), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.splitText(1), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.splitText(2), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.splitText(2), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.splitText(3), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.splitText(3), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS foreignTextNode.splitText(376), with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.splitText(376), with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.splitText(0), with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.splitText(0), with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.splitText(1), with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.splitText(1), with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.splitText(foreignTextNode.length), with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.splitText(foreignTextNode.length), with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.splitText(1), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.splitText(1), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.splitText(2), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.splitText(2), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.splitText(3), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.splitText(3), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.splitText(376), with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.splitText(376), with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.splitText(0), with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.splitText(0), with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.splitText(1), with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.splitText(1), with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.splitText(xmlTextNode.length), with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.splitText(xmlTextNode.length), with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.splitText(1), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.splitText(1), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.splitText(2), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.splitText(2), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.splitText(3), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.splitText(3), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.splitText(376), with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.splitText(376), with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.splitText(0), with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.splitText(0), with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.splitText(1), with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.splitText(1), with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.splitText(detachedTextNode.length), with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.splitText(detachedTextNode.length), with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.splitText(1), with unselected range on detachedTextNode from 1 to 3 assert_equals: Wrong end offset expected 1 but got 3
+FAIL detachedTextNode.splitText(1), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.splitText(2), with unselected range on detachedTextNode from 1 to 3 assert_equals: Wrong end offset expected 2 but got 3
+FAIL detachedTextNode.splitText(2), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.splitText(3), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.splitText(3), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.splitText(376), with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.splitText(376), with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.splitText(0), with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.splitText(0), with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.splitText(1), with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.splitText(1), with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.splitText(detachedForeignTextNode.length), with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.splitText(detachedForeignTextNode.length), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.splitText(1), with unselected range on detachedForeignTextNode from 1 to 3 assert_equals: Wrong end offset expected 1 but got 3
+FAIL detachedForeignTextNode.splitText(1), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.splitText(2), with unselected range on detachedForeignTextNode from 1 to 3 assert_equals: Wrong end offset expected 2 but got 3
+FAIL detachedForeignTextNode.splitText(2), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.splitText(3), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.splitText(3), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.splitText(376), with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.splitText(376), with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.splitText(0), with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.splitText(0), with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.splitText(1), with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.splitText(1), with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.splitText(detachedXmlTextNode.length), with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.splitText(detachedXmlTextNode.length), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.splitText(1), with unselected range on detachedXmlTextNode from 1 to 3 assert_equals: Wrong end offset expected 1 but got 3
+FAIL detachedXmlTextNode.splitText(1), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.splitText(2), with unselected range on detachedXmlTextNode from 1 to 3 assert_equals: Wrong end offset expected 2 but got 3
+FAIL detachedXmlTextNode.splitText(2), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.splitText(3), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.splitText(3), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS paras[0].firstChild.splitText(1), with unselected range collapsed at (paras[0], 0)
+FAIL paras[0].firstChild.splitText(1), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[0].firstChild.splitText(1), with unselected range on paras[0] from 0 to 1 assert_equals: Wrong end offset expected 2 but got 1
+FAIL paras[0].firstChild.splitText(1), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+FAIL paras[0].firstChild.splitText(1), with unselected range collapsed at (paras[0], 1) assert_equals: Wrong start offset expected 2 but got 1
+FAIL paras[0].firstChild.splitText(1), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[0].firstChild.splitText(1), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Wrong end offset expected 2 but got 1
+FAIL paras[0].firstChild.splitText(1), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+FAIL paras[0].firstChild.splitText(2), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Wrong end offset expected 2 but got 1
+FAIL paras[0].firstChild.splitText(2), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+FAIL paras[0].firstChild.splitText(3), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Wrong end offset expected 2 but got 1
+FAIL paras[0].firstChild.splitText(3), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.splitText(1), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.splitText(1), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.splitText(2), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.splitText(2), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.splitText(3), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.splitText(3), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.insertData(376, "foo"), with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.insertData(376, "foo"), with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.insertData(0, "foo"), with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.insertData(0, "foo"), with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.insertData(1, "foo"), with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.insertData(1, "foo"), with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.insertData(paras[0].firstChild.length, "foo"), with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.insertData(paras[0].firstChild.length, "foo"), with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.insertData(1, "foo"), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.insertData(1, "foo"), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.insertData(2, "foo"), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.insertData(2, "foo"), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.insertData(3, "foo"), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.insertData(3, "foo"), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.insertData(376, ""), with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.insertData(376, ""), with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.insertData(0, ""), with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.insertData(0, ""), with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.insertData(1, ""), with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.insertData(1, ""), with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.insertData(paras[0].firstChild.length, ""), with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.insertData(paras[0].firstChild.length, ""), with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.insertData(1, ""), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.insertData(1, ""), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.insertData(2, ""), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.insertData(2, ""), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.insertData(3, ""), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.insertData(3, ""), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[1].firstChild.insertData(376, "foo"), with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.insertData(376, "foo"), with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.insertData(0, "foo"), with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.insertData(0, "foo"), with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.insertData(1, "foo"), with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.insertData(1, "foo"), with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.insertData(paras[1].firstChild.length, "foo"), with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.insertData(paras[1].firstChild.length, "foo"), with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.insertData(1, "foo"), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.insertData(1, "foo"), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.insertData(2, "foo"), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.insertData(2, "foo"), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.insertData(3, "foo"), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.insertData(3, "foo"), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.insertData(376, ""), with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.insertData(376, ""), with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.insertData(0, ""), with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.insertData(0, ""), with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.insertData(1, ""), with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.insertData(1, ""), with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.insertData(paras[1].firstChild.length, ""), with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.insertData(paras[1].firstChild.length, ""), with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.insertData(1, ""), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.insertData(1, ""), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.insertData(2, ""), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.insertData(2, ""), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.insertData(3, ""), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.insertData(3, ""), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS foreignTextNode.insertData(376, "foo"), with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.insertData(376, "foo"), with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.insertData(0, "foo"), with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.insertData(0, "foo"), with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.insertData(1, "foo"), with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.insertData(1, "foo"), with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.insertData(foreignTextNode.length, "foo"), with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.insertData(foreignTextNode.length, "foo"), with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.insertData(1, "foo"), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.insertData(1, "foo"), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.insertData(2, "foo"), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.insertData(2, "foo"), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.insertData(3, "foo"), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.insertData(3, "foo"), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.insertData(376, ""), with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.insertData(376, ""), with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.insertData(0, ""), with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.insertData(0, ""), with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.insertData(1, ""), with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.insertData(1, ""), with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.insertData(foreignTextNode.length, ""), with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.insertData(foreignTextNode.length, ""), with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.insertData(1, ""), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.insertData(1, ""), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.insertData(2, ""), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.insertData(2, ""), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.insertData(3, ""), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.insertData(3, ""), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.insertData(376, "foo"), with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.insertData(376, "foo"), with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.insertData(0, "foo"), with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.insertData(0, "foo"), with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.insertData(1, "foo"), with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.insertData(1, "foo"), with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.insertData(xmlTextNode.length, "foo"), with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.insertData(xmlTextNode.length, "foo"), with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.insertData(1, "foo"), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.insertData(1, "foo"), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.insertData(2, "foo"), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.insertData(2, "foo"), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.insertData(3, "foo"), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.insertData(3, "foo"), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.insertData(376, ""), with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.insertData(376, ""), with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.insertData(0, ""), with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.insertData(0, ""), with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.insertData(1, ""), with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.insertData(1, ""), with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.insertData(xmlTextNode.length, ""), with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.insertData(xmlTextNode.length, ""), with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.insertData(1, ""), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.insertData(1, ""), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.insertData(2, ""), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.insertData(2, ""), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.insertData(3, ""), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.insertData(3, ""), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.insertData(376, "foo"), with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.insertData(376, "foo"), with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.insertData(0, "foo"), with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.insertData(0, "foo"), with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.insertData(1, "foo"), with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.insertData(1, "foo"), with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.insertData(detachedTextNode.length, "foo"), with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.insertData(detachedTextNode.length, "foo"), with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.insertData(1, "foo"), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.insertData(1, "foo"), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.insertData(2, "foo"), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.insertData(2, "foo"), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.insertData(3, "foo"), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.insertData(3, "foo"), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.insertData(376, ""), with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.insertData(376, ""), with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.insertData(0, ""), with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.insertData(0, ""), with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.insertData(1, ""), with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.insertData(1, ""), with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.insertData(detachedTextNode.length, ""), with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.insertData(detachedTextNode.length, ""), with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.insertData(1, ""), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.insertData(1, ""), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.insertData(2, ""), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.insertData(2, ""), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.insertData(3, ""), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.insertData(3, ""), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.insertData(376, "foo"), with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.insertData(376, "foo"), with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.insertData(0, "foo"), with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.insertData(0, "foo"), with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.insertData(1, "foo"), with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.insertData(1, "foo"), with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.insertData(detachedForeignTextNode.length, "foo"), with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.insertData(detachedForeignTextNode.length, "foo"), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.insertData(1, "foo"), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.insertData(1, "foo"), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.insertData(2, "foo"), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.insertData(2, "foo"), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.insertData(3, "foo"), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.insertData(3, "foo"), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.insertData(376, ""), with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.insertData(376, ""), with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.insertData(0, ""), with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.insertData(0, ""), with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.insertData(1, ""), with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.insertData(1, ""), with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.insertData(detachedForeignTextNode.length, ""), with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.insertData(detachedForeignTextNode.length, ""), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.insertData(1, ""), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.insertData(1, ""), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.insertData(2, ""), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.insertData(2, ""), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.insertData(3, ""), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.insertData(3, ""), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.insertData(376, "foo"), with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.insertData(376, "foo"), with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.insertData(0, "foo"), with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.insertData(0, "foo"), with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.insertData(1, "foo"), with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.insertData(1, "foo"), with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.insertData(detachedXmlTextNode.length, "foo"), with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.insertData(detachedXmlTextNode.length, "foo"), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.insertData(1, "foo"), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.insertData(1, "foo"), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.insertData(2, "foo"), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.insertData(2, "foo"), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.insertData(3, "foo"), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.insertData(3, "foo"), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.insertData(376, ""), with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.insertData(376, ""), with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.insertData(0, ""), with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.insertData(0, ""), with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.insertData(1, ""), with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.insertData(1, ""), with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.insertData(detachedXmlTextNode.length, ""), with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.insertData(detachedXmlTextNode.length, ""), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.insertData(1, ""), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.insertData(1, ""), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.insertData(2, ""), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.insertData(2, ""), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.insertData(3, ""), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.insertData(3, ""), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS comment.insertData(376, "foo"), with unselected range on comment from 0 to 1
+FAIL comment.insertData(376, "foo"), with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.insertData(0, "foo"), with unselected range collapsed at (comment, 0)
+FAIL comment.insertData(0, "foo"), with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.insertData(1, "foo"), with unselected range collapsed at (comment, 1)
+FAIL comment.insertData(1, "foo"), with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.insertData(comment.length, "foo"), with unselected range collapsed at (comment, comment.length)
+FAIL comment.insertData(comment.length, "foo"), with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.insertData(1, "foo"), with unselected range on comment from 1 to 3
+FAIL comment.insertData(1, "foo"), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.insertData(2, "foo"), with unselected range on comment from 1 to 3
+FAIL comment.insertData(2, "foo"), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.insertData(3, "foo"), with unselected range on comment from 1 to 3
+FAIL comment.insertData(3, "foo"), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.insertData(376, ""), with unselected range on comment from 0 to 1
+FAIL comment.insertData(376, ""), with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.insertData(0, ""), with unselected range collapsed at (comment, 0)
+FAIL comment.insertData(0, ""), with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.insertData(1, ""), with unselected range collapsed at (comment, 1)
+FAIL comment.insertData(1, ""), with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.insertData(comment.length, ""), with unselected range collapsed at (comment, comment.length)
+FAIL comment.insertData(comment.length, ""), with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.insertData(1, ""), with unselected range on comment from 1 to 3
+FAIL comment.insertData(1, ""), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.insertData(2, ""), with unselected range on comment from 1 to 3
+FAIL comment.insertData(2, ""), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.insertData(3, ""), with unselected range on comment from 1 to 3
+FAIL comment.insertData(3, ""), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS foreignComment.insertData(376, "foo"), with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.insertData(376, "foo"), with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.insertData(0, "foo"), with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.insertData(0, "foo"), with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.insertData(1, "foo"), with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.insertData(1, "foo"), with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.insertData(foreignComment.length, "foo"), with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.insertData(foreignComment.length, "foo"), with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.insertData(1, "foo"), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.insertData(1, "foo"), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.insertData(2, "foo"), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.insertData(2, "foo"), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.insertData(3, "foo"), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.insertData(3, "foo"), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.insertData(376, ""), with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.insertData(376, ""), with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.insertData(0, ""), with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.insertData(0, ""), with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.insertData(1, ""), with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.insertData(1, ""), with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.insertData(foreignComment.length, ""), with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.insertData(foreignComment.length, ""), with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.insertData(1, ""), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.insertData(1, ""), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.insertData(2, ""), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.insertData(2, ""), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.insertData(3, ""), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.insertData(3, ""), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.insertData(376, "foo"), with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.insertData(376, "foo"), with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.insertData(0, "foo"), with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.insertData(0, "foo"), with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.insertData(1, "foo"), with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.insertData(1, "foo"), with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.insertData(xmlComment.length, "foo"), with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.insertData(xmlComment.length, "foo"), with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.insertData(1, "foo"), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.insertData(1, "foo"), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.insertData(2, "foo"), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.insertData(2, "foo"), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.insertData(3, "foo"), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.insertData(3, "foo"), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.insertData(376, ""), with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.insertData(376, ""), with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.insertData(0, ""), with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.insertData(0, ""), with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.insertData(1, ""), with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.insertData(1, ""), with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.insertData(xmlComment.length, ""), with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.insertData(xmlComment.length, ""), with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.insertData(1, ""), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.insertData(1, ""), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.insertData(2, ""), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.insertData(2, ""), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.insertData(3, ""), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.insertData(3, ""), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.insertData(376, "foo"), with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.insertData(376, "foo"), with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.insertData(0, "foo"), with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.insertData(0, "foo"), with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.insertData(1, "foo"), with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.insertData(1, "foo"), with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.insertData(detachedComment.length, "foo"), with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.insertData(detachedComment.length, "foo"), with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.insertData(1, "foo"), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.insertData(1, "foo"), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.insertData(2, "foo"), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.insertData(2, "foo"), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.insertData(3, "foo"), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.insertData(3, "foo"), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.insertData(376, ""), with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.insertData(376, ""), with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.insertData(0, ""), with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.insertData(0, ""), with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.insertData(1, ""), with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.insertData(1, ""), with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.insertData(detachedComment.length, ""), with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.insertData(detachedComment.length, ""), with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.insertData(1, ""), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.insertData(1, ""), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.insertData(2, ""), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.insertData(2, ""), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.insertData(3, ""), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.insertData(3, ""), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.insertData(376, "foo"), with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.insertData(376, "foo"), with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.insertData(0, "foo"), with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.insertData(0, "foo"), with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.insertData(1, "foo"), with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.insertData(1, "foo"), with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.insertData(detachedForeignComment.length, "foo"), with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.insertData(detachedForeignComment.length, "foo"), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.insertData(1, "foo"), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.insertData(1, "foo"), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.insertData(2, "foo"), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.insertData(2, "foo"), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.insertData(3, "foo"), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.insertData(3, "foo"), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.insertData(376, ""), with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.insertData(376, ""), with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.insertData(0, ""), with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.insertData(0, ""), with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.insertData(1, ""), with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.insertData(1, ""), with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.insertData(detachedForeignComment.length, ""), with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.insertData(detachedForeignComment.length, ""), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.insertData(1, ""), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.insertData(1, ""), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.insertData(2, ""), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.insertData(2, ""), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.insertData(3, ""), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.insertData(3, ""), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.insertData(376, "foo"), with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.insertData(376, "foo"), with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.insertData(0, "foo"), with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.insertData(0, "foo"), with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.insertData(1, "foo"), with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.insertData(1, "foo"), with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.insertData(detachedXmlComment.length, "foo"), with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.insertData(detachedXmlComment.length, "foo"), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.insertData(1, "foo"), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.insertData(1, "foo"), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.insertData(2, "foo"), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.insertData(2, "foo"), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.insertData(3, "foo"), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.insertData(3, "foo"), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.insertData(376, ""), with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.insertData(376, ""), with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.insertData(0, ""), with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.insertData(0, ""), with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.insertData(1, ""), with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.insertData(1, ""), with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.insertData(detachedXmlComment.length, ""), with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.insertData(detachedXmlComment.length, ""), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.insertData(1, ""), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.insertData(1, ""), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.insertData(2, ""), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.insertData(2, ""), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.insertData(3, ""), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.insertData(3, ""), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS paras[0].firstChild.insertData(1, "foo"), with unselected range collapsed at (paras[0], 0)
+FAIL paras[0].firstChild.insertData(1, "foo"), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.insertData(1, "foo"), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].firstChild.insertData(1, "foo"), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.insertData(1, "foo"), with unselected range collapsed at (paras[0], 1)
+FAIL paras[0].firstChild.insertData(1, "foo"), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.insertData(1, "foo"), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.insertData(1, "foo"), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.insertData(2, "foo"), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.insertData(2, "foo"), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.insertData(3, "foo"), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.insertData(3, "foo"), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.insertData(1, "foo"), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.insertData(1, "foo"), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.insertData(2, "foo"), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.insertData(2, "foo"), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.insertData(3, "foo"), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.insertData(3, "foo"), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.appendData("foo"), with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.appendData("foo"), with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.appendData("foo"), with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.appendData("foo"), with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.appendData("foo"), with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.appendData("foo"), with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.appendData("foo"), with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length
+FAIL paras[0].firstChild.appendData("foo"), with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.appendData("foo"), with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length
+FAIL paras[0].firstChild.appendData("foo"), with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.appendData("foo"), with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.appendData("foo"), with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.appendData("foo"), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.appendData("foo"), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.appendData(""), with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.appendData(""), with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.appendData(""), with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.appendData(""), with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.appendData(""), with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.appendData(""), with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.appendData(""), with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length
+FAIL paras[0].firstChild.appendData(""), with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.appendData(""), with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length
+FAIL paras[0].firstChild.appendData(""), with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.appendData(""), with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.appendData(""), with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.appendData(""), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.appendData(""), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[1].firstChild.appendData("foo"), with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.appendData("foo"), with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.appendData("foo"), with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.appendData("foo"), with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.appendData("foo"), with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.appendData("foo"), with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.appendData("foo"), with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length
+FAIL paras[1].firstChild.appendData("foo"), with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS paras[1].firstChild.appendData("foo"), with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length
+FAIL paras[1].firstChild.appendData("foo"), with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+PASS paras[1].firstChild.appendData("foo"), with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.appendData("foo"), with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.appendData("foo"), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.appendData("foo"), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.appendData(""), with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.appendData(""), with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.appendData(""), with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.appendData(""), with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.appendData(""), with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.appendData(""), with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.appendData(""), with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length
+FAIL paras[1].firstChild.appendData(""), with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS paras[1].firstChild.appendData(""), with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length
+FAIL paras[1].firstChild.appendData(""), with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+PASS paras[1].firstChild.appendData(""), with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.appendData(""), with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.appendData(""), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.appendData(""), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS foreignTextNode.appendData("foo"), with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.appendData("foo"), with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.appendData("foo"), with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.appendData("foo"), with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.appendData("foo"), with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.appendData("foo"), with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.appendData("foo"), with unselected range on foreignTextNode from 0 to foreignTextNode.length
+FAIL foreignTextNode.appendData("foo"), with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.appendData("foo"), with unselected range on foreignTextNode from 1 to foreignTextNode.length
+FAIL foreignTextNode.appendData("foo"), with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.appendData("foo"), with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.appendData("foo"), with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.appendData("foo"), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.appendData("foo"), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.appendData(""), with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.appendData(""), with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.appendData(""), with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.appendData(""), with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.appendData(""), with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.appendData(""), with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.appendData(""), with unselected range on foreignTextNode from 0 to foreignTextNode.length
+FAIL foreignTextNode.appendData(""), with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.appendData(""), with unselected range on foreignTextNode from 1 to foreignTextNode.length
+FAIL foreignTextNode.appendData(""), with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.appendData(""), with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.appendData(""), with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.appendData(""), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.appendData(""), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.appendData("foo"), with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.appendData("foo"), with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.appendData("foo"), with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.appendData("foo"), with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.appendData("foo"), with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.appendData("foo"), with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.appendData("foo"), with unselected range on xmlTextNode from 0 to xmlTextNode.length
+FAIL xmlTextNode.appendData("foo"), with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.appendData("foo"), with unselected range on xmlTextNode from 1 to xmlTextNode.length
+FAIL xmlTextNode.appendData("foo"), with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.appendData("foo"), with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.appendData("foo"), with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.appendData("foo"), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.appendData("foo"), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.appendData(""), with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.appendData(""), with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.appendData(""), with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.appendData(""), with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.appendData(""), with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.appendData(""), with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.appendData(""), with unselected range on xmlTextNode from 0 to xmlTextNode.length
+FAIL xmlTextNode.appendData(""), with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.appendData(""), with unselected range on xmlTextNode from 1 to xmlTextNode.length
+FAIL xmlTextNode.appendData(""), with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.appendData(""), with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.appendData(""), with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.appendData(""), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.appendData(""), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.appendData("foo"), with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.appendData("foo"), with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.appendData("foo"), with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.appendData("foo"), with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.appendData("foo"), with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.appendData("foo"), with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.appendData("foo"), with unselected range on detachedTextNode from 0 to detachedTextNode.length
+FAIL detachedTextNode.appendData("foo"), with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.appendData("foo"), with unselected range on detachedTextNode from 1 to detachedTextNode.length
+FAIL detachedTextNode.appendData("foo"), with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.appendData("foo"), with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.appendData("foo"), with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.appendData("foo"), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.appendData("foo"), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.appendData(""), with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.appendData(""), with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.appendData(""), with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.appendData(""), with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.appendData(""), with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.appendData(""), with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.appendData(""), with unselected range on detachedTextNode from 0 to detachedTextNode.length
+FAIL detachedTextNode.appendData(""), with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.appendData(""), with unselected range on detachedTextNode from 1 to detachedTextNode.length
+FAIL detachedTextNode.appendData(""), with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.appendData(""), with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.appendData(""), with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.appendData(""), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.appendData(""), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.appendData("foo"), with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.appendData("foo"), with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.appendData("foo"), with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.appendData("foo"), with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.appendData("foo"), with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.appendData("foo"), with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.appendData("foo"), with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.appendData("foo"), with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.appendData("foo"), with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.appendData("foo"), with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.appendData("foo"), with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.appendData("foo"), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.appendData("foo"), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.appendData("foo"), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.appendData(""), with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.appendData(""), with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.appendData(""), with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.appendData(""), with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.appendData(""), with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.appendData(""), with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.appendData(""), with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.appendData(""), with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.appendData(""), with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.appendData(""), with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.appendData(""), with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.appendData(""), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.appendData(""), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.appendData(""), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.appendData("foo"), with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.appendData("foo"), with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.appendData("foo"), with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.appendData("foo"), with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.appendData("foo"), with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.appendData("foo"), with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.appendData("foo"), with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.appendData("foo"), with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.appendData("foo"), with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.appendData("foo"), with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.appendData("foo"), with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.appendData("foo"), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.appendData("foo"), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.appendData("foo"), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.appendData(""), with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.appendData(""), with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.appendData(""), with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.appendData(""), with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.appendData(""), with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.appendData(""), with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.appendData(""), with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.appendData(""), with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.appendData(""), with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.appendData(""), with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.appendData(""), with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.appendData(""), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.appendData(""), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.appendData(""), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS comment.appendData("foo"), with unselected range on comment from 0 to 1
+FAIL comment.appendData("foo"), with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.appendData("foo"), with unselected range collapsed at (comment, 0)
+FAIL comment.appendData("foo"), with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.appendData("foo"), with unselected range collapsed at (comment, 1)
+FAIL comment.appendData("foo"), with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.appendData("foo"), with unselected range on comment from 0 to comment.length
+FAIL comment.appendData("foo"), with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.appendData("foo"), with unselected range on comment from 1 to comment.length
+FAIL comment.appendData("foo"), with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.appendData("foo"), with unselected range collapsed at (comment, comment.length)
+FAIL comment.appendData("foo"), with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.appendData("foo"), with unselected range on comment from 1 to 3
+FAIL comment.appendData("foo"), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.appendData(""), with unselected range on comment from 0 to 1
+FAIL comment.appendData(""), with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.appendData(""), with unselected range collapsed at (comment, 0)
+FAIL comment.appendData(""), with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.appendData(""), with unselected range collapsed at (comment, 1)
+FAIL comment.appendData(""), with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.appendData(""), with unselected range on comment from 0 to comment.length
+FAIL comment.appendData(""), with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.appendData(""), with unselected range on comment from 1 to comment.length
+FAIL comment.appendData(""), with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.appendData(""), with unselected range collapsed at (comment, comment.length)
+FAIL comment.appendData(""), with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.appendData(""), with unselected range on comment from 1 to 3
+FAIL comment.appendData(""), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS foreignComment.appendData("foo"), with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.appendData("foo"), with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.appendData("foo"), with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.appendData("foo"), with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.appendData("foo"), with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.appendData("foo"), with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.appendData("foo"), with unselected range on foreignComment from 0 to foreignComment.length
+FAIL foreignComment.appendData("foo"), with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.appendData("foo"), with unselected range on foreignComment from 1 to foreignComment.length
+FAIL foreignComment.appendData("foo"), with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.appendData("foo"), with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.appendData("foo"), with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.appendData("foo"), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.appendData("foo"), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.appendData(""), with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.appendData(""), with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.appendData(""), with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.appendData(""), with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.appendData(""), with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.appendData(""), with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.appendData(""), with unselected range on foreignComment from 0 to foreignComment.length
+FAIL foreignComment.appendData(""), with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.appendData(""), with unselected range on foreignComment from 1 to foreignComment.length
+FAIL foreignComment.appendData(""), with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.appendData(""), with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.appendData(""), with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.appendData(""), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.appendData(""), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.appendData("foo"), with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.appendData("foo"), with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.appendData("foo"), with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.appendData("foo"), with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.appendData("foo"), with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.appendData("foo"), with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.appendData("foo"), with unselected range on xmlComment from 0 to xmlComment.length
+FAIL xmlComment.appendData("foo"), with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.appendData("foo"), with unselected range on xmlComment from 1 to xmlComment.length
+FAIL xmlComment.appendData("foo"), with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.appendData("foo"), with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.appendData("foo"), with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.appendData("foo"), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.appendData("foo"), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.appendData(""), with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.appendData(""), with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.appendData(""), with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.appendData(""), with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.appendData(""), with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.appendData(""), with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.appendData(""), with unselected range on xmlComment from 0 to xmlComment.length
+FAIL xmlComment.appendData(""), with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.appendData(""), with unselected range on xmlComment from 1 to xmlComment.length
+FAIL xmlComment.appendData(""), with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.appendData(""), with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.appendData(""), with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.appendData(""), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.appendData(""), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.appendData("foo"), with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.appendData("foo"), with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.appendData("foo"), with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.appendData("foo"), with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.appendData("foo"), with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.appendData("foo"), with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.appendData("foo"), with unselected range on detachedComment from 0 to detachedComment.length
+FAIL detachedComment.appendData("foo"), with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.appendData("foo"), with unselected range on detachedComment from 1 to detachedComment.length
+FAIL detachedComment.appendData("foo"), with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.appendData("foo"), with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.appendData("foo"), with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.appendData("foo"), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.appendData("foo"), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.appendData(""), with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.appendData(""), with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.appendData(""), with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.appendData(""), with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.appendData(""), with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.appendData(""), with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.appendData(""), with unselected range on detachedComment from 0 to detachedComment.length
+FAIL detachedComment.appendData(""), with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.appendData(""), with unselected range on detachedComment from 1 to detachedComment.length
+FAIL detachedComment.appendData(""), with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.appendData(""), with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.appendData(""), with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.appendData(""), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.appendData(""), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.appendData("foo"), with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.appendData("foo"), with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.appendData("foo"), with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.appendData("foo"), with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.appendData("foo"), with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.appendData("foo"), with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.appendData("foo"), with unselected range on detachedForeignComment from 0 to detachedForeignComment.length
+FAIL detachedForeignComment.appendData("foo"), with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.appendData("foo"), with unselected range on detachedForeignComment from 1 to detachedForeignComment.length
+FAIL detachedForeignComment.appendData("foo"), with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.appendData("foo"), with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.appendData("foo"), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.appendData("foo"), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.appendData("foo"), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.appendData(""), with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.appendData(""), with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.appendData(""), with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.appendData(""), with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.appendData(""), with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.appendData(""), with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.appendData(""), with unselected range on detachedForeignComment from 0 to detachedForeignComment.length
+FAIL detachedForeignComment.appendData(""), with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.appendData(""), with unselected range on detachedForeignComment from 1 to detachedForeignComment.length
+FAIL detachedForeignComment.appendData(""), with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.appendData(""), with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.appendData(""), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.appendData(""), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.appendData(""), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.appendData("foo"), with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.appendData("foo"), with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.appendData("foo"), with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.appendData("foo"), with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.appendData("foo"), with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.appendData("foo"), with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.appendData("foo"), with unselected range on detachedXmlComment from 0 to detachedXmlComment.length
+FAIL detachedXmlComment.appendData("foo"), with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.appendData("foo"), with unselected range on detachedXmlComment from 1 to detachedXmlComment.length
+FAIL detachedXmlComment.appendData("foo"), with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.appendData("foo"), with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.appendData("foo"), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.appendData("foo"), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.appendData("foo"), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.appendData(""), with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.appendData(""), with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.appendData(""), with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.appendData(""), with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.appendData(""), with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.appendData(""), with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.appendData(""), with unselected range on detachedXmlComment from 0 to detachedXmlComment.length
+FAIL detachedXmlComment.appendData(""), with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.appendData(""), with unselected range on detachedXmlComment from 1 to detachedXmlComment.length
+FAIL detachedXmlComment.appendData(""), with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.appendData(""), with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.appendData(""), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.appendData(""), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.appendData(""), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS paras[0].firstChild.appendData(""), with unselected range collapsed at (paras[0], 0)
+FAIL paras[0].firstChild.appendData(""), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.appendData(""), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].firstChild.appendData(""), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.appendData(""), with unselected range collapsed at (paras[0], 1)
+FAIL paras[0].firstChild.appendData(""), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.appendData(""), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.appendData(""), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.appendData(""), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.appendData(""), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.appendData("foo"), with unselected range collapsed at (paras[0], 0)
+FAIL paras[0].firstChild.appendData("foo"), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.appendData("foo"), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].firstChild.appendData("foo"), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.appendData("foo"), with unselected range collapsed at (paras[0], 1)
+FAIL paras[0].firstChild.appendData("foo"), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.appendData("foo"), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.appendData("foo"), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.appendData("foo"), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.appendData("foo"), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.deleteData(376, 2), with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.deleteData(376, 2), with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.deleteData(0, 2), with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.deleteData(0, 2), with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.deleteData(1, 2), with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.deleteData(1, 2), with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.deleteData(paras[0].firstChild.length, 2), with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.deleteData(paras[0].firstChild.length, 2), with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.deleteData(1, 2), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.deleteData(1, 2), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.deleteData(2, 2), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.deleteData(2, 2), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.deleteData(3, 2), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.deleteData(3, 2), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.deleteData(376, 0), with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.deleteData(376, 0), with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.deleteData(0, 0), with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.deleteData(0, 0), with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.deleteData(1, 0), with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.deleteData(1, 0), with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.deleteData(paras[0].firstChild.length, 0), with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.deleteData(paras[0].firstChild.length, 0), with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.deleteData(1, 0), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.deleteData(1, 0), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.deleteData(2, 0), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.deleteData(2, 0), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.deleteData(3, 0), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.deleteData(3, 0), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.deleteData(376, 631), with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.deleteData(376, 631), with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.deleteData(0, 631), with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.deleteData(0, 631), with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.deleteData(1, 631), with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.deleteData(1, 631), with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.deleteData(paras[0].firstChild.length, 631), with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.deleteData(paras[0].firstChild.length, 631), with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.deleteData(1, 631), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.deleteData(1, 631), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.deleteData(2, 631), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.deleteData(2, 631), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.deleteData(3, 631), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.deleteData(3, 631), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[1].firstChild.deleteData(376, 2), with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.deleteData(376, 2), with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.deleteData(0, 2), with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.deleteData(0, 2), with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.deleteData(1, 2), with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.deleteData(1, 2), with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.deleteData(paras[1].firstChild.length, 2), with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.deleteData(paras[1].firstChild.length, 2), with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.deleteData(1, 2), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.deleteData(1, 2), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.deleteData(2, 2), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.deleteData(2, 2), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.deleteData(3, 2), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.deleteData(3, 2), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.deleteData(376, 0), with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.deleteData(376, 0), with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.deleteData(0, 0), with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.deleteData(0, 0), with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.deleteData(1, 0), with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.deleteData(1, 0), with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.deleteData(paras[1].firstChild.length, 0), with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.deleteData(paras[1].firstChild.length, 0), with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.deleteData(1, 0), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.deleteData(1, 0), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.deleteData(2, 0), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.deleteData(2, 0), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.deleteData(3, 0), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.deleteData(3, 0), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.deleteData(376, 631), with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.deleteData(376, 631), with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.deleteData(0, 631), with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.deleteData(0, 631), with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.deleteData(1, 631), with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.deleteData(1, 631), with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.deleteData(paras[1].firstChild.length, 631), with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.deleteData(paras[1].firstChild.length, 631), with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.deleteData(1, 631), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.deleteData(1, 631), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.deleteData(2, 631), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.deleteData(2, 631), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.deleteData(3, 631), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.deleteData(3, 631), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS foreignTextNode.deleteData(376, 2), with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.deleteData(376, 2), with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(0, 2), with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.deleteData(0, 2), with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(1, 2), with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.deleteData(1, 2), with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(foreignTextNode.length, 2), with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.deleteData(foreignTextNode.length, 2), with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(1, 2), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.deleteData(1, 2), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(2, 2), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.deleteData(2, 2), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(3, 2), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.deleteData(3, 2), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(376, 0), with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.deleteData(376, 0), with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(0, 0), with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.deleteData(0, 0), with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(1, 0), with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.deleteData(1, 0), with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(foreignTextNode.length, 0), with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.deleteData(foreignTextNode.length, 0), with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(1, 0), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.deleteData(1, 0), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(2, 0), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.deleteData(2, 0), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(3, 0), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.deleteData(3, 0), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(376, 631), with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.deleteData(376, 631), with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(0, 631), with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.deleteData(0, 631), with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(1, 631), with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.deleteData(1, 631), with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(foreignTextNode.length, 631), with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.deleteData(foreignTextNode.length, 631), with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(1, 631), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.deleteData(1, 631), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(2, 631), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.deleteData(2, 631), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.deleteData(3, 631), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.deleteData(3, 631), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(376, 2), with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.deleteData(376, 2), with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(0, 2), with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.deleteData(0, 2), with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(1, 2), with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.deleteData(1, 2), with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(xmlTextNode.length, 2), with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.deleteData(xmlTextNode.length, 2), with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(1, 2), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.deleteData(1, 2), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(2, 2), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.deleteData(2, 2), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(3, 2), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.deleteData(3, 2), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(376, 0), with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.deleteData(376, 0), with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(0, 0), with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.deleteData(0, 0), with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(1, 0), with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.deleteData(1, 0), with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(xmlTextNode.length, 0), with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.deleteData(xmlTextNode.length, 0), with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(1, 0), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.deleteData(1, 0), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(2, 0), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.deleteData(2, 0), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(3, 0), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.deleteData(3, 0), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(376, 631), with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.deleteData(376, 631), with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(0, 631), with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.deleteData(0, 631), with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(1, 631), with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.deleteData(1, 631), with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(xmlTextNode.length, 631), with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.deleteData(xmlTextNode.length, 631), with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(1, 631), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.deleteData(1, 631), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(2, 631), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.deleteData(2, 631), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.deleteData(3, 631), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.deleteData(3, 631), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(376, 2), with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.deleteData(376, 2), with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(0, 2), with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.deleteData(0, 2), with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(1, 2), with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.deleteData(1, 2), with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(detachedTextNode.length, 2), with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.deleteData(detachedTextNode.length, 2), with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(1, 2), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.deleteData(1, 2), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(2, 2), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.deleteData(2, 2), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(3, 2), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.deleteData(3, 2), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(376, 0), with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.deleteData(376, 0), with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(0, 0), with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.deleteData(0, 0), with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(1, 0), with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.deleteData(1, 0), with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(detachedTextNode.length, 0), with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.deleteData(detachedTextNode.length, 0), with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(1, 0), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.deleteData(1, 0), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(2, 0), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.deleteData(2, 0), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(3, 0), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.deleteData(3, 0), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(376, 631), with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.deleteData(376, 631), with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(0, 631), with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.deleteData(0, 631), with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(1, 631), with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.deleteData(1, 631), with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(detachedTextNode.length, 631), with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.deleteData(detachedTextNode.length, 631), with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(1, 631), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.deleteData(1, 631), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(2, 631), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.deleteData(2, 631), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.deleteData(3, 631), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.deleteData(3, 631), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(376, 2), with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.deleteData(376, 2), with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(0, 2), with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.deleteData(0, 2), with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(1, 2), with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.deleteData(1, 2), with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(detachedForeignTextNode.length, 2), with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.deleteData(detachedForeignTextNode.length, 2), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(1, 2), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.deleteData(1, 2), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(2, 2), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.deleteData(2, 2), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(3, 2), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.deleteData(3, 2), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(376, 0), with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.deleteData(376, 0), with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(0, 0), with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.deleteData(0, 0), with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(1, 0), with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.deleteData(1, 0), with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(detachedForeignTextNode.length, 0), with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.deleteData(detachedForeignTextNode.length, 0), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(1, 0), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.deleteData(1, 0), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(2, 0), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.deleteData(2, 0), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(3, 0), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.deleteData(3, 0), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(376, 631), with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.deleteData(376, 631), with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(0, 631), with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.deleteData(0, 631), with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(1, 631), with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.deleteData(1, 631), with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(detachedForeignTextNode.length, 631), with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.deleteData(detachedForeignTextNode.length, 631), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(1, 631), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.deleteData(1, 631), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(2, 631), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.deleteData(2, 631), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.deleteData(3, 631), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.deleteData(3, 631), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(376, 2), with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.deleteData(376, 2), with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(0, 2), with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.deleteData(0, 2), with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(1, 2), with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.deleteData(1, 2), with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(detachedXmlTextNode.length, 2), with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.deleteData(detachedXmlTextNode.length, 2), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(1, 2), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.deleteData(1, 2), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(2, 2), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.deleteData(2, 2), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(3, 2), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.deleteData(3, 2), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(376, 0), with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.deleteData(376, 0), with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(0, 0), with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.deleteData(0, 0), with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(1, 0), with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.deleteData(1, 0), with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(detachedXmlTextNode.length, 0), with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.deleteData(detachedXmlTextNode.length, 0), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(1, 0), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.deleteData(1, 0), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(2, 0), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.deleteData(2, 0), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(3, 0), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.deleteData(3, 0), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(376, 631), with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.deleteData(376, 631), with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(0, 631), with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.deleteData(0, 631), with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(1, 631), with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.deleteData(1, 631), with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(detachedXmlTextNode.length, 631), with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.deleteData(detachedXmlTextNode.length, 631), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(1, 631), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.deleteData(1, 631), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(2, 631), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.deleteData(2, 631), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.deleteData(3, 631), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.deleteData(3, 631), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS comment.deleteData(376, 2), with unselected range on comment from 0 to 1
+FAIL comment.deleteData(376, 2), with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(0, 2), with unselected range collapsed at (comment, 0)
+FAIL comment.deleteData(0, 2), with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(1, 2), with unselected range collapsed at (comment, 1)
+FAIL comment.deleteData(1, 2), with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(comment.length, 2), with unselected range collapsed at (comment, comment.length)
+FAIL comment.deleteData(comment.length, 2), with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(1, 2), with unselected range on comment from 1 to 3
+FAIL comment.deleteData(1, 2), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(2, 2), with unselected range on comment from 1 to 3
+FAIL comment.deleteData(2, 2), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(3, 2), with unselected range on comment from 1 to 3
+FAIL comment.deleteData(3, 2), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(376, 0), with unselected range on comment from 0 to 1
+FAIL comment.deleteData(376, 0), with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(0, 0), with unselected range collapsed at (comment, 0)
+FAIL comment.deleteData(0, 0), with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(1, 0), with unselected range collapsed at (comment, 1)
+FAIL comment.deleteData(1, 0), with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(comment.length, 0), with unselected range collapsed at (comment, comment.length)
+FAIL comment.deleteData(comment.length, 0), with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(1, 0), with unselected range on comment from 1 to 3
+FAIL comment.deleteData(1, 0), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(2, 0), with unselected range on comment from 1 to 3
+FAIL comment.deleteData(2, 0), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(3, 0), with unselected range on comment from 1 to 3
+FAIL comment.deleteData(3, 0), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(376, 631), with unselected range on comment from 0 to 1
+FAIL comment.deleteData(376, 631), with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(0, 631), with unselected range collapsed at (comment, 0)
+FAIL comment.deleteData(0, 631), with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(1, 631), with unselected range collapsed at (comment, 1)
+FAIL comment.deleteData(1, 631), with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(comment.length, 631), with unselected range collapsed at (comment, comment.length)
+FAIL comment.deleteData(comment.length, 631), with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(1, 631), with unselected range on comment from 1 to 3
+FAIL comment.deleteData(1, 631), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(2, 631), with unselected range on comment from 1 to 3
+FAIL comment.deleteData(2, 631), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.deleteData(3, 631), with unselected range on comment from 1 to 3
+FAIL comment.deleteData(3, 631), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS foreignComment.deleteData(376, 2), with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.deleteData(376, 2), with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(0, 2), with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.deleteData(0, 2), with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(1, 2), with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.deleteData(1, 2), with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(foreignComment.length, 2), with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.deleteData(foreignComment.length, 2), with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(1, 2), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.deleteData(1, 2), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(2, 2), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.deleteData(2, 2), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(3, 2), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.deleteData(3, 2), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(376, 0), with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.deleteData(376, 0), with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(0, 0), with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.deleteData(0, 0), with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(1, 0), with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.deleteData(1, 0), with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(foreignComment.length, 0), with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.deleteData(foreignComment.length, 0), with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(1, 0), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.deleteData(1, 0), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(2, 0), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.deleteData(2, 0), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(3, 0), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.deleteData(3, 0), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(376, 631), with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.deleteData(376, 631), with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(0, 631), with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.deleteData(0, 631), with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(1, 631), with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.deleteData(1, 631), with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(foreignComment.length, 631), with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.deleteData(foreignComment.length, 631), with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(1, 631), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.deleteData(1, 631), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(2, 631), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.deleteData(2, 631), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.deleteData(3, 631), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.deleteData(3, 631), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(376, 2), with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.deleteData(376, 2), with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(0, 2), with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.deleteData(0, 2), with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(1, 2), with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.deleteData(1, 2), with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(xmlComment.length, 2), with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.deleteData(xmlComment.length, 2), with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(1, 2), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.deleteData(1, 2), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(2, 2), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.deleteData(2, 2), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(3, 2), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.deleteData(3, 2), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(376, 0), with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.deleteData(376, 0), with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(0, 0), with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.deleteData(0, 0), with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(1, 0), with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.deleteData(1, 0), with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(xmlComment.length, 0), with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.deleteData(xmlComment.length, 0), with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(1, 0), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.deleteData(1, 0), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(2, 0), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.deleteData(2, 0), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(3, 0), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.deleteData(3, 0), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(376, 631), with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.deleteData(376, 631), with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(0, 631), with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.deleteData(0, 631), with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(1, 631), with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.deleteData(1, 631), with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(xmlComment.length, 631), with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.deleteData(xmlComment.length, 631), with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(1, 631), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.deleteData(1, 631), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(2, 631), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.deleteData(2, 631), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.deleteData(3, 631), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.deleteData(3, 631), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(376, 2), with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.deleteData(376, 2), with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(0, 2), with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.deleteData(0, 2), with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(1, 2), with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.deleteData(1, 2), with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(detachedComment.length, 2), with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.deleteData(detachedComment.length, 2), with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(1, 2), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.deleteData(1, 2), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(2, 2), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.deleteData(2, 2), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(3, 2), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.deleteData(3, 2), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(376, 0), with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.deleteData(376, 0), with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(0, 0), with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.deleteData(0, 0), with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(1, 0), with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.deleteData(1, 0), with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(detachedComment.length, 0), with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.deleteData(detachedComment.length, 0), with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(1, 0), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.deleteData(1, 0), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(2, 0), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.deleteData(2, 0), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(3, 0), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.deleteData(3, 0), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(376, 631), with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.deleteData(376, 631), with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(0, 631), with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.deleteData(0, 631), with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(1, 631), with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.deleteData(1, 631), with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(detachedComment.length, 631), with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.deleteData(detachedComment.length, 631), with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(1, 631), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.deleteData(1, 631), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(2, 631), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.deleteData(2, 631), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.deleteData(3, 631), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.deleteData(3, 631), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(376, 2), with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.deleteData(376, 2), with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(0, 2), with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.deleteData(0, 2), with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(1, 2), with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.deleteData(1, 2), with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(detachedForeignComment.length, 2), with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.deleteData(detachedForeignComment.length, 2), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(1, 2), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.deleteData(1, 2), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(2, 2), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.deleteData(2, 2), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(3, 2), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.deleteData(3, 2), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(376, 0), with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.deleteData(376, 0), with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(0, 0), with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.deleteData(0, 0), with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(1, 0), with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.deleteData(1, 0), with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(detachedForeignComment.length, 0), with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.deleteData(detachedForeignComment.length, 0), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(1, 0), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.deleteData(1, 0), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(2, 0), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.deleteData(2, 0), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(3, 0), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.deleteData(3, 0), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(376, 631), with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.deleteData(376, 631), with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(0, 631), with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.deleteData(0, 631), with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(1, 631), with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.deleteData(1, 631), with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(detachedForeignComment.length, 631), with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.deleteData(detachedForeignComment.length, 631), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(1, 631), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.deleteData(1, 631), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(2, 631), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.deleteData(2, 631), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.deleteData(3, 631), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.deleteData(3, 631), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(376, 2), with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.deleteData(376, 2), with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(0, 2), with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.deleteData(0, 2), with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(1, 2), with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.deleteData(1, 2), with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(detachedXmlComment.length, 2), with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.deleteData(detachedXmlComment.length, 2), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(1, 2), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.deleteData(1, 2), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(2, 2), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.deleteData(2, 2), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(3, 2), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.deleteData(3, 2), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(376, 0), with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.deleteData(376, 0), with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(0, 0), with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.deleteData(0, 0), with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(1, 0), with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.deleteData(1, 0), with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(detachedXmlComment.length, 0), with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.deleteData(detachedXmlComment.length, 0), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(1, 0), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.deleteData(1, 0), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(2, 0), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.deleteData(2, 0), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(3, 0), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.deleteData(3, 0), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(376, 631), with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.deleteData(376, 631), with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(0, 631), with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.deleteData(0, 631), with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(1, 631), with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.deleteData(1, 631), with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(detachedXmlComment.length, 631), with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.deleteData(detachedXmlComment.length, 631), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(1, 631), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.deleteData(1, 631), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(2, 631), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.deleteData(2, 631), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.deleteData(3, 631), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.deleteData(3, 631), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS paras[0].firstChild.deleteData(1, 2), with unselected range collapsed at (paras[0], 0)
+FAIL paras[0].firstChild.deleteData(1, 2), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.deleteData(1, 2), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].firstChild.deleteData(1, 2), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.deleteData(1, 2), with unselected range collapsed at (paras[0], 1)
+FAIL paras[0].firstChild.deleteData(1, 2), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.deleteData(1, 2), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.deleteData(1, 2), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.deleteData(2, 2), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.deleteData(2, 2), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.deleteData(3, 2), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.deleteData(3, 2), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.deleteData(1, 2), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.deleteData(1, 2), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.deleteData(2, 2), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.deleteData(2, 2), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.deleteData(3, 2), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.deleteData(3, 2), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.replaceData(376, 0, "foo"), with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.replaceData(376, 0, "foo"), with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.replaceData(0, 0, "foo"), with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.replaceData(0, 0, "foo"), with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 0, "foo"), with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.replaceData(1, 0, "foo"), with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(paras[0].firstChild.length, 0, "foo"), with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.replaceData(paras[0].firstChild.length, 0, "foo"), with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 0, "foo"), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(1, 0, "foo"), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(2, 0, "foo"), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(2, 0, "foo"), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(3, 0, "foo"), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(3, 0, "foo"), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(376, 0, ""), with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.replaceData(376, 0, ""), with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.replaceData(0, 0, ""), with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.replaceData(0, 0, ""), with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 0, ""), with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.replaceData(1, 0, ""), with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(paras[0].firstChild.length, 0, ""), with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.replaceData(paras[0].firstChild.length, 0, ""), with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 0, ""), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(1, 0, ""), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(2, 0, ""), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(2, 0, ""), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(3, 0, ""), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(3, 0, ""), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(376, 1, "foo"), with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.replaceData(376, 1, "foo"), with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.replaceData(0, 1, "foo"), with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.replaceData(0, 1, "foo"), with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 1, "foo"), with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.replaceData(1, 1, "foo"), with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(paras[0].firstChild.length, 1, "foo"), with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.replaceData(paras[0].firstChild.length, 1, "foo"), with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 1, "foo"), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(1, 1, "foo"), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(2, 1, "foo"), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(2, 1, "foo"), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(3, 1, "foo"), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(3, 1, "foo"), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(376, 1, ""), with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.replaceData(376, 1, ""), with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.replaceData(0, 1, ""), with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.replaceData(0, 1, ""), with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 1, ""), with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.replaceData(1, 1, ""), with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(paras[0].firstChild.length, 1, ""), with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.replaceData(paras[0].firstChild.length, 1, ""), with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 1, ""), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(1, 1, ""), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(2, 1, ""), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(2, 1, ""), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(3, 1, ""), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(3, 1, ""), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(376, 47, "foo"), with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.replaceData(376, 47, "foo"), with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.replaceData(0, 47, "foo"), with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.replaceData(0, 47, "foo"), with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 47, "foo"), with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.replaceData(1, 47, "foo"), with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(paras[0].firstChild.length, 47, "foo"), with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.replaceData(paras[0].firstChild.length, 47, "foo"), with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 47, "foo"), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(1, 47, "foo"), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(2, 47, "foo"), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(2, 47, "foo"), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(3, 47, "foo"), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(3, 47, "foo"), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(376, 47, ""), with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.replaceData(376, 47, ""), with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.replaceData(0, 47, ""), with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.replaceData(0, 47, ""), with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 47, ""), with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.replaceData(1, 47, ""), with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(paras[0].firstChild.length, 47, ""), with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.replaceData(paras[0].firstChild.length, 47, ""), with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 47, ""), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(1, 47, ""), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(2, 47, ""), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(2, 47, ""), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[0].firstChild.replaceData(3, 47, ""), with unselected range on paras[0].firstChild from 1 to 3
+FAIL paras[0].firstChild.replaceData(3, 47, ""), with selected range on paras[0].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b" but got object "b̈"
+PASS paras[1].firstChild.replaceData(376, 0, "foo"), with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.replaceData(376, 0, "foo"), with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.replaceData(0, 0, "foo"), with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.replaceData(0, 0, "foo"), with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(1, 0, "foo"), with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.replaceData(1, 0, "foo"), with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(paras[1].firstChild.length, 0, "foo"), with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.replaceData(paras[1].firstChild.length, 0, "foo"), with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(1, 0, "foo"), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(1, 0, "foo"), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(2, 0, "foo"), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(2, 0, "foo"), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(3, 0, "foo"), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(3, 0, "foo"), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(376, 0, ""), with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.replaceData(376, 0, ""), with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.replaceData(0, 0, ""), with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.replaceData(0, 0, ""), with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(1, 0, ""), with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.replaceData(1, 0, ""), with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(paras[1].firstChild.length, 0, ""), with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.replaceData(paras[1].firstChild.length, 0, ""), with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(1, 0, ""), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(1, 0, ""), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(2, 0, ""), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(2, 0, ""), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(3, 0, ""), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(3, 0, ""), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(376, 1, "foo"), with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.replaceData(376, 1, "foo"), with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.replaceData(0, 1, "foo"), with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.replaceData(0, 1, "foo"), with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(1, 1, "foo"), with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.replaceData(1, 1, "foo"), with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(paras[1].firstChild.length, 1, "foo"), with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.replaceData(paras[1].firstChild.length, 1, "foo"), with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(1, 1, "foo"), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(1, 1, "foo"), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(2, 1, "foo"), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(2, 1, "foo"), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(3, 1, "foo"), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(3, 1, "foo"), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(376, 1, ""), with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.replaceData(376, 1, ""), with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.replaceData(0, 1, ""), with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.replaceData(0, 1, ""), with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(1, 1, ""), with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.replaceData(1, 1, ""), with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(paras[1].firstChild.length, 1, ""), with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.replaceData(paras[1].firstChild.length, 1, ""), with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(1, 1, ""), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(1, 1, ""), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(2, 1, ""), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(2, 1, ""), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(3, 1, ""), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(3, 1, ""), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(376, 47, "foo"), with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.replaceData(376, 47, "foo"), with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.replaceData(0, 47, "foo"), with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.replaceData(0, 47, "foo"), with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(1, 47, "foo"), with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.replaceData(1, 47, "foo"), with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(paras[1].firstChild.length, 47, "foo"), with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.replaceData(paras[1].firstChild.length, 47, "foo"), with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(1, 47, "foo"), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(1, 47, "foo"), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(2, 47, "foo"), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(2, 47, "foo"), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(3, 47, "foo"), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(3, 47, "foo"), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(376, 47, ""), with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.replaceData(376, 47, ""), with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.replaceData(0, 47, ""), with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.replaceData(0, 47, ""), with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(1, 47, ""), with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.replaceData(1, 47, ""), with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(paras[1].firstChild.length, 47, ""), with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.replaceData(paras[1].firstChild.length, 47, ""), with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.replaceData(1, 47, ""), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(1, 47, ""), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(2, 47, ""), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(2, 47, ""), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS paras[1].firstChild.replaceData(3, 47, ""), with unselected range on paras[1].firstChild from 1 to 3
+FAIL paras[1].firstChild.replaceData(3, 47, ""), with selected range on paras[1].firstChild from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jk" but got object ""
+PASS foreignTextNode.replaceData(376, 0, "foo"), with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.replaceData(376, 0, "foo"), with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(0, 0, "foo"), with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.replaceData(0, 0, "foo"), with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(1, 0, "foo"), with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.replaceData(1, 0, "foo"), with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(foreignTextNode.length, 0, "foo"), with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.replaceData(foreignTextNode.length, 0, "foo"), with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(1, 0, "foo"), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(1, 0, "foo"), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(2, 0, "foo"), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(2, 0, "foo"), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(3, 0, "foo"), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(3, 0, "foo"), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(376, 0, ""), with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.replaceData(376, 0, ""), with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(0, 0, ""), with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.replaceData(0, 0, ""), with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(1, 0, ""), with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.replaceData(1, 0, ""), with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(foreignTextNode.length, 0, ""), with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.replaceData(foreignTextNode.length, 0, ""), with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(1, 0, ""), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(1, 0, ""), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(2, 0, ""), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(2, 0, ""), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(3, 0, ""), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(3, 0, ""), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(376, 1, "foo"), with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.replaceData(376, 1, "foo"), with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(0, 1, "foo"), with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.replaceData(0, 1, "foo"), with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(1, 1, "foo"), with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.replaceData(1, 1, "foo"), with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(foreignTextNode.length, 1, "foo"), with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.replaceData(foreignTextNode.length, 1, "foo"), with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(1, 1, "foo"), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(1, 1, "foo"), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(2, 1, "foo"), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(2, 1, "foo"), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(3, 1, "foo"), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(3, 1, "foo"), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(376, 1, ""), with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.replaceData(376, 1, ""), with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(0, 1, ""), with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.replaceData(0, 1, ""), with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(1, 1, ""), with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.replaceData(1, 1, ""), with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(foreignTextNode.length, 1, ""), with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.replaceData(foreignTextNode.length, 1, ""), with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(1, 1, ""), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(1, 1, ""), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(2, 1, ""), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(2, 1, ""), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(3, 1, ""), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(3, 1, ""), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(376, 47, "foo"), with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.replaceData(376, 47, "foo"), with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(0, 47, "foo"), with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.replaceData(0, 47, "foo"), with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(1, 47, "foo"), with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.replaceData(1, 47, "foo"), with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(foreignTextNode.length, 47, "foo"), with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.replaceData(foreignTextNode.length, 47, "foo"), with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(1, 47, "foo"), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(1, 47, "foo"), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(2, 47, "foo"), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(2, 47, "foo"), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(3, 47, "foo"), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(3, 47, "foo"), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(376, 47, ""), with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.replaceData(376, 47, ""), with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(0, 47, ""), with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.replaceData(0, 47, ""), with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(1, 47, ""), with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.replaceData(1, 47, ""), with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(foreignTextNode.length, 47, ""), with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.replaceData(foreignTextNode.length, 47, ""), with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(1, 47, ""), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(1, 47, ""), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(2, 47, ""), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(2, 47, ""), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.replaceData(3, 47, ""), with unselected range on foreignTextNode from 1 to 3
+FAIL foreignTextNode.replaceData(3, 47, ""), with selected range on foreignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(376, 0, "foo"), with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.replaceData(376, 0, "foo"), with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(0, 0, "foo"), with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.replaceData(0, 0, "foo"), with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(1, 0, "foo"), with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.replaceData(1, 0, "foo"), with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(xmlTextNode.length, 0, "foo"), with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.replaceData(xmlTextNode.length, 0, "foo"), with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(1, 0, "foo"), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(1, 0, "foo"), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(2, 0, "foo"), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(2, 0, "foo"), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(3, 0, "foo"), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(3, 0, "foo"), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(376, 0, ""), with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.replaceData(376, 0, ""), with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(0, 0, ""), with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.replaceData(0, 0, ""), with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(1, 0, ""), with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.replaceData(1, 0, ""), with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(xmlTextNode.length, 0, ""), with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.replaceData(xmlTextNode.length, 0, ""), with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(1, 0, ""), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(1, 0, ""), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(2, 0, ""), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(2, 0, ""), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(3, 0, ""), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(3, 0, ""), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(376, 1, "foo"), with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.replaceData(376, 1, "foo"), with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(0, 1, "foo"), with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.replaceData(0, 1, "foo"), with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(1, 1, "foo"), with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.replaceData(1, 1, "foo"), with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(xmlTextNode.length, 1, "foo"), with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.replaceData(xmlTextNode.length, 1, "foo"), with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(1, 1, "foo"), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(1, 1, "foo"), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(2, 1, "foo"), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(2, 1, "foo"), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(3, 1, "foo"), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(3, 1, "foo"), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(376, 1, ""), with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.replaceData(376, 1, ""), with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(0, 1, ""), with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.replaceData(0, 1, ""), with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(1, 1, ""), with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.replaceData(1, 1, ""), with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(xmlTextNode.length, 1, ""), with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.replaceData(xmlTextNode.length, 1, ""), with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(1, 1, ""), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(1, 1, ""), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(2, 1, ""), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(2, 1, ""), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(3, 1, ""), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(3, 1, ""), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(376, 47, "foo"), with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.replaceData(376, 47, "foo"), with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(0, 47, "foo"), with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.replaceData(0, 47, "foo"), with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(1, 47, "foo"), with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.replaceData(1, 47, "foo"), with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(xmlTextNode.length, 47, "foo"), with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.replaceData(xmlTextNode.length, 47, "foo"), with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(1, 47, "foo"), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(1, 47, "foo"), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(2, 47, "foo"), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(2, 47, "foo"), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(3, 47, "foo"), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(3, 47, "foo"), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(376, 47, ""), with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.replaceData(376, 47, ""), with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(0, 47, ""), with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.replaceData(0, 47, ""), with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(1, 47, ""), with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.replaceData(1, 47, ""), with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(xmlTextNode.length, 47, ""), with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.replaceData(xmlTextNode.length, 47, ""), with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(1, 47, ""), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(1, 47, ""), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(2, 47, ""), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(2, 47, ""), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.replaceData(3, 47, ""), with unselected range on xmlTextNode from 1 to 3
+FAIL xmlTextNode.replaceData(3, 47, ""), with selected range on xmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(376, 0, "foo"), with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.replaceData(376, 0, "foo"), with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(0, 0, "foo"), with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.replaceData(0, 0, "foo"), with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(1, 0, "foo"), with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.replaceData(1, 0, "foo"), with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(detachedTextNode.length, 0, "foo"), with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.replaceData(detachedTextNode.length, 0, "foo"), with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(1, 0, "foo"), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(1, 0, "foo"), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(2, 0, "foo"), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(2, 0, "foo"), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(3, 0, "foo"), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(3, 0, "foo"), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(376, 0, ""), with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.replaceData(376, 0, ""), with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(0, 0, ""), with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.replaceData(0, 0, ""), with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(1, 0, ""), with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.replaceData(1, 0, ""), with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(detachedTextNode.length, 0, ""), with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.replaceData(detachedTextNode.length, 0, ""), with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(1, 0, ""), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(1, 0, ""), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(2, 0, ""), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(2, 0, ""), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(3, 0, ""), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(3, 0, ""), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(376, 1, "foo"), with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.replaceData(376, 1, "foo"), with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(0, 1, "foo"), with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.replaceData(0, 1, "foo"), with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(1, 1, "foo"), with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.replaceData(1, 1, "foo"), with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(detachedTextNode.length, 1, "foo"), with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.replaceData(detachedTextNode.length, 1, "foo"), with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(1, 1, "foo"), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(1, 1, "foo"), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(2, 1, "foo"), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(2, 1, "foo"), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(3, 1, "foo"), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(3, 1, "foo"), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(376, 1, ""), with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.replaceData(376, 1, ""), with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(0, 1, ""), with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.replaceData(0, 1, ""), with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(1, 1, ""), with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.replaceData(1, 1, ""), with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(detachedTextNode.length, 1, ""), with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.replaceData(detachedTextNode.length, 1, ""), with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(1, 1, ""), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(1, 1, ""), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(2, 1, ""), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(2, 1, ""), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(3, 1, ""), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(3, 1, ""), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(376, 47, "foo"), with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.replaceData(376, 47, "foo"), with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(0, 47, "foo"), with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.replaceData(0, 47, "foo"), with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(1, 47, "foo"), with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.replaceData(1, 47, "foo"), with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(detachedTextNode.length, 47, "foo"), with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.replaceData(detachedTextNode.length, 47, "foo"), with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(1, 47, "foo"), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(1, 47, "foo"), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(2, 47, "foo"), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(2, 47, "foo"), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(3, 47, "foo"), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(3, 47, "foo"), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(376, 47, ""), with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.replaceData(376, 47, ""), with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(0, 47, ""), with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.replaceData(0, 47, ""), with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(1, 47, ""), with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.replaceData(1, 47, ""), with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(detachedTextNode.length, 47, ""), with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.replaceData(detachedTextNode.length, 47, ""), with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(1, 47, ""), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(1, 47, ""), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(2, 47, ""), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(2, 47, ""), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.replaceData(3, 47, ""), with unselected range on detachedTextNode from 1 to 3
+FAIL detachedTextNode.replaceData(3, 47, ""), with selected range on detachedTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(376, 0, "foo"), with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.replaceData(376, 0, "foo"), with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(0, 0, "foo"), with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.replaceData(0, 0, "foo"), with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(1, 0, "foo"), with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.replaceData(1, 0, "foo"), with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 0, "foo"), with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 0, "foo"), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(1, 0, "foo"), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(1, 0, "foo"), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(2, 0, "foo"), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(2, 0, "foo"), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(3, 0, "foo"), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(3, 0, "foo"), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(376, 0, ""), with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.replaceData(376, 0, ""), with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(0, 0, ""), with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.replaceData(0, 0, ""), with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(1, 0, ""), with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.replaceData(1, 0, ""), with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 0, ""), with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 0, ""), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(1, 0, ""), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(1, 0, ""), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(2, 0, ""), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(2, 0, ""), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(3, 0, ""), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(3, 0, ""), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(376, 1, "foo"), with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.replaceData(376, 1, "foo"), with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(0, 1, "foo"), with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.replaceData(0, 1, "foo"), with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(1, 1, "foo"), with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.replaceData(1, 1, "foo"), with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 1, "foo"), with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 1, "foo"), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(1, 1, "foo"), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(1, 1, "foo"), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(2, 1, "foo"), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(2, 1, "foo"), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(3, 1, "foo"), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(3, 1, "foo"), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(376, 1, ""), with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.replaceData(376, 1, ""), with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(0, 1, ""), with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.replaceData(0, 1, ""), with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(1, 1, ""), with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.replaceData(1, 1, ""), with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 1, ""), with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 1, ""), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(1, 1, ""), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(1, 1, ""), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(2, 1, ""), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(2, 1, ""), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(3, 1, ""), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(3, 1, ""), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(376, 47, "foo"), with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.replaceData(376, 47, "foo"), with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(0, 47, "foo"), with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.replaceData(0, 47, "foo"), with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(1, 47, "foo"), with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.replaceData(1, 47, "foo"), with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 47, "foo"), with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 47, "foo"), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(1, 47, "foo"), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(1, 47, "foo"), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(2, 47, "foo"), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(2, 47, "foo"), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(3, 47, "foo"), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(3, 47, "foo"), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(376, 47, ""), with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.replaceData(376, 47, ""), with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(0, 47, ""), with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.replaceData(0, 47, ""), with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(1, 47, ""), with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.replaceData(1, 47, ""), with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 47, ""), with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.replaceData(detachedForeignTextNode.length, 47, ""), with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(1, 47, ""), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(1, 47, ""), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(2, 47, ""), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(2, 47, ""), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.replaceData(3, 47, ""), with unselected range on detachedForeignTextNode from 1 to 3
+FAIL detachedForeignTextNode.replaceData(3, 47, ""), with selected range on detachedForeignTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(376, 0, "foo"), with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.replaceData(376, 0, "foo"), with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(0, 0, "foo"), with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.replaceData(0, 0, "foo"), with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(1, 0, "foo"), with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.replaceData(1, 0, "foo"), with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 0, "foo"), with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 0, "foo"), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(1, 0, "foo"), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(1, 0, "foo"), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(2, 0, "foo"), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(2, 0, "foo"), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(3, 0, "foo"), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(3, 0, "foo"), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(376, 0, ""), with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.replaceData(376, 0, ""), with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(0, 0, ""), with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.replaceData(0, 0, ""), with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(1, 0, ""), with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.replaceData(1, 0, ""), with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 0, ""), with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 0, ""), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(1, 0, ""), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(1, 0, ""), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(2, 0, ""), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(2, 0, ""), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(3, 0, ""), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(3, 0, ""), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(376, 1, "foo"), with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.replaceData(376, 1, "foo"), with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(0, 1, "foo"), with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.replaceData(0, 1, "foo"), with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(1, 1, "foo"), with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.replaceData(1, 1, "foo"), with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 1, "foo"), with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 1, "foo"), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(1, 1, "foo"), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(1, 1, "foo"), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(2, 1, "foo"), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(2, 1, "foo"), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(3, 1, "foo"), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(3, 1, "foo"), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(376, 1, ""), with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.replaceData(376, 1, ""), with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(0, 1, ""), with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.replaceData(0, 1, ""), with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(1, 1, ""), with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.replaceData(1, 1, ""), with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 1, ""), with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 1, ""), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(1, 1, ""), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(1, 1, ""), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(2, 1, ""), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(2, 1, ""), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(3, 1, ""), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(3, 1, ""), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(376, 47, "foo"), with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.replaceData(376, 47, "foo"), with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(0, 47, "foo"), with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.replaceData(0, 47, "foo"), with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(1, 47, "foo"), with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.replaceData(1, 47, "foo"), with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 47, "foo"), with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 47, "foo"), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(1, 47, "foo"), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(1, 47, "foo"), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(2, 47, "foo"), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(2, 47, "foo"), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(3, 47, "foo"), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(3, 47, "foo"), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(376, 47, ""), with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.replaceData(376, 47, ""), with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(0, 47, ""), with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.replaceData(0, 47, ""), with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(1, 47, ""), with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.replaceData(1, 47, ""), with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 47, ""), with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.replaceData(detachedXmlTextNode.length, 47, ""), with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(1, 47, ""), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(1, 47, ""), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(2, 47, ""), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(2, 47, ""), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.replaceData(3, 47, ""), with unselected range on detachedXmlTextNode from 1 to 3
+FAIL detachedXmlTextNode.replaceData(3, 47, ""), with selected range on detachedXmlTextNode from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS comment.replaceData(376, 0, "foo"), with unselected range on comment from 0 to 1
+FAIL comment.replaceData(376, 0, "foo"), with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(0, 0, "foo"), with unselected range collapsed at (comment, 0)
+FAIL comment.replaceData(0, 0, "foo"), with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(1, 0, "foo"), with unselected range collapsed at (comment, 1)
+FAIL comment.replaceData(1, 0, "foo"), with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(comment.length, 0, "foo"), with unselected range collapsed at (comment, comment.length)
+FAIL comment.replaceData(comment.length, 0, "foo"), with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(1, 0, "foo"), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(1, 0, "foo"), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(2, 0, "foo"), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(2, 0, "foo"), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(3, 0, "foo"), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(3, 0, "foo"), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(376, 0, ""), with unselected range on comment from 0 to 1
+FAIL comment.replaceData(376, 0, ""), with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(0, 0, ""), with unselected range collapsed at (comment, 0)
+FAIL comment.replaceData(0, 0, ""), with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(1, 0, ""), with unselected range collapsed at (comment, 1)
+FAIL comment.replaceData(1, 0, ""), with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(comment.length, 0, ""), with unselected range collapsed at (comment, comment.length)
+FAIL comment.replaceData(comment.length, 0, ""), with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(1, 0, ""), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(1, 0, ""), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(2, 0, ""), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(2, 0, ""), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(3, 0, ""), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(3, 0, ""), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(376, 1, "foo"), with unselected range on comment from 0 to 1
+FAIL comment.replaceData(376, 1, "foo"), with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(0, 1, "foo"), with unselected range collapsed at (comment, 0)
+FAIL comment.replaceData(0, 1, "foo"), with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(1, 1, "foo"), with unselected range collapsed at (comment, 1)
+FAIL comment.replaceData(1, 1, "foo"), with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(comment.length, 1, "foo"), with unselected range collapsed at (comment, comment.length)
+FAIL comment.replaceData(comment.length, 1, "foo"), with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(1, 1, "foo"), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(1, 1, "foo"), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(2, 1, "foo"), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(2, 1, "foo"), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(3, 1, "foo"), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(3, 1, "foo"), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(376, 1, ""), with unselected range on comment from 0 to 1
+FAIL comment.replaceData(376, 1, ""), with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(0, 1, ""), with unselected range collapsed at (comment, 0)
+FAIL comment.replaceData(0, 1, ""), with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(1, 1, ""), with unselected range collapsed at (comment, 1)
+FAIL comment.replaceData(1, 1, ""), with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(comment.length, 1, ""), with unselected range collapsed at (comment, comment.length)
+FAIL comment.replaceData(comment.length, 1, ""), with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(1, 1, ""), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(1, 1, ""), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(2, 1, ""), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(2, 1, ""), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(3, 1, ""), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(3, 1, ""), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(376, 47, "foo"), with unselected range on comment from 0 to 1
+FAIL comment.replaceData(376, 47, "foo"), with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(0, 47, "foo"), with unselected range collapsed at (comment, 0)
+FAIL comment.replaceData(0, 47, "foo"), with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(1, 47, "foo"), with unselected range collapsed at (comment, 1)
+FAIL comment.replaceData(1, 47, "foo"), with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(comment.length, 47, "foo"), with unselected range collapsed at (comment, comment.length)
+FAIL comment.replaceData(comment.length, 47, "foo"), with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(1, 47, "foo"), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(1, 47, "foo"), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(2, 47, "foo"), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(2, 47, "foo"), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(3, 47, "foo"), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(3, 47, "foo"), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(376, 47, ""), with unselected range on comment from 0 to 1
+FAIL comment.replaceData(376, 47, ""), with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(0, 47, ""), with unselected range collapsed at (comment, 0)
+FAIL comment.replaceData(0, 47, ""), with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(1, 47, ""), with unselected range collapsed at (comment, 1)
+FAIL comment.replaceData(1, 47, ""), with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(comment.length, 47, ""), with unselected range collapsed at (comment, comment.length)
+FAIL comment.replaceData(comment.length, 47, ""), with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(1, 47, ""), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(1, 47, ""), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(2, 47, ""), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(2, 47, ""), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.replaceData(3, 47, ""), with unselected range on comment from 1 to 3
+FAIL comment.replaceData(3, 47, ""), with selected range on comment from 1 to 3 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS foreignComment.replaceData(376, 0, "foo"), with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.replaceData(376, 0, "foo"), with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(0, 0, "foo"), with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.replaceData(0, 0, "foo"), with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(1, 0, "foo"), with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.replaceData(1, 0, "foo"), with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(foreignComment.length, 0, "foo"), with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.replaceData(foreignComment.length, 0, "foo"), with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(1, 0, "foo"), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(1, 0, "foo"), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(2, 0, "foo"), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(2, 0, "foo"), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(3, 0, "foo"), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(3, 0, "foo"), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(376, 0, ""), with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.replaceData(376, 0, ""), with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(0, 0, ""), with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.replaceData(0, 0, ""), with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(1, 0, ""), with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.replaceData(1, 0, ""), with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(foreignComment.length, 0, ""), with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.replaceData(foreignComment.length, 0, ""), with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(1, 0, ""), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(1, 0, ""), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(2, 0, ""), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(2, 0, ""), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(3, 0, ""), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(3, 0, ""), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(376, 1, "foo"), with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.replaceData(376, 1, "foo"), with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(0, 1, "foo"), with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.replaceData(0, 1, "foo"), with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(1, 1, "foo"), with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.replaceData(1, 1, "foo"), with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(foreignComment.length, 1, "foo"), with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.replaceData(foreignComment.length, 1, "foo"), with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(1, 1, "foo"), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(1, 1, "foo"), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(2, 1, "foo"), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(2, 1, "foo"), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(3, 1, "foo"), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(3, 1, "foo"), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(376, 1, ""), with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.replaceData(376, 1, ""), with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(0, 1, ""), with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.replaceData(0, 1, ""), with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(1, 1, ""), with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.replaceData(1, 1, ""), with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(foreignComment.length, 1, ""), with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.replaceData(foreignComment.length, 1, ""), with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(1, 1, ""), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(1, 1, ""), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(2, 1, ""), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(2, 1, ""), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(3, 1, ""), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(3, 1, ""), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(376, 47, "foo"), with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.replaceData(376, 47, "foo"), with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(0, 47, "foo"), with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.replaceData(0, 47, "foo"), with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(1, 47, "foo"), with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.replaceData(1, 47, "foo"), with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(foreignComment.length, 47, "foo"), with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.replaceData(foreignComment.length, 47, "foo"), with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(1, 47, "foo"), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(1, 47, "foo"), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(2, 47, "foo"), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(2, 47, "foo"), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(3, 47, "foo"), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(3, 47, "foo"), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(376, 47, ""), with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.replaceData(376, 47, ""), with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(0, 47, ""), with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.replaceData(0, 47, ""), with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(1, 47, ""), with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.replaceData(1, 47, ""), with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(foreignComment.length, 47, ""), with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.replaceData(foreignComment.length, 47, ""), with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(1, 47, ""), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(1, 47, ""), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(2, 47, ""), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(2, 47, ""), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.replaceData(3, 47, ""), with unselected range on foreignComment from 1 to 3
+FAIL foreignComment.replaceData(3, 47, ""), with selected range on foreignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(376, 0, "foo"), with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.replaceData(376, 0, "foo"), with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(0, 0, "foo"), with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.replaceData(0, 0, "foo"), with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(1, 0, "foo"), with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.replaceData(1, 0, "foo"), with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(xmlComment.length, 0, "foo"), with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.replaceData(xmlComment.length, 0, "foo"), with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(1, 0, "foo"), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(1, 0, "foo"), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(2, 0, "foo"), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(2, 0, "foo"), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(3, 0, "foo"), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(3, 0, "foo"), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(376, 0, ""), with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.replaceData(376, 0, ""), with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(0, 0, ""), with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.replaceData(0, 0, ""), with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(1, 0, ""), with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.replaceData(1, 0, ""), with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(xmlComment.length, 0, ""), with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.replaceData(xmlComment.length, 0, ""), with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(1, 0, ""), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(1, 0, ""), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(2, 0, ""), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(2, 0, ""), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(3, 0, ""), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(3, 0, ""), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(376, 1, "foo"), with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.replaceData(376, 1, "foo"), with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(0, 1, "foo"), with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.replaceData(0, 1, "foo"), with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(1, 1, "foo"), with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.replaceData(1, 1, "foo"), with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(xmlComment.length, 1, "foo"), with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.replaceData(xmlComment.length, 1, "foo"), with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(1, 1, "foo"), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(1, 1, "foo"), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(2, 1, "foo"), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(2, 1, "foo"), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(3, 1, "foo"), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(3, 1, "foo"), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(376, 1, ""), with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.replaceData(376, 1, ""), with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(0, 1, ""), with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.replaceData(0, 1, ""), with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(1, 1, ""), with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.replaceData(1, 1, ""), with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(xmlComment.length, 1, ""), with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.replaceData(xmlComment.length, 1, ""), with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(1, 1, ""), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(1, 1, ""), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(2, 1, ""), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(2, 1, ""), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(3, 1, ""), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(3, 1, ""), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(376, 47, "foo"), with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.replaceData(376, 47, "foo"), with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(0, 47, "foo"), with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.replaceData(0, 47, "foo"), with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(1, 47, "foo"), with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.replaceData(1, 47, "foo"), with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(xmlComment.length, 47, "foo"), with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.replaceData(xmlComment.length, 47, "foo"), with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(1, 47, "foo"), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(1, 47, "foo"), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(2, 47, "foo"), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(2, 47, "foo"), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(3, 47, "foo"), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(3, 47, "foo"), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(376, 47, ""), with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.replaceData(376, 47, ""), with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(0, 47, ""), with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.replaceData(0, 47, ""), with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(1, 47, ""), with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.replaceData(1, 47, ""), with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(xmlComment.length, 47, ""), with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.replaceData(xmlComment.length, 47, ""), with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(1, 47, ""), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(1, 47, ""), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(2, 47, ""), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(2, 47, ""), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.replaceData(3, 47, ""), with unselected range on xmlComment from 1 to 3
+FAIL xmlComment.replaceData(3, 47, ""), with selected range on xmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(376, 0, "foo"), with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.replaceData(376, 0, "foo"), with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(0, 0, "foo"), with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.replaceData(0, 0, "foo"), with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(1, 0, "foo"), with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.replaceData(1, 0, "foo"), with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(detachedComment.length, 0, "foo"), with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.replaceData(detachedComment.length, 0, "foo"), with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(1, 0, "foo"), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(1, 0, "foo"), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(2, 0, "foo"), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(2, 0, "foo"), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(3, 0, "foo"), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(3, 0, "foo"), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(376, 0, ""), with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.replaceData(376, 0, ""), with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(0, 0, ""), with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.replaceData(0, 0, ""), with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(1, 0, ""), with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.replaceData(1, 0, ""), with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(detachedComment.length, 0, ""), with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.replaceData(detachedComment.length, 0, ""), with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(1, 0, ""), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(1, 0, ""), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(2, 0, ""), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(2, 0, ""), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(3, 0, ""), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(3, 0, ""), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(376, 1, "foo"), with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.replaceData(376, 1, "foo"), with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(0, 1, "foo"), with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.replaceData(0, 1, "foo"), with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(1, 1, "foo"), with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.replaceData(1, 1, "foo"), with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(detachedComment.length, 1, "foo"), with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.replaceData(detachedComment.length, 1, "foo"), with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(1, 1, "foo"), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(1, 1, "foo"), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(2, 1, "foo"), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(2, 1, "foo"), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(3, 1, "foo"), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(3, 1, "foo"), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(376, 1, ""), with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.replaceData(376, 1, ""), with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(0, 1, ""), with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.replaceData(0, 1, ""), with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(1, 1, ""), with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.replaceData(1, 1, ""), with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(detachedComment.length, 1, ""), with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.replaceData(detachedComment.length, 1, ""), with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(1, 1, ""), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(1, 1, ""), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(2, 1, ""), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(2, 1, ""), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(3, 1, ""), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(3, 1, ""), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(376, 47, "foo"), with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.replaceData(376, 47, "foo"), with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(0, 47, "foo"), with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.replaceData(0, 47, "foo"), with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(1, 47, "foo"), with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.replaceData(1, 47, "foo"), with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(detachedComment.length, 47, "foo"), with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.replaceData(detachedComment.length, 47, "foo"), with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(1, 47, "foo"), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(1, 47, "foo"), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(2, 47, "foo"), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(2, 47, "foo"), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(3, 47, "foo"), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(3, 47, "foo"), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(376, 47, ""), with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.replaceData(376, 47, ""), with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(0, 47, ""), with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.replaceData(0, 47, ""), with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(1, 47, ""), with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.replaceData(1, 47, ""), with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(detachedComment.length, 47, ""), with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.replaceData(detachedComment.length, 47, ""), with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(1, 47, ""), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(1, 47, ""), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(2, 47, ""), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(2, 47, ""), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.replaceData(3, 47, ""), with unselected range on detachedComment from 1 to 3
+FAIL detachedComment.replaceData(3, 47, ""), with selected range on detachedComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(376, 0, "foo"), with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.replaceData(376, 0, "foo"), with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(0, 0, "foo"), with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.replaceData(0, 0, "foo"), with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(1, 0, "foo"), with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.replaceData(1, 0, "foo"), with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(detachedForeignComment.length, 0, "foo"), with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.replaceData(detachedForeignComment.length, 0, "foo"), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(1, 0, "foo"), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(1, 0, "foo"), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(2, 0, "foo"), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(2, 0, "foo"), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(3, 0, "foo"), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(3, 0, "foo"), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(376, 0, ""), with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.replaceData(376, 0, ""), with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(0, 0, ""), with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.replaceData(0, 0, ""), with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(1, 0, ""), with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.replaceData(1, 0, ""), with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(detachedForeignComment.length, 0, ""), with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.replaceData(detachedForeignComment.length, 0, ""), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(1, 0, ""), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(1, 0, ""), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(2, 0, ""), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(2, 0, ""), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(3, 0, ""), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(3, 0, ""), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(376, 1, "foo"), with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.replaceData(376, 1, "foo"), with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(0, 1, "foo"), with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.replaceData(0, 1, "foo"), with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(1, 1, "foo"), with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.replaceData(1, 1, "foo"), with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(detachedForeignComment.length, 1, "foo"), with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.replaceData(detachedForeignComment.length, 1, "foo"), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(1, 1, "foo"), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(1, 1, "foo"), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(2, 1, "foo"), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(2, 1, "foo"), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(3, 1, "foo"), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(3, 1, "foo"), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(376, 1, ""), with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.replaceData(376, 1, ""), with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(0, 1, ""), with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.replaceData(0, 1, ""), with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(1, 1, ""), with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.replaceData(1, 1, ""), with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(detachedForeignComment.length, 1, ""), with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.replaceData(detachedForeignComment.length, 1, ""), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(1, 1, ""), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(1, 1, ""), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(2, 1, ""), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(2, 1, ""), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(3, 1, ""), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(3, 1, ""), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(376, 47, "foo"), with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.replaceData(376, 47, "foo"), with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(0, 47, "foo"), with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.replaceData(0, 47, "foo"), with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(1, 47, "foo"), with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.replaceData(1, 47, "foo"), with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(detachedForeignComment.length, 47, "foo"), with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.replaceData(detachedForeignComment.length, 47, "foo"), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(1, 47, "foo"), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(1, 47, "foo"), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(2, 47, "foo"), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(2, 47, "foo"), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(3, 47, "foo"), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(3, 47, "foo"), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(376, 47, ""), with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.replaceData(376, 47, ""), with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(0, 47, ""), with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.replaceData(0, 47, ""), with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(1, 47, ""), with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.replaceData(1, 47, ""), with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(detachedForeignComment.length, 47, ""), with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.replaceData(detachedForeignComment.length, 47, ""), with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(1, 47, ""), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(1, 47, ""), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(2, 47, ""), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(2, 47, ""), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.replaceData(3, 47, ""), with unselected range on detachedForeignComment from 1 to 3
+FAIL detachedForeignComment.replaceData(3, 47, ""), with selected range on detachedForeignComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(376, 0, "foo"), with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.replaceData(376, 0, "foo"), with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(0, 0, "foo"), with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.replaceData(0, 0, "foo"), with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(1, 0, "foo"), with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.replaceData(1, 0, "foo"), with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(detachedXmlComment.length, 0, "foo"), with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.replaceData(detachedXmlComment.length, 0, "foo"), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(1, 0, "foo"), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(1, 0, "foo"), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(2, 0, "foo"), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(2, 0, "foo"), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(3, 0, "foo"), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(3, 0, "foo"), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(376, 0, ""), with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.replaceData(376, 0, ""), with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(0, 0, ""), with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.replaceData(0, 0, ""), with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(1, 0, ""), with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.replaceData(1, 0, ""), with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(detachedXmlComment.length, 0, ""), with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.replaceData(detachedXmlComment.length, 0, ""), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(1, 0, ""), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(1, 0, ""), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(2, 0, ""), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(2, 0, ""), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(3, 0, ""), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(3, 0, ""), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(376, 1, "foo"), with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.replaceData(376, 1, "foo"), with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(0, 1, "foo"), with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.replaceData(0, 1, "foo"), with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(1, 1, "foo"), with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.replaceData(1, 1, "foo"), with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(detachedXmlComment.length, 1, "foo"), with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.replaceData(detachedXmlComment.length, 1, "foo"), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(1, 1, "foo"), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(1, 1, "foo"), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(2, 1, "foo"), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(2, 1, "foo"), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(3, 1, "foo"), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(3, 1, "foo"), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(376, 1, ""), with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.replaceData(376, 1, ""), with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(0, 1, ""), with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.replaceData(0, 1, ""), with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(1, 1, ""), with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.replaceData(1, 1, ""), with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(detachedXmlComment.length, 1, ""), with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.replaceData(detachedXmlComment.length, 1, ""), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(1, 1, ""), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(1, 1, ""), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(2, 1, ""), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(2, 1, ""), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(3, 1, ""), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(3, 1, ""), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(376, 47, "foo"), with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.replaceData(376, 47, "foo"), with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(0, 47, "foo"), with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.replaceData(0, 47, "foo"), with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(1, 47, "foo"), with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.replaceData(1, 47, "foo"), with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(detachedXmlComment.length, 47, "foo"), with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.replaceData(detachedXmlComment.length, 47, "foo"), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(1, 47, "foo"), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(1, 47, "foo"), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(2, 47, "foo"), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(2, 47, "foo"), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(3, 47, "foo"), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(3, 47, "foo"), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(376, 47, ""), with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.replaceData(376, 47, ""), with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(0, 47, ""), with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.replaceData(0, 47, ""), with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(1, 47, ""), with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.replaceData(1, 47, ""), with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(detachedXmlComment.length, 47, ""), with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.replaceData(detachedXmlComment.length, 47, ""), with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(1, 47, ""), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(1, 47, ""), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(2, 47, ""), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(2, 47, ""), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.replaceData(3, 47, ""), with unselected range on detachedXmlComment from 1 to 3
+FAIL detachedXmlComment.replaceData(3, 47, ""), with selected range on detachedXmlComment from 1 to 3 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS paras[0].firstChild.replaceData(1, 0, "foo"), with unselected range collapsed at (paras[0], 0)
+FAIL paras[0].firstChild.replaceData(1, 0, "foo"), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 0, "foo"), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].firstChild.replaceData(1, 0, "foo"), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.replaceData(1, 0, "foo"), with unselected range collapsed at (paras[0], 1)
+FAIL paras[0].firstChild.replaceData(1, 0, "foo"), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 0, "foo"), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.replaceData(1, 0, "foo"), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.replaceData(2, 0, "foo"), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.replaceData(2, 0, "foo"), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.replaceData(3, 0, "foo"), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.replaceData(3, 0, "foo"), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.replaceData(1, 0, "foo"), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.replaceData(1, 0, "foo"), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.replaceData(2, 0, "foo"), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.replaceData(2, 0, "foo"), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.replaceData(3, 0, "foo"), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.replaceData(3, 0, "foo"), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.replaceData(1, 1, "foo"), with unselected range collapsed at (paras[0], 0)
+FAIL paras[0].firstChild.replaceData(1, 1, "foo"), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 1, "foo"), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].firstChild.replaceData(1, 1, "foo"), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.replaceData(1, 1, "foo"), with unselected range collapsed at (paras[0], 1)
+FAIL paras[0].firstChild.replaceData(1, 1, "foo"), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 1, "foo"), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.replaceData(1, 1, "foo"), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.replaceData(2, 1, "foo"), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.replaceData(2, 1, "foo"), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.replaceData(3, 1, "foo"), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.replaceData(3, 1, "foo"), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.replaceData(1, 1, "foo"), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.replaceData(1, 1, "foo"), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.replaceData(2, 1, "foo"), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.replaceData(2, 1, "foo"), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.replaceData(3, 1, "foo"), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.replaceData(3, 1, "foo"), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.replaceData(1, 47, "foo"), with unselected range collapsed at (paras[0], 0)
+FAIL paras[0].firstChild.replaceData(1, 47, "foo"), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 47, "foo"), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].firstChild.replaceData(1, 47, "foo"), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.replaceData(1, 47, "foo"), with unselected range collapsed at (paras[0], 1)
+FAIL paras[0].firstChild.replaceData(1, 47, "foo"), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.replaceData(1, 47, "foo"), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.replaceData(1, 47, "foo"), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.replaceData(2, 47, "foo"), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.replaceData(2, 47, "foo"), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.replaceData(3, 47, "foo"), with unselected range from (paras[0].firstChild, 1) to (paras[0], 1)
+FAIL paras[0].firstChild.replaceData(3, 47, "foo"), with selected range from (paras[0].firstChild, 1) to (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.replaceData(1, 47, "foo"), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.replaceData(1, 47, "foo"), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.replaceData(2, 47, "foo"), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.replaceData(2, 47, "foo"), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.replaceData(3, 47, "foo"), with unselected range from (paras[0], 0) to (paras[0].firstChild, 3)
+FAIL paras[0].firstChild.replaceData(3, 47, "foo"), with selected range from (paras[0], 0) to (paras[0].firstChild, 3) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb" but got object "Äb̈"
+PASS paras[0].firstChild.data = "", with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.data = "", with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.data = "foo", with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.data = "foo", with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.data = paras[0].firstChild.data, with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.data = paras[0].firstChild.data, with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.data += "", with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.data += "", with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.data += "foo", with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.data += "foo", with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.data += paras[0].firstChild.data, with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.data += paras[0].firstChild.data, with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.textContent = "", with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.textContent = "", with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.textContent = "foo", with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.textContent = "foo", with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.textContent = paras[0].firstChild.textContent, with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.textContent = paras[0].firstChild.textContent, with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.textContent += "", with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.textContent += "", with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.textContent += "foo", with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.textContent += "foo", with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.textContent += paras[0].firstChild.textContent, with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.textContent += paras[0].firstChild.textContent, with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.nodeValue = "", with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.nodeValue = "", with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.nodeValue = "foo", with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.nodeValue = "foo", with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.nodeValue = paras[0].firstChild.nodeValue, with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.nodeValue = paras[0].firstChild.nodeValue, with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.nodeValue += "", with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.nodeValue += "", with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.nodeValue += "foo", with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.nodeValue += "foo", with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.nodeValue += paras[0].firstChild.nodeValue, with unselected range collapsed at (paras[0].firstChild, 0)
+FAIL paras[0].firstChild.nodeValue += paras[0].firstChild.nodeValue, with selected range collapsed at (paras[0].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.data = "", with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.data = "", with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.data = "foo", with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.data = "foo", with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+FAIL paras[0].firstChild.data = paras[0].firstChild.data, with unselected range on paras[0].firstChild from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL paras[0].firstChild.data = paras[0].firstChild.data, with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+FAIL paras[0].firstChild.data += "", with unselected range on paras[0].firstChild from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL paras[0].firstChild.data += "", with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.data += "foo", with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.data += "foo", with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.data += paras[0].firstChild.data, with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.data += paras[0].firstChild.data, with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.textContent = "", with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.textContent = "", with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.textContent = "foo", with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.textContent = "foo", with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+FAIL paras[0].firstChild.textContent = paras[0].firstChild.textContent, with unselected range on paras[0].firstChild from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL paras[0].firstChild.textContent = paras[0].firstChild.textContent, with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+FAIL paras[0].firstChild.textContent += "", with unselected range on paras[0].firstChild from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL paras[0].firstChild.textContent += "", with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.textContent += "foo", with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.textContent += "foo", with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.textContent += paras[0].firstChild.textContent, with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.textContent += paras[0].firstChild.textContent, with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.nodeValue = "", with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.nodeValue = "", with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.nodeValue = "foo", with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.nodeValue = "foo", with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+FAIL paras[0].firstChild.nodeValue = paras[0].firstChild.nodeValue, with unselected range on paras[0].firstChild from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL paras[0].firstChild.nodeValue = paras[0].firstChild.nodeValue, with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+FAIL paras[0].firstChild.nodeValue += "", with unselected range on paras[0].firstChild from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL paras[0].firstChild.nodeValue += "", with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.nodeValue += "foo", with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.nodeValue += "foo", with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.nodeValue += paras[0].firstChild.nodeValue, with unselected range on paras[0].firstChild from 0 to 1
+FAIL paras[0].firstChild.nodeValue += paras[0].firstChild.nodeValue, with selected range on paras[0].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "A" but got object "Ä"
+PASS paras[0].firstChild.data = "", with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.data = "", with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.data = "foo", with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.data = "foo", with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[0].firstChild.data = paras[0].firstChild.data, with unselected range collapsed at (paras[0].firstChild, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[0].firstChild.data = paras[0].firstChild.data, with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[0].firstChild.data += "", with unselected range collapsed at (paras[0].firstChild, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[0].firstChild.data += "", with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.data += "foo", with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.data += "foo", with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.data += paras[0].firstChild.data, with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.data += paras[0].firstChild.data, with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.textContent = "", with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.textContent = "", with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.textContent = "foo", with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.textContent = "foo", with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[0].firstChild.textContent = paras[0].firstChild.textContent, with unselected range collapsed at (paras[0].firstChild, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[0].firstChild.textContent = paras[0].firstChild.textContent, with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[0].firstChild.textContent += "", with unselected range collapsed at (paras[0].firstChild, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[0].firstChild.textContent += "", with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.textContent += "foo", with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.textContent += "foo", with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.textContent += paras[0].firstChild.textContent, with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.textContent += paras[0].firstChild.textContent, with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.nodeValue = "", with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.nodeValue = "", with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.nodeValue = "foo", with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.nodeValue = "foo", with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[0].firstChild.nodeValue = paras[0].firstChild.nodeValue, with unselected range collapsed at (paras[0].firstChild, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[0].firstChild.nodeValue = paras[0].firstChild.nodeValue, with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[0].firstChild.nodeValue += "", with unselected range collapsed at (paras[0].firstChild, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[0].firstChild.nodeValue += "", with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.nodeValue += "foo", with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.nodeValue += "foo", with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.nodeValue += paras[0].firstChild.nodeValue, with unselected range collapsed at (paras[0].firstChild, 1)
+FAIL paras[0].firstChild.nodeValue += paras[0].firstChild.nodeValue, with selected range collapsed at (paras[0].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.data = "", with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length
+FAIL paras[0].firstChild.data = "", with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.data = "foo", with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length
+FAIL paras[0].firstChild.data = "foo", with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+FAIL paras[0].firstChild.data = paras[0].firstChild.data, with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Wrong end offset expected 0 but got 17
+FAIL paras[0].firstChild.data = paras[0].firstChild.data, with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+FAIL paras[0].firstChild.data += "", with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Wrong end offset expected 0 but got 17
+FAIL paras[0].firstChild.data += "", with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.data += "foo", with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length
+FAIL paras[0].firstChild.data += "foo", with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.data += paras[0].firstChild.data, with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length
+FAIL paras[0].firstChild.data += paras[0].firstChild.data, with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.textContent = "", with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length
+FAIL paras[0].firstChild.textContent = "", with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.textContent = "foo", with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length
+FAIL paras[0].firstChild.textContent = "foo", with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+FAIL paras[0].firstChild.textContent = paras[0].firstChild.textContent, with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Wrong end offset expected 0 but got 17
+FAIL paras[0].firstChild.textContent = paras[0].firstChild.textContent, with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+FAIL paras[0].firstChild.textContent += "", with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Wrong end offset expected 0 but got 17
+FAIL paras[0].firstChild.textContent += "", with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.textContent += "foo", with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length
+FAIL paras[0].firstChild.textContent += "foo", with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.textContent += paras[0].firstChild.textContent, with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length
+FAIL paras[0].firstChild.textContent += paras[0].firstChild.textContent, with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.nodeValue = "", with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length
+FAIL paras[0].firstChild.nodeValue = "", with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.nodeValue = "foo", with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length
+FAIL paras[0].firstChild.nodeValue = "foo", with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+FAIL paras[0].firstChild.nodeValue = paras[0].firstChild.nodeValue, with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Wrong end offset expected 0 but got 17
+FAIL paras[0].firstChild.nodeValue = paras[0].firstChild.nodeValue, with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+FAIL paras[0].firstChild.nodeValue += "", with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Wrong end offset expected 0 but got 17
+FAIL paras[0].firstChild.nodeValue += "", with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.nodeValue += "foo", with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length
+FAIL paras[0].firstChild.nodeValue += "foo", with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.nodeValue += paras[0].firstChild.nodeValue, with unselected range on paras[0].firstChild from 0 to paras[0].firstChild.length
+FAIL paras[0].firstChild.nodeValue += paras[0].firstChild.nodeValue, with selected range on paras[0].firstChild from 0 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.data = "", with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length
+FAIL paras[0].firstChild.data = "", with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.data = "foo", with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length
+FAIL paras[0].firstChild.data = "foo", with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+FAIL paras[0].firstChild.data = paras[0].firstChild.data, with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[0].firstChild.data = paras[0].firstChild.data, with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+FAIL paras[0].firstChild.data += "", with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[0].firstChild.data += "", with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.data += "foo", with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length
+FAIL paras[0].firstChild.data += "foo", with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.data += paras[0].firstChild.data, with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length
+FAIL paras[0].firstChild.data += paras[0].firstChild.data, with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.textContent = "", with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length
+FAIL paras[0].firstChild.textContent = "", with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.textContent = "foo", with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length
+FAIL paras[0].firstChild.textContent = "foo", with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+FAIL paras[0].firstChild.textContent = paras[0].firstChild.textContent, with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[0].firstChild.textContent = paras[0].firstChild.textContent, with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+FAIL paras[0].firstChild.textContent += "", with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[0].firstChild.textContent += "", with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.textContent += "foo", with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length
+FAIL paras[0].firstChild.textContent += "foo", with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.textContent += paras[0].firstChild.textContent, with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length
+FAIL paras[0].firstChild.textContent += paras[0].firstChild.textContent, with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.nodeValue = "", with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length
+FAIL paras[0].firstChild.nodeValue = "", with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.nodeValue = "foo", with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length
+FAIL paras[0].firstChild.nodeValue = "foo", with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+FAIL paras[0].firstChild.nodeValue = paras[0].firstChild.nodeValue, with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[0].firstChild.nodeValue = paras[0].firstChild.nodeValue, with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+FAIL paras[0].firstChild.nodeValue += "", with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[0].firstChild.nodeValue += "", with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.nodeValue += "foo", with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length
+FAIL paras[0].firstChild.nodeValue += "foo", with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.nodeValue += paras[0].firstChild.nodeValue, with unselected range on paras[0].firstChild from 1 to paras[0].firstChild.length
+FAIL paras[0].firstChild.nodeValue += paras[0].firstChild.nodeValue, with selected range on paras[0].firstChild from 1 to paras[0].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "̈b̈c̈d̈ëf̈g̈ḧ
+" but got object "b̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].firstChild.data = "", with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.data = "", with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.data = "foo", with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.data = "foo", with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[0].firstChild.data = paras[0].firstChild.data, with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Wrong start offset expected 0 but got 17
+FAIL paras[0].firstChild.data = paras[0].firstChild.data, with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[0].firstChild.data += "", with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Wrong start offset expected 0 but got 17
+FAIL paras[0].firstChild.data += "", with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.data += "foo", with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.data += "foo", with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.data += paras[0].firstChild.data, with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.data += paras[0].firstChild.data, with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.textContent = "", with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.textContent = "", with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.textContent = "foo", with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.textContent = "foo", with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[0].firstChild.textContent = paras[0].firstChild.textContent, with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Wrong start offset expected 0 but got 17
+FAIL paras[0].firstChild.textContent = paras[0].firstChild.textContent, with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[0].firstChild.textContent += "", with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Wrong start offset expected 0 but got 17
+FAIL paras[0].firstChild.textContent += "", with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.textContent += "foo", with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.textContent += "foo", with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.textContent += paras[0].firstChild.textContent, with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.textContent += paras[0].firstChild.textContent, with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.nodeValue = "", with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.nodeValue = "", with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.nodeValue = "foo", with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.nodeValue = "foo", with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[0].firstChild.nodeValue = paras[0].firstChild.nodeValue, with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Wrong start offset expected 0 but got 17
+FAIL paras[0].firstChild.nodeValue = paras[0].firstChild.nodeValue, with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[0].firstChild.nodeValue += "", with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Wrong start offset expected 0 but got 17
+FAIL paras[0].firstChild.nodeValue += "", with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.nodeValue += "foo", with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.nodeValue += "foo", with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].firstChild.nodeValue += paras[0].firstChild.nodeValue, with unselected range collapsed at (paras[0].firstChild, paras[0].firstChild.length)
+FAIL paras[0].firstChild.nodeValue += paras[0].firstChild.nodeValue, with selected range collapsed at (paras[0].firstChild, paras[0].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.data = "", with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.data = "", with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.data = "foo", with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.data = "foo", with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.data = paras[1].firstChild.data, with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.data = paras[1].firstChild.data, with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.data += "", with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.data += "", with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.data += "foo", with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.data += "foo", with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.data += paras[1].firstChild.data, with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.data += paras[1].firstChild.data, with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.textContent = "", with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.textContent = "", with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.textContent = "foo", with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.textContent = "foo", with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.textContent = paras[1].firstChild.textContent, with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.textContent = paras[1].firstChild.textContent, with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.textContent += "", with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.textContent += "", with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.textContent += "foo", with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.textContent += "foo", with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.textContent += paras[1].firstChild.textContent, with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.textContent += paras[1].firstChild.textContent, with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.nodeValue = "", with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.nodeValue = "", with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.nodeValue = "foo", with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.nodeValue = "foo", with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.nodeValue = paras[1].firstChild.nodeValue, with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.nodeValue = paras[1].firstChild.nodeValue, with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.nodeValue += "", with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.nodeValue += "", with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.nodeValue += "foo", with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.nodeValue += "foo", with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.nodeValue += paras[1].firstChild.nodeValue, with unselected range collapsed at (paras[1].firstChild, 0)
+FAIL paras[1].firstChild.nodeValue += paras[1].firstChild.nodeValue, with selected range collapsed at (paras[1].firstChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.data = "", with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.data = "", with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.data = "foo", with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.data = "foo", with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+FAIL paras[1].firstChild.data = paras[1].firstChild.data, with unselected range on paras[1].firstChild from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL paras[1].firstChild.data = paras[1].firstChild.data, with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+FAIL paras[1].firstChild.data += "", with unselected range on paras[1].firstChild from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL paras[1].firstChild.data += "", with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.data += "foo", with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.data += "foo", with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.data += paras[1].firstChild.data, with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.data += paras[1].firstChild.data, with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.textContent = "", with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.textContent = "", with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.textContent = "foo", with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.textContent = "foo", with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+FAIL paras[1].firstChild.textContent = paras[1].firstChild.textContent, with unselected range on paras[1].firstChild from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL paras[1].firstChild.textContent = paras[1].firstChild.textContent, with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+FAIL paras[1].firstChild.textContent += "", with unselected range on paras[1].firstChild from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL paras[1].firstChild.textContent += "", with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.textContent += "foo", with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.textContent += "foo", with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.textContent += paras[1].firstChild.textContent, with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.textContent += paras[1].firstChild.textContent, with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.nodeValue = "", with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.nodeValue = "", with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.nodeValue = "foo", with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.nodeValue = "foo", with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+FAIL paras[1].firstChild.nodeValue = paras[1].firstChild.nodeValue, with unselected range on paras[1].firstChild from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL paras[1].firstChild.nodeValue = paras[1].firstChild.nodeValue, with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+FAIL paras[1].firstChild.nodeValue += "", with unselected range on paras[1].firstChild from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL paras[1].firstChild.nodeValue += "", with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.nodeValue += "foo", with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.nodeValue += "foo", with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.nodeValue += paras[1].firstChild.nodeValue, with unselected range on paras[1].firstChild from 0 to 1
+FAIL paras[1].firstChild.nodeValue += paras[1].firstChild.nodeValue, with selected range on paras[1].firstChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "I" but got object ""
+PASS paras[1].firstChild.data = "", with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.data = "", with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.data = "foo", with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.data = "foo", with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[1].firstChild.data = paras[1].firstChild.data, with unselected range collapsed at (paras[1].firstChild, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[1].firstChild.data = paras[1].firstChild.data, with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[1].firstChild.data += "", with unselected range collapsed at (paras[1].firstChild, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[1].firstChild.data += "", with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.data += "foo", with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.data += "foo", with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.data += paras[1].firstChild.data, with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.data += paras[1].firstChild.data, with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.textContent = "", with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.textContent = "", with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.textContent = "foo", with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.textContent = "foo", with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[1].firstChild.textContent = paras[1].firstChild.textContent, with unselected range collapsed at (paras[1].firstChild, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[1].firstChild.textContent = paras[1].firstChild.textContent, with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[1].firstChild.textContent += "", with unselected range collapsed at (paras[1].firstChild, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[1].firstChild.textContent += "", with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.textContent += "foo", with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.textContent += "foo", with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.textContent += paras[1].firstChild.textContent, with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.textContent += paras[1].firstChild.textContent, with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.nodeValue = "", with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.nodeValue = "", with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.nodeValue = "foo", with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.nodeValue = "foo", with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[1].firstChild.nodeValue = paras[1].firstChild.nodeValue, with unselected range collapsed at (paras[1].firstChild, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[1].firstChild.nodeValue = paras[1].firstChild.nodeValue, with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[1].firstChild.nodeValue += "", with unselected range collapsed at (paras[1].firstChild, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[1].firstChild.nodeValue += "", with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.nodeValue += "foo", with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.nodeValue += "foo", with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.nodeValue += paras[1].firstChild.nodeValue, with unselected range collapsed at (paras[1].firstChild, 1)
+FAIL paras[1].firstChild.nodeValue += paras[1].firstChild.nodeValue, with selected range collapsed at (paras[1].firstChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.data = "", with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length
+FAIL paras[1].firstChild.data = "", with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS paras[1].firstChild.data = "foo", with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length
+FAIL paras[1].firstChild.data = "foo", with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+FAIL paras[1].firstChild.data = paras[1].firstChild.data, with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Wrong end offset expected 0 but got 9
+FAIL paras[1].firstChild.data = paras[1].firstChild.data, with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+FAIL paras[1].firstChild.data += "", with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Wrong end offset expected 0 but got 9
+FAIL paras[1].firstChild.data += "", with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS paras[1].firstChild.data += "foo", with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length
+FAIL paras[1].firstChild.data += "foo", with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS paras[1].firstChild.data += paras[1].firstChild.data, with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length
+FAIL paras[1].firstChild.data += paras[1].firstChild.data, with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS paras[1].firstChild.textContent = "", with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length
+FAIL paras[1].firstChild.textContent = "", with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS paras[1].firstChild.textContent = "foo", with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length
+FAIL paras[1].firstChild.textContent = "foo", with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+FAIL paras[1].firstChild.textContent = paras[1].firstChild.textContent, with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Wrong end offset expected 0 but got 9
+FAIL paras[1].firstChild.textContent = paras[1].firstChild.textContent, with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+FAIL paras[1].firstChild.textContent += "", with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Wrong end offset expected 0 but got 9
+FAIL paras[1].firstChild.textContent += "", with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS paras[1].firstChild.textContent += "foo", with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length
+FAIL paras[1].firstChild.textContent += "foo", with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS paras[1].firstChild.textContent += paras[1].firstChild.textContent, with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length
+FAIL paras[1].firstChild.textContent += paras[1].firstChild.textContent, with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS paras[1].firstChild.nodeValue = "", with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length
+FAIL paras[1].firstChild.nodeValue = "", with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS paras[1].firstChild.nodeValue = "foo", with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length
+FAIL paras[1].firstChild.nodeValue = "foo", with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+FAIL paras[1].firstChild.nodeValue = paras[1].firstChild.nodeValue, with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Wrong end offset expected 0 but got 9
+FAIL paras[1].firstChild.nodeValue = paras[1].firstChild.nodeValue, with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+FAIL paras[1].firstChild.nodeValue += "", with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Wrong end offset expected 0 but got 9
+FAIL paras[1].firstChild.nodeValue += "", with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS paras[1].firstChild.nodeValue += "foo", with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length
+FAIL paras[1].firstChild.nodeValue += "foo", with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS paras[1].firstChild.nodeValue += paras[1].firstChild.nodeValue, with unselected range on paras[1].firstChild from 0 to paras[1].firstChild.length
+FAIL paras[1].firstChild.nodeValue += paras[1].firstChild.nodeValue, with selected range on paras[1].firstChild from 0 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS paras[1].firstChild.data = "", with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length
+FAIL paras[1].firstChild.data = "", with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+PASS paras[1].firstChild.data = "foo", with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length
+FAIL paras[1].firstChild.data = "foo", with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+FAIL paras[1].firstChild.data = paras[1].firstChild.data, with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[1].firstChild.data = paras[1].firstChild.data, with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+FAIL paras[1].firstChild.data += "", with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[1].firstChild.data += "", with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+PASS paras[1].firstChild.data += "foo", with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length
+FAIL paras[1].firstChild.data += "foo", with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+PASS paras[1].firstChild.data += paras[1].firstChild.data, with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length
+FAIL paras[1].firstChild.data += paras[1].firstChild.data, with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+PASS paras[1].firstChild.textContent = "", with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length
+FAIL paras[1].firstChild.textContent = "", with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+PASS paras[1].firstChild.textContent = "foo", with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length
+FAIL paras[1].firstChild.textContent = "foo", with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+FAIL paras[1].firstChild.textContent = paras[1].firstChild.textContent, with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[1].firstChild.textContent = paras[1].firstChild.textContent, with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+FAIL paras[1].firstChild.textContent += "", with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[1].firstChild.textContent += "", with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+PASS paras[1].firstChild.textContent += "foo", with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length
+FAIL paras[1].firstChild.textContent += "foo", with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+PASS paras[1].firstChild.textContent += paras[1].firstChild.textContent, with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length
+FAIL paras[1].firstChild.textContent += paras[1].firstChild.textContent, with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+PASS paras[1].firstChild.nodeValue = "", with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length
+FAIL paras[1].firstChild.nodeValue = "", with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+PASS paras[1].firstChild.nodeValue = "foo", with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length
+FAIL paras[1].firstChild.nodeValue = "foo", with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+FAIL paras[1].firstChild.nodeValue = paras[1].firstChild.nodeValue, with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[1].firstChild.nodeValue = paras[1].firstChild.nodeValue, with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+FAIL paras[1].firstChild.nodeValue += "", with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL paras[1].firstChild.nodeValue += "", with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+PASS paras[1].firstChild.nodeValue += "foo", with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length
+FAIL paras[1].firstChild.nodeValue += "foo", with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+PASS paras[1].firstChild.nodeValue += paras[1].firstChild.nodeValue, with unselected range on paras[1].firstChild from 1 to paras[1].firstChild.length
+FAIL paras[1].firstChild.nodeValue += paras[1].firstChild.nodeValue, with selected range on paras[1].firstChild from 1 to paras[1].firstChild.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "jklmnop
+" but got object ""
+PASS paras[1].firstChild.data = "", with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.data = "", with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.data = "foo", with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.data = "foo", with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[1].firstChild.data = paras[1].firstChild.data, with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Wrong start offset expected 0 but got 9
+FAIL paras[1].firstChild.data = paras[1].firstChild.data, with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[1].firstChild.data += "", with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Wrong start offset expected 0 but got 9
+FAIL paras[1].firstChild.data += "", with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.data += "foo", with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.data += "foo", with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.data += paras[1].firstChild.data, with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.data += paras[1].firstChild.data, with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.textContent = "", with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.textContent = "", with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.textContent = "foo", with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.textContent = "foo", with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[1].firstChild.textContent = paras[1].firstChild.textContent, with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Wrong start offset expected 0 but got 9
+FAIL paras[1].firstChild.textContent = paras[1].firstChild.textContent, with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[1].firstChild.textContent += "", with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Wrong start offset expected 0 but got 9
+FAIL paras[1].firstChild.textContent += "", with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.textContent += "foo", with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.textContent += "foo", with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.textContent += paras[1].firstChild.textContent, with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.textContent += paras[1].firstChild.textContent, with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.nodeValue = "", with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.nodeValue = "", with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.nodeValue = "foo", with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.nodeValue = "foo", with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[1].firstChild.nodeValue = paras[1].firstChild.nodeValue, with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Wrong start offset expected 0 but got 9
+FAIL paras[1].firstChild.nodeValue = paras[1].firstChild.nodeValue, with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL paras[1].firstChild.nodeValue += "", with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Wrong start offset expected 0 but got 9
+FAIL paras[1].firstChild.nodeValue += "", with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.nodeValue += "foo", with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.nodeValue += "foo", with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[1].firstChild.nodeValue += paras[1].firstChild.nodeValue, with unselected range collapsed at (paras[1].firstChild, paras[1].firstChild.length)
+FAIL paras[1].firstChild.nodeValue += paras[1].firstChild.nodeValue, with selected range collapsed at (paras[1].firstChild, paras[1].firstChild.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS foreignTextNode.data = "", with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.data = "", with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data = "foo", with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.data = "foo", with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data = foreignTextNode.data, with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.data = foreignTextNode.data, with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data += "", with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.data += "", with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data += "foo", with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.data += "foo", with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data += foreignTextNode.data, with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.data += foreignTextNode.data, with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent = "", with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.textContent = "", with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent = "foo", with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.textContent = "foo", with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent = foreignTextNode.textContent, with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.textContent = foreignTextNode.textContent, with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent += "", with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.textContent += "", with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent += "foo", with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.textContent += "foo", with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent += foreignTextNode.textContent, with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.textContent += foreignTextNode.textContent, with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue = "", with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.nodeValue = "", with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue = "foo", with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.nodeValue = "foo", with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue = foreignTextNode.nodeValue, with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.nodeValue = foreignTextNode.nodeValue, with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue += "", with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.nodeValue += "", with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue += "foo", with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.nodeValue += "foo", with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue += foreignTextNode.nodeValue, with unselected range collapsed at (foreignTextNode, 0)
+FAIL foreignTextNode.nodeValue += foreignTextNode.nodeValue, with selected range collapsed at (foreignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data = "", with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.data = "", with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data = "foo", with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.data = "foo", with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.data = foreignTextNode.data, with unselected range on foreignTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL foreignTextNode.data = foreignTextNode.data, with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.data += "", with unselected range on foreignTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL foreignTextNode.data += "", with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data += "foo", with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.data += "foo", with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data += foreignTextNode.data, with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.data += foreignTextNode.data, with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent = "", with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.textContent = "", with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent = "foo", with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.textContent = "foo", with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.textContent = foreignTextNode.textContent, with unselected range on foreignTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL foreignTextNode.textContent = foreignTextNode.textContent, with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.textContent += "", with unselected range on foreignTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL foreignTextNode.textContent += "", with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent += "foo", with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.textContent += "foo", with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent += foreignTextNode.textContent, with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.textContent += foreignTextNode.textContent, with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue = "", with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.nodeValue = "", with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue = "foo", with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.nodeValue = "foo", with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.nodeValue = foreignTextNode.nodeValue, with unselected range on foreignTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL foreignTextNode.nodeValue = foreignTextNode.nodeValue, with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.nodeValue += "", with unselected range on foreignTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL foreignTextNode.nodeValue += "", with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue += "foo", with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.nodeValue += "foo", with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue += foreignTextNode.nodeValue, with unselected range on foreignTextNode from 0 to 1
+FAIL foreignTextNode.nodeValue += foreignTextNode.nodeValue, with selected range on foreignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data = "", with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.data = "", with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data = "foo", with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.data = "foo", with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.data = foreignTextNode.data, with unselected range collapsed at (foreignTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignTextNode.data = foreignTextNode.data, with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.data += "", with unselected range collapsed at (foreignTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignTextNode.data += "", with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data += "foo", with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.data += "foo", with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data += foreignTextNode.data, with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.data += foreignTextNode.data, with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent = "", with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.textContent = "", with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent = "foo", with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.textContent = "foo", with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.textContent = foreignTextNode.textContent, with unselected range collapsed at (foreignTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignTextNode.textContent = foreignTextNode.textContent, with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.textContent += "", with unselected range collapsed at (foreignTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignTextNode.textContent += "", with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent += "foo", with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.textContent += "foo", with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent += foreignTextNode.textContent, with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.textContent += foreignTextNode.textContent, with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue = "", with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.nodeValue = "", with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue = "foo", with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.nodeValue = "foo", with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.nodeValue = foreignTextNode.nodeValue, with unselected range collapsed at (foreignTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignTextNode.nodeValue = foreignTextNode.nodeValue, with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.nodeValue += "", with unselected range collapsed at (foreignTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignTextNode.nodeValue += "", with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue += "foo", with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.nodeValue += "foo", with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue += foreignTextNode.nodeValue, with unselected range collapsed at (foreignTextNode, 1)
+FAIL foreignTextNode.nodeValue += foreignTextNode.nodeValue, with selected range collapsed at (foreignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data = "", with unselected range on foreignTextNode from 0 to foreignTextNode.length
+FAIL foreignTextNode.data = "", with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data = "foo", with unselected range on foreignTextNode from 0 to foreignTextNode.length
+FAIL foreignTextNode.data = "foo", with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.data = foreignTextNode.data, with unselected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Wrong end offset expected 0 but got 112
+FAIL foreignTextNode.data = foreignTextNode.data, with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.data += "", with unselected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Wrong end offset expected 0 but got 112
+FAIL foreignTextNode.data += "", with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data += "foo", with unselected range on foreignTextNode from 0 to foreignTextNode.length
+FAIL foreignTextNode.data += "foo", with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data += foreignTextNode.data, with unselected range on foreignTextNode from 0 to foreignTextNode.length
+FAIL foreignTextNode.data += foreignTextNode.data, with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent = "", with unselected range on foreignTextNode from 0 to foreignTextNode.length
+FAIL foreignTextNode.textContent = "", with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent = "foo", with unselected range on foreignTextNode from 0 to foreignTextNode.length
+FAIL foreignTextNode.textContent = "foo", with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.textContent = foreignTextNode.textContent, with unselected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Wrong end offset expected 0 but got 112
+FAIL foreignTextNode.textContent = foreignTextNode.textContent, with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.textContent += "", with unselected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Wrong end offset expected 0 but got 112
+FAIL foreignTextNode.textContent += "", with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent += "foo", with unselected range on foreignTextNode from 0 to foreignTextNode.length
+FAIL foreignTextNode.textContent += "foo", with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent += foreignTextNode.textContent, with unselected range on foreignTextNode from 0 to foreignTextNode.length
+FAIL foreignTextNode.textContent += foreignTextNode.textContent, with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue = "", with unselected range on foreignTextNode from 0 to foreignTextNode.length
+FAIL foreignTextNode.nodeValue = "", with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue = "foo", with unselected range on foreignTextNode from 0 to foreignTextNode.length
+FAIL foreignTextNode.nodeValue = "foo", with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.nodeValue = foreignTextNode.nodeValue, with unselected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Wrong end offset expected 0 but got 112
+FAIL foreignTextNode.nodeValue = foreignTextNode.nodeValue, with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.nodeValue += "", with unselected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Wrong end offset expected 0 but got 112
+FAIL foreignTextNode.nodeValue += "", with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue += "foo", with unselected range on foreignTextNode from 0 to foreignTextNode.length
+FAIL foreignTextNode.nodeValue += "foo", with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue += foreignTextNode.nodeValue, with unselected range on foreignTextNode from 0 to foreignTextNode.length
+FAIL foreignTextNode.nodeValue += foreignTextNode.nodeValue, with selected range on foreignTextNode from 0 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data = "", with unselected range on foreignTextNode from 1 to foreignTextNode.length
+FAIL foreignTextNode.data = "", with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data = "foo", with unselected range on foreignTextNode from 1 to foreignTextNode.length
+FAIL foreignTextNode.data = "foo", with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.data = foreignTextNode.data, with unselected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignTextNode.data = foreignTextNode.data, with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.data += "", with unselected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignTextNode.data += "", with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data += "foo", with unselected range on foreignTextNode from 1 to foreignTextNode.length
+FAIL foreignTextNode.data += "foo", with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data += foreignTextNode.data, with unselected range on foreignTextNode from 1 to foreignTextNode.length
+FAIL foreignTextNode.data += foreignTextNode.data, with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent = "", with unselected range on foreignTextNode from 1 to foreignTextNode.length
+FAIL foreignTextNode.textContent = "", with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent = "foo", with unselected range on foreignTextNode from 1 to foreignTextNode.length
+FAIL foreignTextNode.textContent = "foo", with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.textContent = foreignTextNode.textContent, with unselected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignTextNode.textContent = foreignTextNode.textContent, with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.textContent += "", with unselected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignTextNode.textContent += "", with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent += "foo", with unselected range on foreignTextNode from 1 to foreignTextNode.length
+FAIL foreignTextNode.textContent += "foo", with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent += foreignTextNode.textContent, with unselected range on foreignTextNode from 1 to foreignTextNode.length
+FAIL foreignTextNode.textContent += foreignTextNode.textContent, with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue = "", with unselected range on foreignTextNode from 1 to foreignTextNode.length
+FAIL foreignTextNode.nodeValue = "", with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue = "foo", with unselected range on foreignTextNode from 1 to foreignTextNode.length
+FAIL foreignTextNode.nodeValue = "foo", with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.nodeValue = foreignTextNode.nodeValue, with unselected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignTextNode.nodeValue = foreignTextNode.nodeValue, with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.nodeValue += "", with unselected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignTextNode.nodeValue += "", with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue += "foo", with unselected range on foreignTextNode from 1 to foreignTextNode.length
+FAIL foreignTextNode.nodeValue += "foo", with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue += foreignTextNode.nodeValue, with unselected range on foreignTextNode from 1 to foreignTextNode.length
+FAIL foreignTextNode.nodeValue += foreignTextNode.nodeValue, with selected range on foreignTextNode from 1 to foreignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data = "", with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.data = "", with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data = "foo", with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.data = "foo", with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.data = foreignTextNode.data, with unselected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Wrong start offset expected 0 but got 112
+FAIL foreignTextNode.data = foreignTextNode.data, with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.data += "", with unselected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Wrong start offset expected 0 but got 112
+FAIL foreignTextNode.data += "", with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data += "foo", with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.data += "foo", with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.data += foreignTextNode.data, with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.data += foreignTextNode.data, with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent = "", with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.textContent = "", with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent = "foo", with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.textContent = "foo", with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.textContent = foreignTextNode.textContent, with unselected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Wrong start offset expected 0 but got 112
+FAIL foreignTextNode.textContent = foreignTextNode.textContent, with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.textContent += "", with unselected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Wrong start offset expected 0 but got 112
+FAIL foreignTextNode.textContent += "", with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent += "foo", with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.textContent += "foo", with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.textContent += foreignTextNode.textContent, with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.textContent += foreignTextNode.textContent, with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue = "", with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.nodeValue = "", with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue = "foo", with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.nodeValue = "foo", with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.nodeValue = foreignTextNode.nodeValue, with unselected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Wrong start offset expected 0 but got 112
+FAIL foreignTextNode.nodeValue = foreignTextNode.nodeValue, with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignTextNode.nodeValue += "", with unselected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Wrong start offset expected 0 but got 112
+FAIL foreignTextNode.nodeValue += "", with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue += "foo", with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.nodeValue += "foo", with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignTextNode.nodeValue += foreignTextNode.nodeValue, with unselected range collapsed at (foreignTextNode, foreignTextNode.length)
+FAIL foreignTextNode.nodeValue += foreignTextNode.nodeValue, with selected range collapsed at (foreignTextNode, foreignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data = "", with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.data = "", with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data = "foo", with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.data = "foo", with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data = xmlTextNode.data, with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.data = xmlTextNode.data, with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data += "", with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.data += "", with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data += "foo", with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.data += "foo", with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data += xmlTextNode.data, with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.data += xmlTextNode.data, with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent = "", with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.textContent = "", with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent = "foo", with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.textContent = "foo", with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent = xmlTextNode.textContent, with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.textContent = xmlTextNode.textContent, with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent += "", with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.textContent += "", with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent += "foo", with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.textContent += "foo", with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent += xmlTextNode.textContent, with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.textContent += xmlTextNode.textContent, with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue = "", with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.nodeValue = "", with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue = "foo", with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.nodeValue = "foo", with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue = xmlTextNode.nodeValue, with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.nodeValue = xmlTextNode.nodeValue, with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue += "", with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.nodeValue += "", with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue += "foo", with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.nodeValue += "foo", with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue += xmlTextNode.nodeValue, with unselected range collapsed at (xmlTextNode, 0)
+FAIL xmlTextNode.nodeValue += xmlTextNode.nodeValue, with selected range collapsed at (xmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data = "", with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.data = "", with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data = "foo", with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.data = "foo", with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.data = xmlTextNode.data, with unselected range on xmlTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL xmlTextNode.data = xmlTextNode.data, with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.data += "", with unselected range on xmlTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL xmlTextNode.data += "", with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data += "foo", with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.data += "foo", with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data += xmlTextNode.data, with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.data += xmlTextNode.data, with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent = "", with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.textContent = "", with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent = "foo", with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.textContent = "foo", with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.textContent = xmlTextNode.textContent, with unselected range on xmlTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL xmlTextNode.textContent = xmlTextNode.textContent, with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.textContent += "", with unselected range on xmlTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL xmlTextNode.textContent += "", with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent += "foo", with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.textContent += "foo", with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent += xmlTextNode.textContent, with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.textContent += xmlTextNode.textContent, with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue = "", with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.nodeValue = "", with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue = "foo", with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.nodeValue = "foo", with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.nodeValue = xmlTextNode.nodeValue, with unselected range on xmlTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL xmlTextNode.nodeValue = xmlTextNode.nodeValue, with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.nodeValue += "", with unselected range on xmlTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL xmlTextNode.nodeValue += "", with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue += "foo", with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.nodeValue += "foo", with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue += xmlTextNode.nodeValue, with unselected range on xmlTextNode from 0 to 1
+FAIL xmlTextNode.nodeValue += xmlTextNode.nodeValue, with selected range on xmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data = "", with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.data = "", with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data = "foo", with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.data = "foo", with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.data = xmlTextNode.data, with unselected range collapsed at (xmlTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlTextNode.data = xmlTextNode.data, with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.data += "", with unselected range collapsed at (xmlTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlTextNode.data += "", with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data += "foo", with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.data += "foo", with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data += xmlTextNode.data, with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.data += xmlTextNode.data, with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent = "", with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.textContent = "", with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent = "foo", with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.textContent = "foo", with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.textContent = xmlTextNode.textContent, with unselected range collapsed at (xmlTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlTextNode.textContent = xmlTextNode.textContent, with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.textContent += "", with unselected range collapsed at (xmlTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlTextNode.textContent += "", with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent += "foo", with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.textContent += "foo", with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent += xmlTextNode.textContent, with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.textContent += xmlTextNode.textContent, with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue = "", with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.nodeValue = "", with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue = "foo", with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.nodeValue = "foo", with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.nodeValue = xmlTextNode.nodeValue, with unselected range collapsed at (xmlTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlTextNode.nodeValue = xmlTextNode.nodeValue, with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.nodeValue += "", with unselected range collapsed at (xmlTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlTextNode.nodeValue += "", with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue += "foo", with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.nodeValue += "foo", with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue += xmlTextNode.nodeValue, with unselected range collapsed at (xmlTextNode, 1)
+FAIL xmlTextNode.nodeValue += xmlTextNode.nodeValue, with selected range collapsed at (xmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data = "", with unselected range on xmlTextNode from 0 to xmlTextNode.length
+FAIL xmlTextNode.data = "", with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data = "foo", with unselected range on xmlTextNode from 0 to xmlTextNode.length
+FAIL xmlTextNode.data = "foo", with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.data = xmlTextNode.data, with unselected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Wrong end offset expected 0 but got 20
+FAIL xmlTextNode.data = xmlTextNode.data, with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.data += "", with unselected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Wrong end offset expected 0 but got 20
+FAIL xmlTextNode.data += "", with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data += "foo", with unselected range on xmlTextNode from 0 to xmlTextNode.length
+FAIL xmlTextNode.data += "foo", with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data += xmlTextNode.data, with unselected range on xmlTextNode from 0 to xmlTextNode.length
+FAIL xmlTextNode.data += xmlTextNode.data, with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent = "", with unselected range on xmlTextNode from 0 to xmlTextNode.length
+FAIL xmlTextNode.textContent = "", with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent = "foo", with unselected range on xmlTextNode from 0 to xmlTextNode.length
+FAIL xmlTextNode.textContent = "foo", with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.textContent = xmlTextNode.textContent, with unselected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Wrong end offset expected 0 but got 20
+FAIL xmlTextNode.textContent = xmlTextNode.textContent, with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.textContent += "", with unselected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Wrong end offset expected 0 but got 20
+FAIL xmlTextNode.textContent += "", with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent += "foo", with unselected range on xmlTextNode from 0 to xmlTextNode.length
+FAIL xmlTextNode.textContent += "foo", with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent += xmlTextNode.textContent, with unselected range on xmlTextNode from 0 to xmlTextNode.length
+FAIL xmlTextNode.textContent += xmlTextNode.textContent, with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue = "", with unselected range on xmlTextNode from 0 to xmlTextNode.length
+FAIL xmlTextNode.nodeValue = "", with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue = "foo", with unselected range on xmlTextNode from 0 to xmlTextNode.length
+FAIL xmlTextNode.nodeValue = "foo", with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.nodeValue = xmlTextNode.nodeValue, with unselected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Wrong end offset expected 0 but got 20
+FAIL xmlTextNode.nodeValue = xmlTextNode.nodeValue, with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.nodeValue += "", with unselected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Wrong end offset expected 0 but got 20
+FAIL xmlTextNode.nodeValue += "", with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue += "foo", with unselected range on xmlTextNode from 0 to xmlTextNode.length
+FAIL xmlTextNode.nodeValue += "foo", with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue += xmlTextNode.nodeValue, with unselected range on xmlTextNode from 0 to xmlTextNode.length
+FAIL xmlTextNode.nodeValue += xmlTextNode.nodeValue, with selected range on xmlTextNode from 0 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data = "", with unselected range on xmlTextNode from 1 to xmlTextNode.length
+FAIL xmlTextNode.data = "", with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data = "foo", with unselected range on xmlTextNode from 1 to xmlTextNode.length
+FAIL xmlTextNode.data = "foo", with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.data = xmlTextNode.data, with unselected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlTextNode.data = xmlTextNode.data, with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.data += "", with unselected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlTextNode.data += "", with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data += "foo", with unselected range on xmlTextNode from 1 to xmlTextNode.length
+FAIL xmlTextNode.data += "foo", with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data += xmlTextNode.data, with unselected range on xmlTextNode from 1 to xmlTextNode.length
+FAIL xmlTextNode.data += xmlTextNode.data, with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent = "", with unselected range on xmlTextNode from 1 to xmlTextNode.length
+FAIL xmlTextNode.textContent = "", with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent = "foo", with unselected range on xmlTextNode from 1 to xmlTextNode.length
+FAIL xmlTextNode.textContent = "foo", with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.textContent = xmlTextNode.textContent, with unselected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlTextNode.textContent = xmlTextNode.textContent, with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.textContent += "", with unselected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlTextNode.textContent += "", with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent += "foo", with unselected range on xmlTextNode from 1 to xmlTextNode.length
+FAIL xmlTextNode.textContent += "foo", with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent += xmlTextNode.textContent, with unselected range on xmlTextNode from 1 to xmlTextNode.length
+FAIL xmlTextNode.textContent += xmlTextNode.textContent, with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue = "", with unselected range on xmlTextNode from 1 to xmlTextNode.length
+FAIL xmlTextNode.nodeValue = "", with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue = "foo", with unselected range on xmlTextNode from 1 to xmlTextNode.length
+FAIL xmlTextNode.nodeValue = "foo", with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.nodeValue = xmlTextNode.nodeValue, with unselected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlTextNode.nodeValue = xmlTextNode.nodeValue, with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.nodeValue += "", with unselected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlTextNode.nodeValue += "", with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue += "foo", with unselected range on xmlTextNode from 1 to xmlTextNode.length
+FAIL xmlTextNode.nodeValue += "foo", with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue += xmlTextNode.nodeValue, with unselected range on xmlTextNode from 1 to xmlTextNode.length
+FAIL xmlTextNode.nodeValue += xmlTextNode.nodeValue, with selected range on xmlTextNode from 1 to xmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data = "", with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.data = "", with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data = "foo", with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.data = "foo", with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.data = xmlTextNode.data, with unselected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Wrong start offset expected 0 but got 20
+FAIL xmlTextNode.data = xmlTextNode.data, with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.data += "", with unselected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Wrong start offset expected 0 but got 20
+FAIL xmlTextNode.data += "", with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data += "foo", with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.data += "foo", with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.data += xmlTextNode.data, with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.data += xmlTextNode.data, with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent = "", with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.textContent = "", with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent = "foo", with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.textContent = "foo", with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.textContent = xmlTextNode.textContent, with unselected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Wrong start offset expected 0 but got 20
+FAIL xmlTextNode.textContent = xmlTextNode.textContent, with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.textContent += "", with unselected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Wrong start offset expected 0 but got 20
+FAIL xmlTextNode.textContent += "", with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent += "foo", with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.textContent += "foo", with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.textContent += xmlTextNode.textContent, with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.textContent += xmlTextNode.textContent, with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue = "", with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.nodeValue = "", with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue = "foo", with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.nodeValue = "foo", with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.nodeValue = xmlTextNode.nodeValue, with unselected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Wrong start offset expected 0 but got 20
+FAIL xmlTextNode.nodeValue = xmlTextNode.nodeValue, with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlTextNode.nodeValue += "", with unselected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Wrong start offset expected 0 but got 20
+FAIL xmlTextNode.nodeValue += "", with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue += "foo", with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.nodeValue += "foo", with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlTextNode.nodeValue += xmlTextNode.nodeValue, with unselected range collapsed at (xmlTextNode, xmlTextNode.length)
+FAIL xmlTextNode.nodeValue += xmlTextNode.nodeValue, with selected range collapsed at (xmlTextNode, xmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data = "", with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.data = "", with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data = "foo", with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.data = "foo", with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data = detachedTextNode.data, with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.data = detachedTextNode.data, with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data += "", with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.data += "", with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data += "foo", with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.data += "foo", with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data += detachedTextNode.data, with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.data += detachedTextNode.data, with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent = "", with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.textContent = "", with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent = "foo", with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.textContent = "foo", with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent = detachedTextNode.textContent, with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.textContent = detachedTextNode.textContent, with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent += "", with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.textContent += "", with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent += "foo", with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.textContent += "foo", with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent += detachedTextNode.textContent, with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.textContent += detachedTextNode.textContent, with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue = "", with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.nodeValue = "", with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue = "foo", with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.nodeValue = "foo", with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue = detachedTextNode.nodeValue, with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.nodeValue = detachedTextNode.nodeValue, with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue += "", with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.nodeValue += "", with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue += "foo", with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.nodeValue += "foo", with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue += detachedTextNode.nodeValue, with unselected range collapsed at (detachedTextNode, 0)
+FAIL detachedTextNode.nodeValue += detachedTextNode.nodeValue, with selected range collapsed at (detachedTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data = "", with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.data = "", with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data = "foo", with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.data = "foo", with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.data = detachedTextNode.data, with unselected range on detachedTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedTextNode.data = detachedTextNode.data, with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.data += "", with unselected range on detachedTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedTextNode.data += "", with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data += "foo", with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.data += "foo", with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data += detachedTextNode.data, with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.data += detachedTextNode.data, with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent = "", with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.textContent = "", with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent = "foo", with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.textContent = "foo", with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.textContent = detachedTextNode.textContent, with unselected range on detachedTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedTextNode.textContent = detachedTextNode.textContent, with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.textContent += "", with unselected range on detachedTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedTextNode.textContent += "", with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent += "foo", with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.textContent += "foo", with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent += detachedTextNode.textContent, with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.textContent += detachedTextNode.textContent, with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue = "", with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.nodeValue = "", with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue = "foo", with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.nodeValue = "foo", with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.nodeValue = detachedTextNode.nodeValue, with unselected range on detachedTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedTextNode.nodeValue = detachedTextNode.nodeValue, with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.nodeValue += "", with unselected range on detachedTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedTextNode.nodeValue += "", with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue += "foo", with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.nodeValue += "foo", with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue += detachedTextNode.nodeValue, with unselected range on detachedTextNode from 0 to 1
+FAIL detachedTextNode.nodeValue += detachedTextNode.nodeValue, with selected range on detachedTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data = "", with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.data = "", with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data = "foo", with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.data = "foo", with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.data = detachedTextNode.data, with unselected range collapsed at (detachedTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedTextNode.data = detachedTextNode.data, with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.data += "", with unselected range collapsed at (detachedTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedTextNode.data += "", with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data += "foo", with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.data += "foo", with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data += detachedTextNode.data, with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.data += detachedTextNode.data, with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent = "", with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.textContent = "", with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent = "foo", with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.textContent = "foo", with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.textContent = detachedTextNode.textContent, with unselected range collapsed at (detachedTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedTextNode.textContent = detachedTextNode.textContent, with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.textContent += "", with unselected range collapsed at (detachedTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedTextNode.textContent += "", with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent += "foo", with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.textContent += "foo", with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent += detachedTextNode.textContent, with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.textContent += detachedTextNode.textContent, with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue = "", with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.nodeValue = "", with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue = "foo", with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.nodeValue = "foo", with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.nodeValue = detachedTextNode.nodeValue, with unselected range collapsed at (detachedTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedTextNode.nodeValue = detachedTextNode.nodeValue, with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.nodeValue += "", with unselected range collapsed at (detachedTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedTextNode.nodeValue += "", with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue += "foo", with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.nodeValue += "foo", with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue += detachedTextNode.nodeValue, with unselected range collapsed at (detachedTextNode, 1)
+FAIL detachedTextNode.nodeValue += detachedTextNode.nodeValue, with selected range collapsed at (detachedTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data = "", with unselected range on detachedTextNode from 0 to detachedTextNode.length
+FAIL detachedTextNode.data = "", with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data = "foo", with unselected range on detachedTextNode from 0 to detachedTextNode.length
+FAIL detachedTextNode.data = "foo", with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.data = detachedTextNode.data, with unselected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedTextNode.data = detachedTextNode.data, with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.data += "", with unselected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedTextNode.data += "", with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data += "foo", with unselected range on detachedTextNode from 0 to detachedTextNode.length
+FAIL detachedTextNode.data += "foo", with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data += detachedTextNode.data, with unselected range on detachedTextNode from 0 to detachedTextNode.length
+FAIL detachedTextNode.data += detachedTextNode.data, with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent = "", with unselected range on detachedTextNode from 0 to detachedTextNode.length
+FAIL detachedTextNode.textContent = "", with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent = "foo", with unselected range on detachedTextNode from 0 to detachedTextNode.length
+FAIL detachedTextNode.textContent = "foo", with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.textContent = detachedTextNode.textContent, with unselected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedTextNode.textContent = detachedTextNode.textContent, with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.textContent += "", with unselected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedTextNode.textContent += "", with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent += "foo", with unselected range on detachedTextNode from 0 to detachedTextNode.length
+FAIL detachedTextNode.textContent += "foo", with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent += detachedTextNode.textContent, with unselected range on detachedTextNode from 0 to detachedTextNode.length
+FAIL detachedTextNode.textContent += detachedTextNode.textContent, with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue = "", with unselected range on detachedTextNode from 0 to detachedTextNode.length
+FAIL detachedTextNode.nodeValue = "", with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue = "foo", with unselected range on detachedTextNode from 0 to detachedTextNode.length
+FAIL detachedTextNode.nodeValue = "foo", with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.nodeValue = detachedTextNode.nodeValue, with unselected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedTextNode.nodeValue = detachedTextNode.nodeValue, with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.nodeValue += "", with unselected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedTextNode.nodeValue += "", with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue += "foo", with unselected range on detachedTextNode from 0 to detachedTextNode.length
+FAIL detachedTextNode.nodeValue += "foo", with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue += detachedTextNode.nodeValue, with unselected range on detachedTextNode from 0 to detachedTextNode.length
+FAIL detachedTextNode.nodeValue += detachedTextNode.nodeValue, with selected range on detachedTextNode from 0 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data = "", with unselected range on detachedTextNode from 1 to detachedTextNode.length
+FAIL detachedTextNode.data = "", with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data = "foo", with unselected range on detachedTextNode from 1 to detachedTextNode.length
+FAIL detachedTextNode.data = "foo", with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.data = detachedTextNode.data, with unselected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedTextNode.data = detachedTextNode.data, with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.data += "", with unselected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedTextNode.data += "", with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data += "foo", with unselected range on detachedTextNode from 1 to detachedTextNode.length
+FAIL detachedTextNode.data += "foo", with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data += detachedTextNode.data, with unselected range on detachedTextNode from 1 to detachedTextNode.length
+FAIL detachedTextNode.data += detachedTextNode.data, with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent = "", with unselected range on detachedTextNode from 1 to detachedTextNode.length
+FAIL detachedTextNode.textContent = "", with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent = "foo", with unselected range on detachedTextNode from 1 to detachedTextNode.length
+FAIL detachedTextNode.textContent = "foo", with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.textContent = detachedTextNode.textContent, with unselected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedTextNode.textContent = detachedTextNode.textContent, with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.textContent += "", with unselected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedTextNode.textContent += "", with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent += "foo", with unselected range on detachedTextNode from 1 to detachedTextNode.length
+FAIL detachedTextNode.textContent += "foo", with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent += detachedTextNode.textContent, with unselected range on detachedTextNode from 1 to detachedTextNode.length
+FAIL detachedTextNode.textContent += detachedTextNode.textContent, with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue = "", with unselected range on detachedTextNode from 1 to detachedTextNode.length
+FAIL detachedTextNode.nodeValue = "", with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue = "foo", with unselected range on detachedTextNode from 1 to detachedTextNode.length
+FAIL detachedTextNode.nodeValue = "foo", with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.nodeValue = detachedTextNode.nodeValue, with unselected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedTextNode.nodeValue = detachedTextNode.nodeValue, with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.nodeValue += "", with unselected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedTextNode.nodeValue += "", with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue += "foo", with unselected range on detachedTextNode from 1 to detachedTextNode.length
+FAIL detachedTextNode.nodeValue += "foo", with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue += detachedTextNode.nodeValue, with unselected range on detachedTextNode from 1 to detachedTextNode.length
+FAIL detachedTextNode.nodeValue += detachedTextNode.nodeValue, with selected range on detachedTextNode from 1 to detachedTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data = "", with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.data = "", with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data = "foo", with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.data = "foo", with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.data = detachedTextNode.data, with unselected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedTextNode.data = detachedTextNode.data, with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.data += "", with unselected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedTextNode.data += "", with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data += "foo", with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.data += "foo", with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.data += detachedTextNode.data, with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.data += detachedTextNode.data, with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent = "", with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.textContent = "", with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent = "foo", with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.textContent = "foo", with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.textContent = detachedTextNode.textContent, with unselected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedTextNode.textContent = detachedTextNode.textContent, with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.textContent += "", with unselected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedTextNode.textContent += "", with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent += "foo", with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.textContent += "foo", with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.textContent += detachedTextNode.textContent, with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.textContent += detachedTextNode.textContent, with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue = "", with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.nodeValue = "", with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue = "foo", with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.nodeValue = "foo", with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.nodeValue = detachedTextNode.nodeValue, with unselected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedTextNode.nodeValue = detachedTextNode.nodeValue, with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedTextNode.nodeValue += "", with unselected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedTextNode.nodeValue += "", with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue += "foo", with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.nodeValue += "foo", with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedTextNode.nodeValue += detachedTextNode.nodeValue, with unselected range collapsed at (detachedTextNode, detachedTextNode.length)
+FAIL detachedTextNode.nodeValue += detachedTextNode.nodeValue, with selected range collapsed at (detachedTextNode, detachedTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data = "", with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.data = "", with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data = "foo", with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.data = "foo", with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data = detachedForeignTextNode.data, with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.data = detachedForeignTextNode.data, with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data += "", with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.data += "", with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data += "foo", with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.data += "foo", with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data += detachedForeignTextNode.data, with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.data += detachedForeignTextNode.data, with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent = "", with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.textContent = "", with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent = "foo", with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.textContent = "foo", with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent = detachedForeignTextNode.textContent, with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.textContent = detachedForeignTextNode.textContent, with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent += "", with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.textContent += "", with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent += "foo", with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.textContent += "foo", with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent += detachedForeignTextNode.textContent, with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.textContent += detachedForeignTextNode.textContent, with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue = "", with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.nodeValue = "", with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue = "foo", with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.nodeValue = "foo", with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue = detachedForeignTextNode.nodeValue, with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.nodeValue = detachedForeignTextNode.nodeValue, with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue += "", with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.nodeValue += "", with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue += "foo", with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.nodeValue += "foo", with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue += detachedForeignTextNode.nodeValue, with unselected range collapsed at (detachedForeignTextNode, 0)
+FAIL detachedForeignTextNode.nodeValue += detachedForeignTextNode.nodeValue, with selected range collapsed at (detachedForeignTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data = "", with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.data = "", with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data = "foo", with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.data = "foo", with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.data = detachedForeignTextNode.data, with unselected range on detachedForeignTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedForeignTextNode.data = detachedForeignTextNode.data, with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.data += "", with unselected range on detachedForeignTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedForeignTextNode.data += "", with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data += "foo", with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.data += "foo", with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data += detachedForeignTextNode.data, with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.data += detachedForeignTextNode.data, with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent = "", with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.textContent = "", with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent = "foo", with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.textContent = "foo", with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.textContent = detachedForeignTextNode.textContent, with unselected range on detachedForeignTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedForeignTextNode.textContent = detachedForeignTextNode.textContent, with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.textContent += "", with unselected range on detachedForeignTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedForeignTextNode.textContent += "", with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent += "foo", with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.textContent += "foo", with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent += detachedForeignTextNode.textContent, with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.textContent += detachedForeignTextNode.textContent, with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue = "", with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.nodeValue = "", with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue = "foo", with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.nodeValue = "foo", with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.nodeValue = detachedForeignTextNode.nodeValue, with unselected range on detachedForeignTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedForeignTextNode.nodeValue = detachedForeignTextNode.nodeValue, with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.nodeValue += "", with unselected range on detachedForeignTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedForeignTextNode.nodeValue += "", with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue += "foo", with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.nodeValue += "foo", with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue += detachedForeignTextNode.nodeValue, with unselected range on detachedForeignTextNode from 0 to 1
+FAIL detachedForeignTextNode.nodeValue += detachedForeignTextNode.nodeValue, with selected range on detachedForeignTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data = "", with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.data = "", with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data = "foo", with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.data = "foo", with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.data = detachedForeignTextNode.data, with unselected range collapsed at (detachedForeignTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignTextNode.data = detachedForeignTextNode.data, with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.data += "", with unselected range collapsed at (detachedForeignTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignTextNode.data += "", with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data += "foo", with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.data += "foo", with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data += detachedForeignTextNode.data, with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.data += detachedForeignTextNode.data, with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent = "", with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.textContent = "", with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent = "foo", with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.textContent = "foo", with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.textContent = detachedForeignTextNode.textContent, with unselected range collapsed at (detachedForeignTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignTextNode.textContent = detachedForeignTextNode.textContent, with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.textContent += "", with unselected range collapsed at (detachedForeignTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignTextNode.textContent += "", with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent += "foo", with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.textContent += "foo", with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent += detachedForeignTextNode.textContent, with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.textContent += detachedForeignTextNode.textContent, with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue = "", with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.nodeValue = "", with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue = "foo", with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.nodeValue = "foo", with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.nodeValue = detachedForeignTextNode.nodeValue, with unselected range collapsed at (detachedForeignTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignTextNode.nodeValue = detachedForeignTextNode.nodeValue, with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.nodeValue += "", with unselected range collapsed at (detachedForeignTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignTextNode.nodeValue += "", with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue += "foo", with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.nodeValue += "foo", with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue += detachedForeignTextNode.nodeValue, with unselected range collapsed at (detachedForeignTextNode, 1)
+FAIL detachedForeignTextNode.nodeValue += detachedForeignTextNode.nodeValue, with selected range collapsed at (detachedForeignTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data = "", with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.data = "", with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data = "foo", with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.data = "foo", with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.data = detachedForeignTextNode.data, with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedForeignTextNode.data = detachedForeignTextNode.data, with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.data += "", with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedForeignTextNode.data += "", with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data += "foo", with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.data += "foo", with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data += detachedForeignTextNode.data, with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.data += detachedForeignTextNode.data, with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent = "", with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.textContent = "", with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent = "foo", with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.textContent = "foo", with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.textContent = detachedForeignTextNode.textContent, with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedForeignTextNode.textContent = detachedForeignTextNode.textContent, with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.textContent += "", with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedForeignTextNode.textContent += "", with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent += "foo", with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.textContent += "foo", with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent += detachedForeignTextNode.textContent, with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.textContent += detachedForeignTextNode.textContent, with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue = "", with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.nodeValue = "", with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue = "foo", with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.nodeValue = "foo", with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.nodeValue = detachedForeignTextNode.nodeValue, with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedForeignTextNode.nodeValue = detachedForeignTextNode.nodeValue, with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.nodeValue += "", with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedForeignTextNode.nodeValue += "", with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue += "foo", with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.nodeValue += "foo", with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue += detachedForeignTextNode.nodeValue, with unselected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.nodeValue += detachedForeignTextNode.nodeValue, with selected range on detachedForeignTextNode from 0 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data = "", with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.data = "", with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data = "foo", with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.data = "foo", with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.data = detachedForeignTextNode.data, with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignTextNode.data = detachedForeignTextNode.data, with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.data += "", with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignTextNode.data += "", with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data += "foo", with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.data += "foo", with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data += detachedForeignTextNode.data, with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.data += detachedForeignTextNode.data, with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent = "", with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.textContent = "", with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent = "foo", with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.textContent = "foo", with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.textContent = detachedForeignTextNode.textContent, with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignTextNode.textContent = detachedForeignTextNode.textContent, with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.textContent += "", with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignTextNode.textContent += "", with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent += "foo", with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.textContent += "foo", with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent += detachedForeignTextNode.textContent, with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.textContent += detachedForeignTextNode.textContent, with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue = "", with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.nodeValue = "", with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue = "foo", with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.nodeValue = "foo", with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.nodeValue = detachedForeignTextNode.nodeValue, with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignTextNode.nodeValue = detachedForeignTextNode.nodeValue, with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.nodeValue += "", with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignTextNode.nodeValue += "", with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue += "foo", with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.nodeValue += "foo", with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue += detachedForeignTextNode.nodeValue, with unselected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length
+FAIL detachedForeignTextNode.nodeValue += detachedForeignTextNode.nodeValue, with selected range on detachedForeignTextNode from 1 to detachedForeignTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data = "", with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.data = "", with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data = "foo", with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.data = "foo", with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.data = detachedForeignTextNode.data, with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedForeignTextNode.data = detachedForeignTextNode.data, with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.data += "", with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedForeignTextNode.data += "", with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data += "foo", with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.data += "foo", with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.data += detachedForeignTextNode.data, with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.data += detachedForeignTextNode.data, with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent = "", with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.textContent = "", with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent = "foo", with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.textContent = "foo", with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.textContent = detachedForeignTextNode.textContent, with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedForeignTextNode.textContent = detachedForeignTextNode.textContent, with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.textContent += "", with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedForeignTextNode.textContent += "", with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent += "foo", with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.textContent += "foo", with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.textContent += detachedForeignTextNode.textContent, with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.textContent += detachedForeignTextNode.textContent, with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue = "", with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.nodeValue = "", with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue = "foo", with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.nodeValue = "foo", with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.nodeValue = detachedForeignTextNode.nodeValue, with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedForeignTextNode.nodeValue = detachedForeignTextNode.nodeValue, with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignTextNode.nodeValue += "", with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedForeignTextNode.nodeValue += "", with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue += "foo", with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.nodeValue += "foo", with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignTextNode.nodeValue += detachedForeignTextNode.nodeValue, with unselected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length)
+FAIL detachedForeignTextNode.nodeValue += detachedForeignTextNode.nodeValue, with selected range collapsed at (detachedForeignTextNode, detachedForeignTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data = "", with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.data = "", with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data = "foo", with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.data = "foo", with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data = detachedXmlTextNode.data, with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.data = detachedXmlTextNode.data, with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data += "", with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.data += "", with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data += "foo", with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.data += "foo", with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data += detachedXmlTextNode.data, with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.data += detachedXmlTextNode.data, with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent = "", with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.textContent = "", with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent = "foo", with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.textContent = "foo", with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent = detachedXmlTextNode.textContent, with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.textContent = detachedXmlTextNode.textContent, with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent += "", with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.textContent += "", with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent += "foo", with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.textContent += "foo", with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent += detachedXmlTextNode.textContent, with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.textContent += detachedXmlTextNode.textContent, with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue = "", with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.nodeValue = "", with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue = "foo", with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.nodeValue = "foo", with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue = detachedXmlTextNode.nodeValue, with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.nodeValue = detachedXmlTextNode.nodeValue, with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue += "", with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.nodeValue += "", with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue += "foo", with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.nodeValue += "foo", with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue += detachedXmlTextNode.nodeValue, with unselected range collapsed at (detachedXmlTextNode, 0)
+FAIL detachedXmlTextNode.nodeValue += detachedXmlTextNode.nodeValue, with selected range collapsed at (detachedXmlTextNode, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data = "", with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.data = "", with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data = "foo", with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.data = "foo", with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.data = detachedXmlTextNode.data, with unselected range on detachedXmlTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedXmlTextNode.data = detachedXmlTextNode.data, with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.data += "", with unselected range on detachedXmlTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedXmlTextNode.data += "", with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data += "foo", with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.data += "foo", with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data += detachedXmlTextNode.data, with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.data += detachedXmlTextNode.data, with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent = "", with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.textContent = "", with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent = "foo", with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.textContent = "foo", with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.textContent = detachedXmlTextNode.textContent, with unselected range on detachedXmlTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedXmlTextNode.textContent = detachedXmlTextNode.textContent, with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.textContent += "", with unselected range on detachedXmlTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedXmlTextNode.textContent += "", with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent += "foo", with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.textContent += "foo", with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent += detachedXmlTextNode.textContent, with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.textContent += detachedXmlTextNode.textContent, with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue = "", with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.nodeValue = "", with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue = "foo", with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.nodeValue = "foo", with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.nodeValue = detachedXmlTextNode.nodeValue, with unselected range on detachedXmlTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedXmlTextNode.nodeValue = detachedXmlTextNode.nodeValue, with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.nodeValue += "", with unselected range on detachedXmlTextNode from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedXmlTextNode.nodeValue += "", with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue += "foo", with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.nodeValue += "foo", with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue += detachedXmlTextNode.nodeValue, with unselected range on detachedXmlTextNode from 0 to 1
+FAIL detachedXmlTextNode.nodeValue += detachedXmlTextNode.nodeValue, with selected range on detachedXmlTextNode from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data = "", with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.data = "", with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data = "foo", with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.data = "foo", with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.data = detachedXmlTextNode.data, with unselected range collapsed at (detachedXmlTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlTextNode.data = detachedXmlTextNode.data, with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.data += "", with unselected range collapsed at (detachedXmlTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlTextNode.data += "", with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data += "foo", with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.data += "foo", with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data += detachedXmlTextNode.data, with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.data += detachedXmlTextNode.data, with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent = "", with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.textContent = "", with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent = "foo", with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.textContent = "foo", with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.textContent = detachedXmlTextNode.textContent, with unselected range collapsed at (detachedXmlTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlTextNode.textContent = detachedXmlTextNode.textContent, with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.textContent += "", with unselected range collapsed at (detachedXmlTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlTextNode.textContent += "", with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent += "foo", with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.textContent += "foo", with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent += detachedXmlTextNode.textContent, with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.textContent += detachedXmlTextNode.textContent, with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue = "", with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.nodeValue = "", with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue = "foo", with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.nodeValue = "foo", with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.nodeValue = detachedXmlTextNode.nodeValue, with unselected range collapsed at (detachedXmlTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlTextNode.nodeValue = detachedXmlTextNode.nodeValue, with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.nodeValue += "", with unselected range collapsed at (detachedXmlTextNode, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlTextNode.nodeValue += "", with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue += "foo", with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.nodeValue += "foo", with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue += detachedXmlTextNode.nodeValue, with unselected range collapsed at (detachedXmlTextNode, 1)
+FAIL detachedXmlTextNode.nodeValue += detachedXmlTextNode.nodeValue, with selected range collapsed at (detachedXmlTextNode, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data = "", with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.data = "", with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data = "foo", with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.data = "foo", with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.data = detachedXmlTextNode.data, with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedXmlTextNode.data = detachedXmlTextNode.data, with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.data += "", with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedXmlTextNode.data += "", with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data += "foo", with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.data += "foo", with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data += detachedXmlTextNode.data, with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.data += detachedXmlTextNode.data, with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent = "", with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.textContent = "", with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent = "foo", with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.textContent = "foo", with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.textContent = detachedXmlTextNode.textContent, with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedXmlTextNode.textContent = detachedXmlTextNode.textContent, with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.textContent += "", with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedXmlTextNode.textContent += "", with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent += "foo", with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.textContent += "foo", with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent += detachedXmlTextNode.textContent, with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.textContent += detachedXmlTextNode.textContent, with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue = "", with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.nodeValue = "", with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue = "foo", with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.nodeValue = "foo", with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.nodeValue = detachedXmlTextNode.nodeValue, with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedXmlTextNode.nodeValue = detachedXmlTextNode.nodeValue, with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.nodeValue += "", with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedXmlTextNode.nodeValue += "", with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue += "foo", with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.nodeValue += "foo", with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue += detachedXmlTextNode.nodeValue, with unselected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.nodeValue += detachedXmlTextNode.nodeValue, with selected range on detachedXmlTextNode from 0 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data = "", with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.data = "", with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data = "foo", with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.data = "foo", with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.data = detachedXmlTextNode.data, with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlTextNode.data = detachedXmlTextNode.data, with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.data += "", with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlTextNode.data += "", with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data += "foo", with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.data += "foo", with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data += detachedXmlTextNode.data, with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.data += detachedXmlTextNode.data, with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent = "", with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.textContent = "", with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent = "foo", with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.textContent = "foo", with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.textContent = detachedXmlTextNode.textContent, with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlTextNode.textContent = detachedXmlTextNode.textContent, with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.textContent += "", with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlTextNode.textContent += "", with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent += "foo", with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.textContent += "foo", with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent += detachedXmlTextNode.textContent, with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.textContent += detachedXmlTextNode.textContent, with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue = "", with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.nodeValue = "", with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue = "foo", with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.nodeValue = "foo", with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.nodeValue = detachedXmlTextNode.nodeValue, with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlTextNode.nodeValue = detachedXmlTextNode.nodeValue, with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.nodeValue += "", with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlTextNode.nodeValue += "", with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue += "foo", with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.nodeValue += "foo", with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue += detachedXmlTextNode.nodeValue, with unselected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length
+FAIL detachedXmlTextNode.nodeValue += detachedXmlTextNode.nodeValue, with selected range on detachedXmlTextNode from 1 to detachedXmlTextNode.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data = "", with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.data = "", with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data = "foo", with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.data = "foo", with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.data = detachedXmlTextNode.data, with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedXmlTextNode.data = detachedXmlTextNode.data, with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.data += "", with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedXmlTextNode.data += "", with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data += "foo", with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.data += "foo", with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.data += detachedXmlTextNode.data, with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.data += detachedXmlTextNode.data, with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent = "", with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.textContent = "", with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent = "foo", with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.textContent = "foo", with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.textContent = detachedXmlTextNode.textContent, with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedXmlTextNode.textContent = detachedXmlTextNode.textContent, with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.textContent += "", with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedXmlTextNode.textContent += "", with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent += "foo", with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.textContent += "foo", with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.textContent += detachedXmlTextNode.textContent, with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.textContent += detachedXmlTextNode.textContent, with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue = "", with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.nodeValue = "", with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue = "foo", with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.nodeValue = "foo", with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.nodeValue = detachedXmlTextNode.nodeValue, with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedXmlTextNode.nodeValue = detachedXmlTextNode.nodeValue, with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlTextNode.nodeValue += "", with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedXmlTextNode.nodeValue += "", with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue += "foo", with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.nodeValue += "foo", with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlTextNode.nodeValue += detachedXmlTextNode.nodeValue, with unselected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length)
+FAIL detachedXmlTextNode.nodeValue += detachedXmlTextNode.nodeValue, with selected range collapsed at (detachedXmlTextNode, detachedXmlTextNode.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS comment.data = "", with unselected range collapsed at (comment, 0)
+FAIL comment.data = "", with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data = "foo", with unselected range collapsed at (comment, 0)
+FAIL comment.data = "foo", with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data = comment.data, with unselected range collapsed at (comment, 0)
+FAIL comment.data = comment.data, with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data += "", with unselected range collapsed at (comment, 0)
+FAIL comment.data += "", with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data += "foo", with unselected range collapsed at (comment, 0)
+FAIL comment.data += "foo", with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data += comment.data, with unselected range collapsed at (comment, 0)
+FAIL comment.data += comment.data, with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent = "", with unselected range collapsed at (comment, 0)
+FAIL comment.textContent = "", with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent = "foo", with unselected range collapsed at (comment, 0)
+FAIL comment.textContent = "foo", with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent = comment.textContent, with unselected range collapsed at (comment, 0)
+FAIL comment.textContent = comment.textContent, with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent += "", with unselected range collapsed at (comment, 0)
+FAIL comment.textContent += "", with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent += "foo", with unselected range collapsed at (comment, 0)
+FAIL comment.textContent += "foo", with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent += comment.textContent, with unselected range collapsed at (comment, 0)
+FAIL comment.textContent += comment.textContent, with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue = "", with unselected range collapsed at (comment, 0)
+FAIL comment.nodeValue = "", with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue = "foo", with unselected range collapsed at (comment, 0)
+FAIL comment.nodeValue = "foo", with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue = comment.nodeValue, with unselected range collapsed at (comment, 0)
+FAIL comment.nodeValue = comment.nodeValue, with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue += "", with unselected range collapsed at (comment, 0)
+FAIL comment.nodeValue += "", with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue += "foo", with unselected range collapsed at (comment, 0)
+FAIL comment.nodeValue += "foo", with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue += comment.nodeValue, with unselected range collapsed at (comment, 0)
+FAIL comment.nodeValue += comment.nodeValue, with selected range collapsed at (comment, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data = "", with unselected range on comment from 0 to 1
+FAIL comment.data = "", with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data = "foo", with unselected range on comment from 0 to 1
+FAIL comment.data = "foo", with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.data = comment.data, with unselected range on comment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL comment.data = comment.data, with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.data += "", with unselected range on comment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL comment.data += "", with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data += "foo", with unselected range on comment from 0 to 1
+FAIL comment.data += "foo", with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data += comment.data, with unselected range on comment from 0 to 1
+FAIL comment.data += comment.data, with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent = "", with unselected range on comment from 0 to 1
+FAIL comment.textContent = "", with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent = "foo", with unselected range on comment from 0 to 1
+FAIL comment.textContent = "foo", with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.textContent = comment.textContent, with unselected range on comment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL comment.textContent = comment.textContent, with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.textContent += "", with unselected range on comment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL comment.textContent += "", with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent += "foo", with unselected range on comment from 0 to 1
+FAIL comment.textContent += "foo", with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent += comment.textContent, with unselected range on comment from 0 to 1
+FAIL comment.textContent += comment.textContent, with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue = "", with unselected range on comment from 0 to 1
+FAIL comment.nodeValue = "", with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue = "foo", with unselected range on comment from 0 to 1
+FAIL comment.nodeValue = "foo", with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.nodeValue = comment.nodeValue, with unselected range on comment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL comment.nodeValue = comment.nodeValue, with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.nodeValue += "", with unselected range on comment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL comment.nodeValue += "", with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue += "foo", with unselected range on comment from 0 to 1
+FAIL comment.nodeValue += "foo", with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue += comment.nodeValue, with unselected range on comment from 0 to 1
+FAIL comment.nodeValue += comment.nodeValue, with selected range on comment from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data = "", with unselected range collapsed at (comment, 1)
+FAIL comment.data = "", with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data = "foo", with unselected range collapsed at (comment, 1)
+FAIL comment.data = "foo", with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.data = comment.data, with unselected range collapsed at (comment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL comment.data = comment.data, with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.data += "", with unselected range collapsed at (comment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL comment.data += "", with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data += "foo", with unselected range collapsed at (comment, 1)
+FAIL comment.data += "foo", with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data += comment.data, with unselected range collapsed at (comment, 1)
+FAIL comment.data += comment.data, with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent = "", with unselected range collapsed at (comment, 1)
+FAIL comment.textContent = "", with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent = "foo", with unselected range collapsed at (comment, 1)
+FAIL comment.textContent = "foo", with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.textContent = comment.textContent, with unselected range collapsed at (comment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL comment.textContent = comment.textContent, with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.textContent += "", with unselected range collapsed at (comment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL comment.textContent += "", with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent += "foo", with unselected range collapsed at (comment, 1)
+FAIL comment.textContent += "foo", with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent += comment.textContent, with unselected range collapsed at (comment, 1)
+FAIL comment.textContent += comment.textContent, with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue = "", with unselected range collapsed at (comment, 1)
+FAIL comment.nodeValue = "", with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue = "foo", with unselected range collapsed at (comment, 1)
+FAIL comment.nodeValue = "foo", with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.nodeValue = comment.nodeValue, with unselected range collapsed at (comment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL comment.nodeValue = comment.nodeValue, with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.nodeValue += "", with unselected range collapsed at (comment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL comment.nodeValue += "", with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue += "foo", with unselected range collapsed at (comment, 1)
+FAIL comment.nodeValue += "foo", with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue += comment.nodeValue, with unselected range collapsed at (comment, 1)
+FAIL comment.nodeValue += comment.nodeValue, with selected range collapsed at (comment, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data = "", with unselected range on comment from 0 to comment.length
+FAIL comment.data = "", with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data = "foo", with unselected range on comment from 0 to comment.length
+FAIL comment.data = "foo", with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.data = comment.data, with unselected range on comment from 0 to comment.length assert_equals: Wrong end offset expected 0 but got 14
+FAIL comment.data = comment.data, with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.data += "", with unselected range on comment from 0 to comment.length assert_equals: Wrong end offset expected 0 but got 14
+FAIL comment.data += "", with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data += "foo", with unselected range on comment from 0 to comment.length
+FAIL comment.data += "foo", with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data += comment.data, with unselected range on comment from 0 to comment.length
+FAIL comment.data += comment.data, with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent = "", with unselected range on comment from 0 to comment.length
+FAIL comment.textContent = "", with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent = "foo", with unselected range on comment from 0 to comment.length
+FAIL comment.textContent = "foo", with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.textContent = comment.textContent, with unselected range on comment from 0 to comment.length assert_equals: Wrong end offset expected 0 but got 14
+FAIL comment.textContent = comment.textContent, with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.textContent += "", with unselected range on comment from 0 to comment.length assert_equals: Wrong end offset expected 0 but got 14
+FAIL comment.textContent += "", with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent += "foo", with unselected range on comment from 0 to comment.length
+FAIL comment.textContent += "foo", with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent += comment.textContent, with unselected range on comment from 0 to comment.length
+FAIL comment.textContent += comment.textContent, with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue = "", with unselected range on comment from 0 to comment.length
+FAIL comment.nodeValue = "", with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue = "foo", with unselected range on comment from 0 to comment.length
+FAIL comment.nodeValue = "foo", with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.nodeValue = comment.nodeValue, with unselected range on comment from 0 to comment.length assert_equals: Wrong end offset expected 0 but got 14
+FAIL comment.nodeValue = comment.nodeValue, with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.nodeValue += "", with unselected range on comment from 0 to comment.length assert_equals: Wrong end offset expected 0 but got 14
+FAIL comment.nodeValue += "", with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue += "foo", with unselected range on comment from 0 to comment.length
+FAIL comment.nodeValue += "foo", with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue += comment.nodeValue, with unselected range on comment from 0 to comment.length
+FAIL comment.nodeValue += comment.nodeValue, with selected range on comment from 0 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data = "", with unselected range on comment from 1 to comment.length
+FAIL comment.data = "", with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data = "foo", with unselected range on comment from 1 to comment.length
+FAIL comment.data = "foo", with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.data = comment.data, with unselected range on comment from 1 to comment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL comment.data = comment.data, with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.data += "", with unselected range on comment from 1 to comment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL comment.data += "", with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data += "foo", with unselected range on comment from 1 to comment.length
+FAIL comment.data += "foo", with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data += comment.data, with unselected range on comment from 1 to comment.length
+FAIL comment.data += comment.data, with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent = "", with unselected range on comment from 1 to comment.length
+FAIL comment.textContent = "", with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent = "foo", with unselected range on comment from 1 to comment.length
+FAIL comment.textContent = "foo", with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.textContent = comment.textContent, with unselected range on comment from 1 to comment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL comment.textContent = comment.textContent, with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.textContent += "", with unselected range on comment from 1 to comment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL comment.textContent += "", with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent += "foo", with unselected range on comment from 1 to comment.length
+FAIL comment.textContent += "foo", with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent += comment.textContent, with unselected range on comment from 1 to comment.length
+FAIL comment.textContent += comment.textContent, with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue = "", with unselected range on comment from 1 to comment.length
+FAIL comment.nodeValue = "", with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue = "foo", with unselected range on comment from 1 to comment.length
+FAIL comment.nodeValue = "foo", with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.nodeValue = comment.nodeValue, with unselected range on comment from 1 to comment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL comment.nodeValue = comment.nodeValue, with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.nodeValue += "", with unselected range on comment from 1 to comment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL comment.nodeValue += "", with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue += "foo", with unselected range on comment from 1 to comment.length
+FAIL comment.nodeValue += "foo", with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue += comment.nodeValue, with unselected range on comment from 1 to comment.length
+FAIL comment.nodeValue += comment.nodeValue, with selected range on comment from 1 to comment.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data = "", with unselected range collapsed at (comment, comment.length)
+FAIL comment.data = "", with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data = "foo", with unselected range collapsed at (comment, comment.length)
+FAIL comment.data = "foo", with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.data = comment.data, with unselected range collapsed at (comment, comment.length) assert_equals: Wrong start offset expected 0 but got 14
+FAIL comment.data = comment.data, with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.data += "", with unselected range collapsed at (comment, comment.length) assert_equals: Wrong start offset expected 0 but got 14
+FAIL comment.data += "", with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data += "foo", with unselected range collapsed at (comment, comment.length)
+FAIL comment.data += "foo", with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.data += comment.data, with unselected range collapsed at (comment, comment.length)
+FAIL comment.data += comment.data, with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent = "", with unselected range collapsed at (comment, comment.length)
+FAIL comment.textContent = "", with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent = "foo", with unselected range collapsed at (comment, comment.length)
+FAIL comment.textContent = "foo", with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.textContent = comment.textContent, with unselected range collapsed at (comment, comment.length) assert_equals: Wrong start offset expected 0 but got 14
+FAIL comment.textContent = comment.textContent, with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.textContent += "", with unselected range collapsed at (comment, comment.length) assert_equals: Wrong start offset expected 0 but got 14
+FAIL comment.textContent += "", with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent += "foo", with unselected range collapsed at (comment, comment.length)
+FAIL comment.textContent += "foo", with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.textContent += comment.textContent, with unselected range collapsed at (comment, comment.length)
+FAIL comment.textContent += comment.textContent, with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue = "", with unselected range collapsed at (comment, comment.length)
+FAIL comment.nodeValue = "", with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue = "foo", with unselected range collapsed at (comment, comment.length)
+FAIL comment.nodeValue = "foo", with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.nodeValue = comment.nodeValue, with unselected range collapsed at (comment, comment.length) assert_equals: Wrong start offset expected 0 but got 14
+FAIL comment.nodeValue = comment.nodeValue, with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL comment.nodeValue += "", with unselected range collapsed at (comment, comment.length) assert_equals: Wrong start offset expected 0 but got 14
+FAIL comment.nodeValue += "", with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue += "foo", with unselected range collapsed at (comment, comment.length)
+FAIL comment.nodeValue += "foo", with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS comment.nodeValue += comment.nodeValue, with unselected range collapsed at (comment, comment.length)
+FAIL comment.nodeValue += comment.nodeValue, with selected range collapsed at (comment, comment.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS foreignComment.data = "", with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.data = "", with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data = "foo", with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.data = "foo", with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data = foreignComment.data, with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.data = foreignComment.data, with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data += "", with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.data += "", with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data += "foo", with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.data += "foo", with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data += foreignComment.data, with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.data += foreignComment.data, with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent = "", with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.textContent = "", with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent = "foo", with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.textContent = "foo", with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent = foreignComment.textContent, with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.textContent = foreignComment.textContent, with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent += "", with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.textContent += "", with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent += "foo", with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.textContent += "foo", with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent += foreignComment.textContent, with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.textContent += foreignComment.textContent, with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue = "", with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.nodeValue = "", with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue = "foo", with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.nodeValue = "foo", with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue = foreignComment.nodeValue, with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.nodeValue = foreignComment.nodeValue, with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue += "", with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.nodeValue += "", with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue += "foo", with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.nodeValue += "foo", with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue += foreignComment.nodeValue, with unselected range collapsed at (foreignComment, 0)
+FAIL foreignComment.nodeValue += foreignComment.nodeValue, with selected range collapsed at (foreignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data = "", with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.data = "", with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data = "foo", with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.data = "foo", with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.data = foreignComment.data, with unselected range on foreignComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL foreignComment.data = foreignComment.data, with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.data += "", with unselected range on foreignComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL foreignComment.data += "", with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data += "foo", with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.data += "foo", with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data += foreignComment.data, with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.data += foreignComment.data, with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent = "", with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.textContent = "", with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent = "foo", with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.textContent = "foo", with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.textContent = foreignComment.textContent, with unselected range on foreignComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL foreignComment.textContent = foreignComment.textContent, with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.textContent += "", with unselected range on foreignComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL foreignComment.textContent += "", with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent += "foo", with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.textContent += "foo", with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent += foreignComment.textContent, with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.textContent += foreignComment.textContent, with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue = "", with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.nodeValue = "", with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue = "foo", with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.nodeValue = "foo", with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.nodeValue = foreignComment.nodeValue, with unselected range on foreignComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL foreignComment.nodeValue = foreignComment.nodeValue, with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.nodeValue += "", with unselected range on foreignComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL foreignComment.nodeValue += "", with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue += "foo", with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.nodeValue += "foo", with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue += foreignComment.nodeValue, with unselected range on foreignComment from 0 to 1
+FAIL foreignComment.nodeValue += foreignComment.nodeValue, with selected range on foreignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data = "", with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.data = "", with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data = "foo", with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.data = "foo", with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.data = foreignComment.data, with unselected range collapsed at (foreignComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignComment.data = foreignComment.data, with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.data += "", with unselected range collapsed at (foreignComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignComment.data += "", with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data += "foo", with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.data += "foo", with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data += foreignComment.data, with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.data += foreignComment.data, with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent = "", with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.textContent = "", with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent = "foo", with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.textContent = "foo", with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.textContent = foreignComment.textContent, with unselected range collapsed at (foreignComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignComment.textContent = foreignComment.textContent, with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.textContent += "", with unselected range collapsed at (foreignComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignComment.textContent += "", with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent += "foo", with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.textContent += "foo", with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent += foreignComment.textContent, with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.textContent += foreignComment.textContent, with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue = "", with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.nodeValue = "", with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue = "foo", with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.nodeValue = "foo", with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.nodeValue = foreignComment.nodeValue, with unselected range collapsed at (foreignComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignComment.nodeValue = foreignComment.nodeValue, with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.nodeValue += "", with unselected range collapsed at (foreignComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignComment.nodeValue += "", with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue += "foo", with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.nodeValue += "foo", with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue += foreignComment.nodeValue, with unselected range collapsed at (foreignComment, 1)
+FAIL foreignComment.nodeValue += foreignComment.nodeValue, with selected range collapsed at (foreignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data = "", with unselected range on foreignComment from 0 to foreignComment.length
+FAIL foreignComment.data = "", with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data = "foo", with unselected range on foreignComment from 0 to foreignComment.length
+FAIL foreignComment.data = "foo", with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.data = foreignComment.data, with unselected range on foreignComment from 0 to foreignComment.length assert_equals: Wrong end offset expected 0 but got 100
+FAIL foreignComment.data = foreignComment.data, with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.data += "", with unselected range on foreignComment from 0 to foreignComment.length assert_equals: Wrong end offset expected 0 but got 100
+FAIL foreignComment.data += "", with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data += "foo", with unselected range on foreignComment from 0 to foreignComment.length
+FAIL foreignComment.data += "foo", with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data += foreignComment.data, with unselected range on foreignComment from 0 to foreignComment.length
+FAIL foreignComment.data += foreignComment.data, with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent = "", with unselected range on foreignComment from 0 to foreignComment.length
+FAIL foreignComment.textContent = "", with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent = "foo", with unselected range on foreignComment from 0 to foreignComment.length
+FAIL foreignComment.textContent = "foo", with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.textContent = foreignComment.textContent, with unselected range on foreignComment from 0 to foreignComment.length assert_equals: Wrong end offset expected 0 but got 100
+FAIL foreignComment.textContent = foreignComment.textContent, with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.textContent += "", with unselected range on foreignComment from 0 to foreignComment.length assert_equals: Wrong end offset expected 0 but got 100
+FAIL foreignComment.textContent += "", with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent += "foo", with unselected range on foreignComment from 0 to foreignComment.length
+FAIL foreignComment.textContent += "foo", with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent += foreignComment.textContent, with unselected range on foreignComment from 0 to foreignComment.length
+FAIL foreignComment.textContent += foreignComment.textContent, with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue = "", with unselected range on foreignComment from 0 to foreignComment.length
+FAIL foreignComment.nodeValue = "", with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue = "foo", with unselected range on foreignComment from 0 to foreignComment.length
+FAIL foreignComment.nodeValue = "foo", with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.nodeValue = foreignComment.nodeValue, with unselected range on foreignComment from 0 to foreignComment.length assert_equals: Wrong end offset expected 0 but got 100
+FAIL foreignComment.nodeValue = foreignComment.nodeValue, with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.nodeValue += "", with unselected range on foreignComment from 0 to foreignComment.length assert_equals: Wrong end offset expected 0 but got 100
+FAIL foreignComment.nodeValue += "", with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue += "foo", with unselected range on foreignComment from 0 to foreignComment.length
+FAIL foreignComment.nodeValue += "foo", with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue += foreignComment.nodeValue, with unselected range on foreignComment from 0 to foreignComment.length
+FAIL foreignComment.nodeValue += foreignComment.nodeValue, with selected range on foreignComment from 0 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data = "", with unselected range on foreignComment from 1 to foreignComment.length
+FAIL foreignComment.data = "", with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data = "foo", with unselected range on foreignComment from 1 to foreignComment.length
+FAIL foreignComment.data = "foo", with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.data = foreignComment.data, with unselected range on foreignComment from 1 to foreignComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignComment.data = foreignComment.data, with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.data += "", with unselected range on foreignComment from 1 to foreignComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignComment.data += "", with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data += "foo", with unselected range on foreignComment from 1 to foreignComment.length
+FAIL foreignComment.data += "foo", with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data += foreignComment.data, with unselected range on foreignComment from 1 to foreignComment.length
+FAIL foreignComment.data += foreignComment.data, with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent = "", with unselected range on foreignComment from 1 to foreignComment.length
+FAIL foreignComment.textContent = "", with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent = "foo", with unselected range on foreignComment from 1 to foreignComment.length
+FAIL foreignComment.textContent = "foo", with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.textContent = foreignComment.textContent, with unselected range on foreignComment from 1 to foreignComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignComment.textContent = foreignComment.textContent, with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.textContent += "", with unselected range on foreignComment from 1 to foreignComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignComment.textContent += "", with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent += "foo", with unselected range on foreignComment from 1 to foreignComment.length
+FAIL foreignComment.textContent += "foo", with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent += foreignComment.textContent, with unselected range on foreignComment from 1 to foreignComment.length
+FAIL foreignComment.textContent += foreignComment.textContent, with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue = "", with unselected range on foreignComment from 1 to foreignComment.length
+FAIL foreignComment.nodeValue = "", with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue = "foo", with unselected range on foreignComment from 1 to foreignComment.length
+FAIL foreignComment.nodeValue = "foo", with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.nodeValue = foreignComment.nodeValue, with unselected range on foreignComment from 1 to foreignComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignComment.nodeValue = foreignComment.nodeValue, with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.nodeValue += "", with unselected range on foreignComment from 1 to foreignComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL foreignComment.nodeValue += "", with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue += "foo", with unselected range on foreignComment from 1 to foreignComment.length
+FAIL foreignComment.nodeValue += "foo", with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue += foreignComment.nodeValue, with unselected range on foreignComment from 1 to foreignComment.length
+FAIL foreignComment.nodeValue += foreignComment.nodeValue, with selected range on foreignComment from 1 to foreignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data = "", with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.data = "", with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data = "foo", with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.data = "foo", with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.data = foreignComment.data, with unselected range collapsed at (foreignComment, foreignComment.length) assert_equals: Wrong start offset expected 0 but got 100
+FAIL foreignComment.data = foreignComment.data, with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.data += "", with unselected range collapsed at (foreignComment, foreignComment.length) assert_equals: Wrong start offset expected 0 but got 100
+FAIL foreignComment.data += "", with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data += "foo", with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.data += "foo", with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.data += foreignComment.data, with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.data += foreignComment.data, with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent = "", with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.textContent = "", with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent = "foo", with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.textContent = "foo", with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.textContent = foreignComment.textContent, with unselected range collapsed at (foreignComment, foreignComment.length) assert_equals: Wrong start offset expected 0 but got 100
+FAIL foreignComment.textContent = foreignComment.textContent, with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.textContent += "", with unselected range collapsed at (foreignComment, foreignComment.length) assert_equals: Wrong start offset expected 0 but got 100
+FAIL foreignComment.textContent += "", with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent += "foo", with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.textContent += "foo", with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.textContent += foreignComment.textContent, with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.textContent += foreignComment.textContent, with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue = "", with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.nodeValue = "", with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue = "foo", with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.nodeValue = "foo", with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.nodeValue = foreignComment.nodeValue, with unselected range collapsed at (foreignComment, foreignComment.length) assert_equals: Wrong start offset expected 0 but got 100
+FAIL foreignComment.nodeValue = foreignComment.nodeValue, with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL foreignComment.nodeValue += "", with unselected range collapsed at (foreignComment, foreignComment.length) assert_equals: Wrong start offset expected 0 but got 100
+FAIL foreignComment.nodeValue += "", with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue += "foo", with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.nodeValue += "foo", with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignComment.nodeValue += foreignComment.nodeValue, with unselected range collapsed at (foreignComment, foreignComment.length)
+FAIL foreignComment.nodeValue += foreignComment.nodeValue, with selected range collapsed at (foreignComment, foreignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data = "", with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.data = "", with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data = "foo", with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.data = "foo", with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data = xmlComment.data, with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.data = xmlComment.data, with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data += "", with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.data += "", with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data += "foo", with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.data += "foo", with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data += xmlComment.data, with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.data += xmlComment.data, with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent = "", with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.textContent = "", with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent = "foo", with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.textContent = "foo", with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent = xmlComment.textContent, with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.textContent = xmlComment.textContent, with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent += "", with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.textContent += "", with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent += "foo", with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.textContent += "foo", with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent += xmlComment.textContent, with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.textContent += xmlComment.textContent, with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue = "", with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.nodeValue = "", with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue = "foo", with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.nodeValue = "foo", with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue = xmlComment.nodeValue, with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.nodeValue = xmlComment.nodeValue, with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue += "", with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.nodeValue += "", with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue += "foo", with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.nodeValue += "foo", with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue += xmlComment.nodeValue, with unselected range collapsed at (xmlComment, 0)
+FAIL xmlComment.nodeValue += xmlComment.nodeValue, with selected range collapsed at (xmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data = "", with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.data = "", with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data = "foo", with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.data = "foo", with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.data = xmlComment.data, with unselected range on xmlComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL xmlComment.data = xmlComment.data, with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.data += "", with unselected range on xmlComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL xmlComment.data += "", with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data += "foo", with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.data += "foo", with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data += xmlComment.data, with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.data += xmlComment.data, with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent = "", with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.textContent = "", with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent = "foo", with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.textContent = "foo", with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.textContent = xmlComment.textContent, with unselected range on xmlComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL xmlComment.textContent = xmlComment.textContent, with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.textContent += "", with unselected range on xmlComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL xmlComment.textContent += "", with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent += "foo", with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.textContent += "foo", with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent += xmlComment.textContent, with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.textContent += xmlComment.textContent, with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue = "", with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.nodeValue = "", with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue = "foo", with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.nodeValue = "foo", with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.nodeValue = xmlComment.nodeValue, with unselected range on xmlComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL xmlComment.nodeValue = xmlComment.nodeValue, with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.nodeValue += "", with unselected range on xmlComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL xmlComment.nodeValue += "", with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue += "foo", with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.nodeValue += "foo", with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue += xmlComment.nodeValue, with unselected range on xmlComment from 0 to 1
+FAIL xmlComment.nodeValue += xmlComment.nodeValue, with selected range on xmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data = "", with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.data = "", with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data = "foo", with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.data = "foo", with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.data = xmlComment.data, with unselected range collapsed at (xmlComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlComment.data = xmlComment.data, with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.data += "", with unselected range collapsed at (xmlComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlComment.data += "", with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data += "foo", with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.data += "foo", with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data += xmlComment.data, with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.data += xmlComment.data, with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent = "", with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.textContent = "", with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent = "foo", with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.textContent = "foo", with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.textContent = xmlComment.textContent, with unselected range collapsed at (xmlComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlComment.textContent = xmlComment.textContent, with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.textContent += "", with unselected range collapsed at (xmlComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlComment.textContent += "", with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent += "foo", with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.textContent += "foo", with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent += xmlComment.textContent, with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.textContent += xmlComment.textContent, with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue = "", with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.nodeValue = "", with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue = "foo", with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.nodeValue = "foo", with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.nodeValue = xmlComment.nodeValue, with unselected range collapsed at (xmlComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlComment.nodeValue = xmlComment.nodeValue, with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.nodeValue += "", with unselected range collapsed at (xmlComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlComment.nodeValue += "", with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue += "foo", with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.nodeValue += "foo", with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue += xmlComment.nodeValue, with unselected range collapsed at (xmlComment, 1)
+FAIL xmlComment.nodeValue += xmlComment.nodeValue, with selected range collapsed at (xmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data = "", with unselected range on xmlComment from 0 to xmlComment.length
+FAIL xmlComment.data = "", with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data = "foo", with unselected range on xmlComment from 0 to xmlComment.length
+FAIL xmlComment.data = "foo", with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.data = xmlComment.data, with unselected range on xmlComment from 0 to xmlComment.length assert_equals: Wrong end offset expected 0 but got 143
+FAIL xmlComment.data = xmlComment.data, with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.data += "", with unselected range on xmlComment from 0 to xmlComment.length assert_equals: Wrong end offset expected 0 but got 143
+FAIL xmlComment.data += "", with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data += "foo", with unselected range on xmlComment from 0 to xmlComment.length
+FAIL xmlComment.data += "foo", with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data += xmlComment.data, with unselected range on xmlComment from 0 to xmlComment.length
+FAIL xmlComment.data += xmlComment.data, with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent = "", with unselected range on xmlComment from 0 to xmlComment.length
+FAIL xmlComment.textContent = "", with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent = "foo", with unselected range on xmlComment from 0 to xmlComment.length
+FAIL xmlComment.textContent = "foo", with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.textContent = xmlComment.textContent, with unselected range on xmlComment from 0 to xmlComment.length assert_equals: Wrong end offset expected 0 but got 143
+FAIL xmlComment.textContent = xmlComment.textContent, with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.textContent += "", with unselected range on xmlComment from 0 to xmlComment.length assert_equals: Wrong end offset expected 0 but got 143
+FAIL xmlComment.textContent += "", with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent += "foo", with unselected range on xmlComment from 0 to xmlComment.length
+FAIL xmlComment.textContent += "foo", with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent += xmlComment.textContent, with unselected range on xmlComment from 0 to xmlComment.length
+FAIL xmlComment.textContent += xmlComment.textContent, with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue = "", with unselected range on xmlComment from 0 to xmlComment.length
+FAIL xmlComment.nodeValue = "", with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue = "foo", with unselected range on xmlComment from 0 to xmlComment.length
+FAIL xmlComment.nodeValue = "foo", with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.nodeValue = xmlComment.nodeValue, with unselected range on xmlComment from 0 to xmlComment.length assert_equals: Wrong end offset expected 0 but got 143
+FAIL xmlComment.nodeValue = xmlComment.nodeValue, with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.nodeValue += "", with unselected range on xmlComment from 0 to xmlComment.length assert_equals: Wrong end offset expected 0 but got 143
+FAIL xmlComment.nodeValue += "", with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue += "foo", with unselected range on xmlComment from 0 to xmlComment.length
+FAIL xmlComment.nodeValue += "foo", with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue += xmlComment.nodeValue, with unselected range on xmlComment from 0 to xmlComment.length
+FAIL xmlComment.nodeValue += xmlComment.nodeValue, with selected range on xmlComment from 0 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data = "", with unselected range on xmlComment from 1 to xmlComment.length
+FAIL xmlComment.data = "", with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data = "foo", with unselected range on xmlComment from 1 to xmlComment.length
+FAIL xmlComment.data = "foo", with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.data = xmlComment.data, with unselected range on xmlComment from 1 to xmlComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlComment.data = xmlComment.data, with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.data += "", with unselected range on xmlComment from 1 to xmlComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlComment.data += "", with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data += "foo", with unselected range on xmlComment from 1 to xmlComment.length
+FAIL xmlComment.data += "foo", with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data += xmlComment.data, with unselected range on xmlComment from 1 to xmlComment.length
+FAIL xmlComment.data += xmlComment.data, with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent = "", with unselected range on xmlComment from 1 to xmlComment.length
+FAIL xmlComment.textContent = "", with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent = "foo", with unselected range on xmlComment from 1 to xmlComment.length
+FAIL xmlComment.textContent = "foo", with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.textContent = xmlComment.textContent, with unselected range on xmlComment from 1 to xmlComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlComment.textContent = xmlComment.textContent, with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.textContent += "", with unselected range on xmlComment from 1 to xmlComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlComment.textContent += "", with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent += "foo", with unselected range on xmlComment from 1 to xmlComment.length
+FAIL xmlComment.textContent += "foo", with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent += xmlComment.textContent, with unselected range on xmlComment from 1 to xmlComment.length
+FAIL xmlComment.textContent += xmlComment.textContent, with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue = "", with unselected range on xmlComment from 1 to xmlComment.length
+FAIL xmlComment.nodeValue = "", with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue = "foo", with unselected range on xmlComment from 1 to xmlComment.length
+FAIL xmlComment.nodeValue = "foo", with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.nodeValue = xmlComment.nodeValue, with unselected range on xmlComment from 1 to xmlComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlComment.nodeValue = xmlComment.nodeValue, with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.nodeValue += "", with unselected range on xmlComment from 1 to xmlComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL xmlComment.nodeValue += "", with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue += "foo", with unselected range on xmlComment from 1 to xmlComment.length
+FAIL xmlComment.nodeValue += "foo", with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue += xmlComment.nodeValue, with unselected range on xmlComment from 1 to xmlComment.length
+FAIL xmlComment.nodeValue += xmlComment.nodeValue, with selected range on xmlComment from 1 to xmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data = "", with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.data = "", with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data = "foo", with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.data = "foo", with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.data = xmlComment.data, with unselected range collapsed at (xmlComment, xmlComment.length) assert_equals: Wrong start offset expected 0 but got 143
+FAIL xmlComment.data = xmlComment.data, with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.data += "", with unselected range collapsed at (xmlComment, xmlComment.length) assert_equals: Wrong start offset expected 0 but got 143
+FAIL xmlComment.data += "", with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data += "foo", with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.data += "foo", with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.data += xmlComment.data, with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.data += xmlComment.data, with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent = "", with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.textContent = "", with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent = "foo", with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.textContent = "foo", with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.textContent = xmlComment.textContent, with unselected range collapsed at (xmlComment, xmlComment.length) assert_equals: Wrong start offset expected 0 but got 143
+FAIL xmlComment.textContent = xmlComment.textContent, with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.textContent += "", with unselected range collapsed at (xmlComment, xmlComment.length) assert_equals: Wrong start offset expected 0 but got 143
+FAIL xmlComment.textContent += "", with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent += "foo", with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.textContent += "foo", with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.textContent += xmlComment.textContent, with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.textContent += xmlComment.textContent, with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue = "", with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.nodeValue = "", with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue = "foo", with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.nodeValue = "foo", with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.nodeValue = xmlComment.nodeValue, with unselected range collapsed at (xmlComment, xmlComment.length) assert_equals: Wrong start offset expected 0 but got 143
+FAIL xmlComment.nodeValue = xmlComment.nodeValue, with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL xmlComment.nodeValue += "", with unselected range collapsed at (xmlComment, xmlComment.length) assert_equals: Wrong start offset expected 0 but got 143
+FAIL xmlComment.nodeValue += "", with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue += "foo", with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.nodeValue += "foo", with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS xmlComment.nodeValue += xmlComment.nodeValue, with unselected range collapsed at (xmlComment, xmlComment.length)
+FAIL xmlComment.nodeValue += xmlComment.nodeValue, with selected range collapsed at (xmlComment, xmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data = "", with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.data = "", with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data = "foo", with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.data = "foo", with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data = detachedComment.data, with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.data = detachedComment.data, with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data += "", with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.data += "", with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data += "foo", with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.data += "foo", with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data += detachedComment.data, with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.data += detachedComment.data, with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent = "", with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.textContent = "", with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent = "foo", with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.textContent = "foo", with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent = detachedComment.textContent, with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.textContent = detachedComment.textContent, with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent += "", with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.textContent += "", with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent += "foo", with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.textContent += "foo", with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent += detachedComment.textContent, with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.textContent += detachedComment.textContent, with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue = "", with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.nodeValue = "", with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue = "foo", with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.nodeValue = "foo", with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue = detachedComment.nodeValue, with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.nodeValue = detachedComment.nodeValue, with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue += "", with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.nodeValue += "", with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue += "foo", with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.nodeValue += "foo", with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue += detachedComment.nodeValue, with unselected range collapsed at (detachedComment, 0)
+FAIL detachedComment.nodeValue += detachedComment.nodeValue, with selected range collapsed at (detachedComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data = "", with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.data = "", with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data = "foo", with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.data = "foo", with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.data = detachedComment.data, with unselected range on detachedComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedComment.data = detachedComment.data, with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.data += "", with unselected range on detachedComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedComment.data += "", with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data += "foo", with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.data += "foo", with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data += detachedComment.data, with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.data += detachedComment.data, with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent = "", with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.textContent = "", with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent = "foo", with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.textContent = "foo", with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.textContent = detachedComment.textContent, with unselected range on detachedComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedComment.textContent = detachedComment.textContent, with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.textContent += "", with unselected range on detachedComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedComment.textContent += "", with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent += "foo", with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.textContent += "foo", with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent += detachedComment.textContent, with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.textContent += detachedComment.textContent, with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue = "", with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.nodeValue = "", with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue = "foo", with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.nodeValue = "foo", with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.nodeValue = detachedComment.nodeValue, with unselected range on detachedComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedComment.nodeValue = detachedComment.nodeValue, with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.nodeValue += "", with unselected range on detachedComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedComment.nodeValue += "", with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue += "foo", with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.nodeValue += "foo", with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue += detachedComment.nodeValue, with unselected range on detachedComment from 0 to 1
+FAIL detachedComment.nodeValue += detachedComment.nodeValue, with selected range on detachedComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data = "", with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.data = "", with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data = "foo", with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.data = "foo", with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.data = detachedComment.data, with unselected range collapsed at (detachedComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedComment.data = detachedComment.data, with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.data += "", with unselected range collapsed at (detachedComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedComment.data += "", with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data += "foo", with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.data += "foo", with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data += detachedComment.data, with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.data += detachedComment.data, with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent = "", with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.textContent = "", with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent = "foo", with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.textContent = "foo", with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.textContent = detachedComment.textContent, with unselected range collapsed at (detachedComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedComment.textContent = detachedComment.textContent, with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.textContent += "", with unselected range collapsed at (detachedComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedComment.textContent += "", with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent += "foo", with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.textContent += "foo", with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent += detachedComment.textContent, with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.textContent += detachedComment.textContent, with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue = "", with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.nodeValue = "", with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue = "foo", with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.nodeValue = "foo", with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.nodeValue = detachedComment.nodeValue, with unselected range collapsed at (detachedComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedComment.nodeValue = detachedComment.nodeValue, with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.nodeValue += "", with unselected range collapsed at (detachedComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedComment.nodeValue += "", with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue += "foo", with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.nodeValue += "foo", with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue += detachedComment.nodeValue, with unselected range collapsed at (detachedComment, 1)
+FAIL detachedComment.nodeValue += detachedComment.nodeValue, with selected range collapsed at (detachedComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data = "", with unselected range on detachedComment from 0 to detachedComment.length
+FAIL detachedComment.data = "", with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data = "foo", with unselected range on detachedComment from 0 to detachedComment.length
+FAIL detachedComment.data = "foo", with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.data = detachedComment.data, with unselected range on detachedComment from 0 to detachedComment.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedComment.data = detachedComment.data, with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.data += "", with unselected range on detachedComment from 0 to detachedComment.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedComment.data += "", with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data += "foo", with unselected range on detachedComment from 0 to detachedComment.length
+FAIL detachedComment.data += "foo", with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data += detachedComment.data, with unselected range on detachedComment from 0 to detachedComment.length
+FAIL detachedComment.data += detachedComment.data, with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent = "", with unselected range on detachedComment from 0 to detachedComment.length
+FAIL detachedComment.textContent = "", with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent = "foo", with unselected range on detachedComment from 0 to detachedComment.length
+FAIL detachedComment.textContent = "foo", with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.textContent = detachedComment.textContent, with unselected range on detachedComment from 0 to detachedComment.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedComment.textContent = detachedComment.textContent, with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.textContent += "", with unselected range on detachedComment from 0 to detachedComment.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedComment.textContent += "", with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent += "foo", with unselected range on detachedComment from 0 to detachedComment.length
+FAIL detachedComment.textContent += "foo", with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent += detachedComment.textContent, with unselected range on detachedComment from 0 to detachedComment.length
+FAIL detachedComment.textContent += detachedComment.textContent, with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue = "", with unselected range on detachedComment from 0 to detachedComment.length
+FAIL detachedComment.nodeValue = "", with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue = "foo", with unselected range on detachedComment from 0 to detachedComment.length
+FAIL detachedComment.nodeValue = "foo", with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.nodeValue = detachedComment.nodeValue, with unselected range on detachedComment from 0 to detachedComment.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedComment.nodeValue = detachedComment.nodeValue, with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.nodeValue += "", with unselected range on detachedComment from 0 to detachedComment.length assert_equals: Wrong end offset expected 0 but got 8
+FAIL detachedComment.nodeValue += "", with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue += "foo", with unselected range on detachedComment from 0 to detachedComment.length
+FAIL detachedComment.nodeValue += "foo", with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue += detachedComment.nodeValue, with unselected range on detachedComment from 0 to detachedComment.length
+FAIL detachedComment.nodeValue += detachedComment.nodeValue, with selected range on detachedComment from 0 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data = "", with unselected range on detachedComment from 1 to detachedComment.length
+FAIL detachedComment.data = "", with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data = "foo", with unselected range on detachedComment from 1 to detachedComment.length
+FAIL detachedComment.data = "foo", with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.data = detachedComment.data, with unselected range on detachedComment from 1 to detachedComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedComment.data = detachedComment.data, with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.data += "", with unselected range on detachedComment from 1 to detachedComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedComment.data += "", with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data += "foo", with unselected range on detachedComment from 1 to detachedComment.length
+FAIL detachedComment.data += "foo", with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data += detachedComment.data, with unselected range on detachedComment from 1 to detachedComment.length
+FAIL detachedComment.data += detachedComment.data, with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent = "", with unselected range on detachedComment from 1 to detachedComment.length
+FAIL detachedComment.textContent = "", with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent = "foo", with unselected range on detachedComment from 1 to detachedComment.length
+FAIL detachedComment.textContent = "foo", with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.textContent = detachedComment.textContent, with unselected range on detachedComment from 1 to detachedComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedComment.textContent = detachedComment.textContent, with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.textContent += "", with unselected range on detachedComment from 1 to detachedComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedComment.textContent += "", with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent += "foo", with unselected range on detachedComment from 1 to detachedComment.length
+FAIL detachedComment.textContent += "foo", with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent += detachedComment.textContent, with unselected range on detachedComment from 1 to detachedComment.length
+FAIL detachedComment.textContent += detachedComment.textContent, with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue = "", with unselected range on detachedComment from 1 to detachedComment.length
+FAIL detachedComment.nodeValue = "", with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue = "foo", with unselected range on detachedComment from 1 to detachedComment.length
+FAIL detachedComment.nodeValue = "foo", with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.nodeValue = detachedComment.nodeValue, with unselected range on detachedComment from 1 to detachedComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedComment.nodeValue = detachedComment.nodeValue, with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.nodeValue += "", with unselected range on detachedComment from 1 to detachedComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedComment.nodeValue += "", with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue += "foo", with unselected range on detachedComment from 1 to detachedComment.length
+FAIL detachedComment.nodeValue += "foo", with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue += detachedComment.nodeValue, with unselected range on detachedComment from 1 to detachedComment.length
+FAIL detachedComment.nodeValue += detachedComment.nodeValue, with selected range on detachedComment from 1 to detachedComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data = "", with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.data = "", with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data = "foo", with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.data = "foo", with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.data = detachedComment.data, with unselected range collapsed at (detachedComment, detachedComment.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedComment.data = detachedComment.data, with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.data += "", with unselected range collapsed at (detachedComment, detachedComment.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedComment.data += "", with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data += "foo", with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.data += "foo", with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.data += detachedComment.data, with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.data += detachedComment.data, with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent = "", with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.textContent = "", with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent = "foo", with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.textContent = "foo", with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.textContent = detachedComment.textContent, with unselected range collapsed at (detachedComment, detachedComment.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedComment.textContent = detachedComment.textContent, with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.textContent += "", with unselected range collapsed at (detachedComment, detachedComment.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedComment.textContent += "", with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent += "foo", with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.textContent += "foo", with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.textContent += detachedComment.textContent, with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.textContent += detachedComment.textContent, with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue = "", with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.nodeValue = "", with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue = "foo", with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.nodeValue = "foo", with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.nodeValue = detachedComment.nodeValue, with unselected range collapsed at (detachedComment, detachedComment.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedComment.nodeValue = detachedComment.nodeValue, with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedComment.nodeValue += "", with unselected range collapsed at (detachedComment, detachedComment.length) assert_equals: Wrong start offset expected 0 but got 8
+FAIL detachedComment.nodeValue += "", with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue += "foo", with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.nodeValue += "foo", with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedComment.nodeValue += detachedComment.nodeValue, with unselected range collapsed at (detachedComment, detachedComment.length)
+FAIL detachedComment.nodeValue += detachedComment.nodeValue, with selected range collapsed at (detachedComment, detachedComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data = "", with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.data = "", with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data = "foo", with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.data = "foo", with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data = detachedForeignComment.data, with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.data = detachedForeignComment.data, with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data += "", with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.data += "", with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data += "foo", with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.data += "foo", with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data += detachedForeignComment.data, with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.data += detachedForeignComment.data, with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent = "", with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.textContent = "", with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent = "foo", with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.textContent = "foo", with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent = detachedForeignComment.textContent, with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.textContent = detachedForeignComment.textContent, with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent += "", with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.textContent += "", with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent += "foo", with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.textContent += "foo", with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent += detachedForeignComment.textContent, with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.textContent += detachedForeignComment.textContent, with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue = "", with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.nodeValue = "", with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue = "foo", with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.nodeValue = "foo", with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue = detachedForeignComment.nodeValue, with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.nodeValue = detachedForeignComment.nodeValue, with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue += "", with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.nodeValue += "", with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue += "foo", with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.nodeValue += "foo", with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue += detachedForeignComment.nodeValue, with unselected range collapsed at (detachedForeignComment, 0)
+FAIL detachedForeignComment.nodeValue += detachedForeignComment.nodeValue, with selected range collapsed at (detachedForeignComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data = "", with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.data = "", with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data = "foo", with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.data = "foo", with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.data = detachedForeignComment.data, with unselected range on detachedForeignComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedForeignComment.data = detachedForeignComment.data, with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.data += "", with unselected range on detachedForeignComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedForeignComment.data += "", with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data += "foo", with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.data += "foo", with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data += detachedForeignComment.data, with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.data += detachedForeignComment.data, with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent = "", with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.textContent = "", with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent = "foo", with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.textContent = "foo", with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.textContent = detachedForeignComment.textContent, with unselected range on detachedForeignComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedForeignComment.textContent = detachedForeignComment.textContent, with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.textContent += "", with unselected range on detachedForeignComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedForeignComment.textContent += "", with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent += "foo", with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.textContent += "foo", with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent += detachedForeignComment.textContent, with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.textContent += detachedForeignComment.textContent, with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue = "", with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.nodeValue = "", with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue = "foo", with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.nodeValue = "foo", with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.nodeValue = detachedForeignComment.nodeValue, with unselected range on detachedForeignComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedForeignComment.nodeValue = detachedForeignComment.nodeValue, with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.nodeValue += "", with unselected range on detachedForeignComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedForeignComment.nodeValue += "", with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue += "foo", with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.nodeValue += "foo", with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue += detachedForeignComment.nodeValue, with unselected range on detachedForeignComment from 0 to 1
+FAIL detachedForeignComment.nodeValue += detachedForeignComment.nodeValue, with selected range on detachedForeignComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data = "", with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.data = "", with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data = "foo", with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.data = "foo", with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.data = detachedForeignComment.data, with unselected range collapsed at (detachedForeignComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignComment.data = detachedForeignComment.data, with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.data += "", with unselected range collapsed at (detachedForeignComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignComment.data += "", with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data += "foo", with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.data += "foo", with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data += detachedForeignComment.data, with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.data += detachedForeignComment.data, with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent = "", with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.textContent = "", with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent = "foo", with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.textContent = "foo", with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.textContent = detachedForeignComment.textContent, with unselected range collapsed at (detachedForeignComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignComment.textContent = detachedForeignComment.textContent, with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.textContent += "", with unselected range collapsed at (detachedForeignComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignComment.textContent += "", with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent += "foo", with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.textContent += "foo", with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent += detachedForeignComment.textContent, with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.textContent += detachedForeignComment.textContent, with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue = "", with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.nodeValue = "", with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue = "foo", with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.nodeValue = "foo", with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.nodeValue = detachedForeignComment.nodeValue, with unselected range collapsed at (detachedForeignComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignComment.nodeValue = detachedForeignComment.nodeValue, with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.nodeValue += "", with unselected range collapsed at (detachedForeignComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignComment.nodeValue += "", with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue += "foo", with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.nodeValue += "foo", with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue += detachedForeignComment.nodeValue, with unselected range collapsed at (detachedForeignComment, 1)
+FAIL detachedForeignComment.nodeValue += detachedForeignComment.nodeValue, with selected range collapsed at (detachedForeignComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data = "", with unselected range on detachedForeignComment from 0 to detachedForeignComment.length
+FAIL detachedForeignComment.data = "", with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data = "foo", with unselected range on detachedForeignComment from 0 to detachedForeignComment.length
+FAIL detachedForeignComment.data = "foo", with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.data = detachedForeignComment.data, with unselected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Wrong end offset expected 0 but got 19
+FAIL detachedForeignComment.data = detachedForeignComment.data, with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.data += "", with unselected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Wrong end offset expected 0 but got 19
+FAIL detachedForeignComment.data += "", with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data += "foo", with unselected range on detachedForeignComment from 0 to detachedForeignComment.length
+FAIL detachedForeignComment.data += "foo", with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data += detachedForeignComment.data, with unselected range on detachedForeignComment from 0 to detachedForeignComment.length
+FAIL detachedForeignComment.data += detachedForeignComment.data, with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent = "", with unselected range on detachedForeignComment from 0 to detachedForeignComment.length
+FAIL detachedForeignComment.textContent = "", with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent = "foo", with unselected range on detachedForeignComment from 0 to detachedForeignComment.length
+FAIL detachedForeignComment.textContent = "foo", with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.textContent = detachedForeignComment.textContent, with unselected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Wrong end offset expected 0 but got 19
+FAIL detachedForeignComment.textContent = detachedForeignComment.textContent, with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.textContent += "", with unselected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Wrong end offset expected 0 but got 19
+FAIL detachedForeignComment.textContent += "", with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent += "foo", with unselected range on detachedForeignComment from 0 to detachedForeignComment.length
+FAIL detachedForeignComment.textContent += "foo", with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent += detachedForeignComment.textContent, with unselected range on detachedForeignComment from 0 to detachedForeignComment.length
+FAIL detachedForeignComment.textContent += detachedForeignComment.textContent, with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue = "", with unselected range on detachedForeignComment from 0 to detachedForeignComment.length
+FAIL detachedForeignComment.nodeValue = "", with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue = "foo", with unselected range on detachedForeignComment from 0 to detachedForeignComment.length
+FAIL detachedForeignComment.nodeValue = "foo", with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.nodeValue = detachedForeignComment.nodeValue, with unselected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Wrong end offset expected 0 but got 19
+FAIL detachedForeignComment.nodeValue = detachedForeignComment.nodeValue, with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.nodeValue += "", with unselected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Wrong end offset expected 0 but got 19
+FAIL detachedForeignComment.nodeValue += "", with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue += "foo", with unselected range on detachedForeignComment from 0 to detachedForeignComment.length
+FAIL detachedForeignComment.nodeValue += "foo", with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue += detachedForeignComment.nodeValue, with unselected range on detachedForeignComment from 0 to detachedForeignComment.length
+FAIL detachedForeignComment.nodeValue += detachedForeignComment.nodeValue, with selected range on detachedForeignComment from 0 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data = "", with unselected range on detachedForeignComment from 1 to detachedForeignComment.length
+FAIL detachedForeignComment.data = "", with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data = "foo", with unselected range on detachedForeignComment from 1 to detachedForeignComment.length
+FAIL detachedForeignComment.data = "foo", with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.data = detachedForeignComment.data, with unselected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignComment.data = detachedForeignComment.data, with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.data += "", with unselected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignComment.data += "", with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data += "foo", with unselected range on detachedForeignComment from 1 to detachedForeignComment.length
+FAIL detachedForeignComment.data += "foo", with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data += detachedForeignComment.data, with unselected range on detachedForeignComment from 1 to detachedForeignComment.length
+FAIL detachedForeignComment.data += detachedForeignComment.data, with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent = "", with unselected range on detachedForeignComment from 1 to detachedForeignComment.length
+FAIL detachedForeignComment.textContent = "", with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent = "foo", with unselected range on detachedForeignComment from 1 to detachedForeignComment.length
+FAIL detachedForeignComment.textContent = "foo", with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.textContent = detachedForeignComment.textContent, with unselected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignComment.textContent = detachedForeignComment.textContent, with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.textContent += "", with unselected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignComment.textContent += "", with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent += "foo", with unselected range on detachedForeignComment from 1 to detachedForeignComment.length
+FAIL detachedForeignComment.textContent += "foo", with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent += detachedForeignComment.textContent, with unselected range on detachedForeignComment from 1 to detachedForeignComment.length
+FAIL detachedForeignComment.textContent += detachedForeignComment.textContent, with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue = "", with unselected range on detachedForeignComment from 1 to detachedForeignComment.length
+FAIL detachedForeignComment.nodeValue = "", with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue = "foo", with unselected range on detachedForeignComment from 1 to detachedForeignComment.length
+FAIL detachedForeignComment.nodeValue = "foo", with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.nodeValue = detachedForeignComment.nodeValue, with unselected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignComment.nodeValue = detachedForeignComment.nodeValue, with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.nodeValue += "", with unselected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedForeignComment.nodeValue += "", with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue += "foo", with unselected range on detachedForeignComment from 1 to detachedForeignComment.length
+FAIL detachedForeignComment.nodeValue += "foo", with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue += detachedForeignComment.nodeValue, with unselected range on detachedForeignComment from 1 to detachedForeignComment.length
+FAIL detachedForeignComment.nodeValue += detachedForeignComment.nodeValue, with selected range on detachedForeignComment from 1 to detachedForeignComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data = "", with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.data = "", with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data = "foo", with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.data = "foo", with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.data = detachedForeignComment.data, with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Wrong start offset expected 0 but got 19
+FAIL detachedForeignComment.data = detachedForeignComment.data, with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.data += "", with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Wrong start offset expected 0 but got 19
+FAIL detachedForeignComment.data += "", with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data += "foo", with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.data += "foo", with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.data += detachedForeignComment.data, with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.data += detachedForeignComment.data, with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent = "", with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.textContent = "", with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent = "foo", with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.textContent = "foo", with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.textContent = detachedForeignComment.textContent, with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Wrong start offset expected 0 but got 19
+FAIL detachedForeignComment.textContent = detachedForeignComment.textContent, with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.textContent += "", with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Wrong start offset expected 0 but got 19
+FAIL detachedForeignComment.textContent += "", with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent += "foo", with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.textContent += "foo", with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.textContent += detachedForeignComment.textContent, with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.textContent += detachedForeignComment.textContent, with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue = "", with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.nodeValue = "", with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue = "foo", with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.nodeValue = "foo", with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.nodeValue = detachedForeignComment.nodeValue, with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Wrong start offset expected 0 but got 19
+FAIL detachedForeignComment.nodeValue = detachedForeignComment.nodeValue, with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedForeignComment.nodeValue += "", with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Wrong start offset expected 0 but got 19
+FAIL detachedForeignComment.nodeValue += "", with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue += "foo", with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.nodeValue += "foo", with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedForeignComment.nodeValue += detachedForeignComment.nodeValue, with unselected range collapsed at (detachedForeignComment, detachedForeignComment.length)
+FAIL detachedForeignComment.nodeValue += detachedForeignComment.nodeValue, with selected range collapsed at (detachedForeignComment, detachedForeignComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data = "", with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.data = "", with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data = "foo", with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.data = "foo", with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data = detachedXmlComment.data, with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.data = detachedXmlComment.data, with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data += "", with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.data += "", with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data += "foo", with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.data += "foo", with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data += detachedXmlComment.data, with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.data += detachedXmlComment.data, with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent = "", with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.textContent = "", with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent = "foo", with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.textContent = "foo", with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent = detachedXmlComment.textContent, with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.textContent = detachedXmlComment.textContent, with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent += "", with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.textContent += "", with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent += "foo", with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.textContent += "foo", with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent += detachedXmlComment.textContent, with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.textContent += detachedXmlComment.textContent, with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue = "", with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.nodeValue = "", with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue = "foo", with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.nodeValue = "foo", with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue = detachedXmlComment.nodeValue, with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.nodeValue = detachedXmlComment.nodeValue, with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue += "", with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.nodeValue += "", with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue += "foo", with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.nodeValue += "foo", with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue += detachedXmlComment.nodeValue, with unselected range collapsed at (detachedXmlComment, 0)
+FAIL detachedXmlComment.nodeValue += detachedXmlComment.nodeValue, with selected range collapsed at (detachedXmlComment, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data = "", with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.data = "", with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data = "foo", with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.data = "foo", with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.data = detachedXmlComment.data, with unselected range on detachedXmlComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedXmlComment.data = detachedXmlComment.data, with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.data += "", with unselected range on detachedXmlComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedXmlComment.data += "", with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data += "foo", with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.data += "foo", with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data += detachedXmlComment.data, with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.data += detachedXmlComment.data, with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent = "", with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.textContent = "", with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent = "foo", with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.textContent = "foo", with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.textContent = detachedXmlComment.textContent, with unselected range on detachedXmlComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedXmlComment.textContent = detachedXmlComment.textContent, with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.textContent += "", with unselected range on detachedXmlComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedXmlComment.textContent += "", with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent += "foo", with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.textContent += "foo", with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent += detachedXmlComment.textContent, with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.textContent += detachedXmlComment.textContent, with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue = "", with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.nodeValue = "", with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue = "foo", with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.nodeValue = "foo", with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.nodeValue = detachedXmlComment.nodeValue, with unselected range on detachedXmlComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedXmlComment.nodeValue = detachedXmlComment.nodeValue, with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.nodeValue += "", with unselected range on detachedXmlComment from 0 to 1 assert_equals: Wrong end offset expected 0 but got 1
+FAIL detachedXmlComment.nodeValue += "", with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue += "foo", with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.nodeValue += "foo", with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue += detachedXmlComment.nodeValue, with unselected range on detachedXmlComment from 0 to 1
+FAIL detachedXmlComment.nodeValue += detachedXmlComment.nodeValue, with selected range on detachedXmlComment from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data = "", with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.data = "", with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data = "foo", with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.data = "foo", with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.data = detachedXmlComment.data, with unselected range collapsed at (detachedXmlComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlComment.data = detachedXmlComment.data, with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.data += "", with unselected range collapsed at (detachedXmlComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlComment.data += "", with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data += "foo", with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.data += "foo", with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data += detachedXmlComment.data, with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.data += detachedXmlComment.data, with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent = "", with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.textContent = "", with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent = "foo", with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.textContent = "foo", with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.textContent = detachedXmlComment.textContent, with unselected range collapsed at (detachedXmlComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlComment.textContent = detachedXmlComment.textContent, with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.textContent += "", with unselected range collapsed at (detachedXmlComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlComment.textContent += "", with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent += "foo", with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.textContent += "foo", with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent += detachedXmlComment.textContent, with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.textContent += detachedXmlComment.textContent, with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue = "", with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.nodeValue = "", with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue = "foo", with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.nodeValue = "foo", with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.nodeValue = detachedXmlComment.nodeValue, with unselected range collapsed at (detachedXmlComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlComment.nodeValue = detachedXmlComment.nodeValue, with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.nodeValue += "", with unselected range collapsed at (detachedXmlComment, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlComment.nodeValue += "", with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue += "foo", with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.nodeValue += "foo", with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue += detachedXmlComment.nodeValue, with unselected range collapsed at (detachedXmlComment, 1)
+FAIL detachedXmlComment.nodeValue += detachedXmlComment.nodeValue, with selected range collapsed at (detachedXmlComment, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data = "", with unselected range on detachedXmlComment from 0 to detachedXmlComment.length
+FAIL detachedXmlComment.data = "", with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data = "foo", with unselected range on detachedXmlComment from 0 to detachedXmlComment.length
+FAIL detachedXmlComment.data = "foo", with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.data = detachedXmlComment.data, with unselected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Wrong end offset expected 0 but got 26
+FAIL detachedXmlComment.data = detachedXmlComment.data, with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.data += "", with unselected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Wrong end offset expected 0 but got 26
+FAIL detachedXmlComment.data += "", with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data += "foo", with unselected range on detachedXmlComment from 0 to detachedXmlComment.length
+FAIL detachedXmlComment.data += "foo", with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data += detachedXmlComment.data, with unselected range on detachedXmlComment from 0 to detachedXmlComment.length
+FAIL detachedXmlComment.data += detachedXmlComment.data, with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent = "", with unselected range on detachedXmlComment from 0 to detachedXmlComment.length
+FAIL detachedXmlComment.textContent = "", with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent = "foo", with unselected range on detachedXmlComment from 0 to detachedXmlComment.length
+FAIL detachedXmlComment.textContent = "foo", with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.textContent = detachedXmlComment.textContent, with unselected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Wrong end offset expected 0 but got 26
+FAIL detachedXmlComment.textContent = detachedXmlComment.textContent, with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.textContent += "", with unselected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Wrong end offset expected 0 but got 26
+FAIL detachedXmlComment.textContent += "", with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent += "foo", with unselected range on detachedXmlComment from 0 to detachedXmlComment.length
+FAIL detachedXmlComment.textContent += "foo", with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent += detachedXmlComment.textContent, with unselected range on detachedXmlComment from 0 to detachedXmlComment.length
+FAIL detachedXmlComment.textContent += detachedXmlComment.textContent, with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue = "", with unselected range on detachedXmlComment from 0 to detachedXmlComment.length
+FAIL detachedXmlComment.nodeValue = "", with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue = "foo", with unselected range on detachedXmlComment from 0 to detachedXmlComment.length
+FAIL detachedXmlComment.nodeValue = "foo", with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.nodeValue = detachedXmlComment.nodeValue, with unselected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Wrong end offset expected 0 but got 26
+FAIL detachedXmlComment.nodeValue = detachedXmlComment.nodeValue, with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.nodeValue += "", with unselected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Wrong end offset expected 0 but got 26
+FAIL detachedXmlComment.nodeValue += "", with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue += "foo", with unselected range on detachedXmlComment from 0 to detachedXmlComment.length
+FAIL detachedXmlComment.nodeValue += "foo", with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue += detachedXmlComment.nodeValue, with unselected range on detachedXmlComment from 0 to detachedXmlComment.length
+FAIL detachedXmlComment.nodeValue += detachedXmlComment.nodeValue, with selected range on detachedXmlComment from 0 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data = "", with unselected range on detachedXmlComment from 1 to detachedXmlComment.length
+FAIL detachedXmlComment.data = "", with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data = "foo", with unselected range on detachedXmlComment from 1 to detachedXmlComment.length
+FAIL detachedXmlComment.data = "foo", with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.data = detachedXmlComment.data, with unselected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlComment.data = detachedXmlComment.data, with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.data += "", with unselected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlComment.data += "", with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data += "foo", with unselected range on detachedXmlComment from 1 to detachedXmlComment.length
+FAIL detachedXmlComment.data += "foo", with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data += detachedXmlComment.data, with unselected range on detachedXmlComment from 1 to detachedXmlComment.length
+FAIL detachedXmlComment.data += detachedXmlComment.data, with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent = "", with unselected range on detachedXmlComment from 1 to detachedXmlComment.length
+FAIL detachedXmlComment.textContent = "", with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent = "foo", with unselected range on detachedXmlComment from 1 to detachedXmlComment.length
+FAIL detachedXmlComment.textContent = "foo", with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.textContent = detachedXmlComment.textContent, with unselected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlComment.textContent = detachedXmlComment.textContent, with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.textContent += "", with unselected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlComment.textContent += "", with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent += "foo", with unselected range on detachedXmlComment from 1 to detachedXmlComment.length
+FAIL detachedXmlComment.textContent += "foo", with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent += detachedXmlComment.textContent, with unselected range on detachedXmlComment from 1 to detachedXmlComment.length
+FAIL detachedXmlComment.textContent += detachedXmlComment.textContent, with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue = "", with unselected range on detachedXmlComment from 1 to detachedXmlComment.length
+FAIL detachedXmlComment.nodeValue = "", with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue = "foo", with unselected range on detachedXmlComment from 1 to detachedXmlComment.length
+FAIL detachedXmlComment.nodeValue = "foo", with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.nodeValue = detachedXmlComment.nodeValue, with unselected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlComment.nodeValue = detachedXmlComment.nodeValue, with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.nodeValue += "", with unselected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Wrong start offset expected 0 but got 1
+FAIL detachedXmlComment.nodeValue += "", with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue += "foo", with unselected range on detachedXmlComment from 1 to detachedXmlComment.length
+FAIL detachedXmlComment.nodeValue += "foo", with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue += detachedXmlComment.nodeValue, with unselected range on detachedXmlComment from 1 to detachedXmlComment.length
+FAIL detachedXmlComment.nodeValue += detachedXmlComment.nodeValue, with selected range on detachedXmlComment from 1 to detachedXmlComment.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data = "", with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.data = "", with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data = "foo", with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.data = "foo", with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.data = detachedXmlComment.data, with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Wrong start offset expected 0 but got 26
+FAIL detachedXmlComment.data = detachedXmlComment.data, with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.data += "", with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Wrong start offset expected 0 but got 26
+FAIL detachedXmlComment.data += "", with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data += "foo", with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.data += "foo", with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.data += detachedXmlComment.data, with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.data += detachedXmlComment.data, with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent = "", with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.textContent = "", with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent = "foo", with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.textContent = "foo", with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.textContent = detachedXmlComment.textContent, with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Wrong start offset expected 0 but got 26
+FAIL detachedXmlComment.textContent = detachedXmlComment.textContent, with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.textContent += "", with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Wrong start offset expected 0 but got 26
+FAIL detachedXmlComment.textContent += "", with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent += "foo", with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.textContent += "foo", with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.textContent += detachedXmlComment.textContent, with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.textContent += detachedXmlComment.textContent, with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue = "", with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.nodeValue = "", with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue = "foo", with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.nodeValue = "foo", with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.nodeValue = detachedXmlComment.nodeValue, with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Wrong start offset expected 0 but got 26
+FAIL detachedXmlComment.nodeValue = detachedXmlComment.nodeValue, with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedXmlComment.nodeValue += "", with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Wrong start offset expected 0 but got 26
+FAIL detachedXmlComment.nodeValue += "", with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue += "foo", with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.nodeValue += "foo", with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedXmlComment.nodeValue += detachedXmlComment.nodeValue, with unselected range collapsed at (detachedXmlComment, detachedXmlComment.length)
+FAIL detachedXmlComment.nodeValue += detachedXmlComment.nodeValue, with selected range collapsed at (detachedXmlComment, detachedXmlComment.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL testDiv.insertBefore(paras[0], paras[1]), with unselected range collapsed at (paras[0], 0) assert_equals: Wrong start container expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
+FAIL testDiv.insertBefore(paras[0], paras[1]), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL testDiv.insertBefore(paras[0], paras[1]), with unselected range on paras[0] from 0 to 1 assert_equals: Wrong start container expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
+FAIL testDiv.insertBefore(paras[0], paras[1]), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+FAIL testDiv.insertBefore(paras[0], paras[1]), with unselected range collapsed at (paras[0], 1) assert_equals: Wrong start container expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
+FAIL testDiv.insertBefore(paras[0], paras[1]), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS testDiv.insertBefore(paras[0], paras[1]), with unselected range on testDiv from 0 to 2
+FAIL testDiv.insertBefore(paras[0], paras[1]), with selected range on testDiv from 0 to 2 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+"
+FAIL testDiv.insertBefore(paras[0], paras[1]), with unselected range collapsed at (testDiv, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL testDiv.insertBefore(paras[0], paras[1]), with selected range collapsed at (testDiv, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL testDiv.insertBefore(paras[0], paras[1]), with unselected range on testDiv from 1 to 2 assert_equals: Wrong start offset expected 0 but got 1
+FAIL testDiv.insertBefore(paras[0], paras[1]), with selected range on testDiv from 1 to 2 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS testDiv.insertBefore(paras[0], paras[1]), with unselected range collapsed at (testDiv, 2)
+FAIL testDiv.insertBefore(paras[0], paras[1]), with selected range collapsed at (testDiv, 2) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].insertBefore(paras[1], paras[0].firstChild), with unselected range collapsed at (paras[0], 0)
+FAIL paras[0].insertBefore(paras[1], paras[0].firstChild), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].insertBefore(paras[1], paras[0].firstChild), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].insertBefore(paras[1], paras[0].firstChild), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].insertBefore(paras[1], paras[0].firstChild), with unselected range collapsed at (paras[0], 1)
+FAIL paras[0].insertBefore(paras[1], paras[0].firstChild), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].insertBefore(paras[1], paras[0].firstChild), with unselected range on testDiv from 0 to 1
+FAIL paras[0].insertBefore(paras[1], paras[0].firstChild), with selected range on testDiv from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+"
+PASS paras[0].insertBefore(paras[1], paras[0].firstChild), with unselected range on testDiv from 0 to 2
+FAIL paras[0].insertBefore(paras[1], paras[0].firstChild), with selected range on testDiv from 0 to 2 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+"
+PASS paras[0].insertBefore(paras[1], paras[0].firstChild), with unselected range collapsed at (testDiv, 1)
+FAIL paras[0].insertBefore(paras[1], paras[0].firstChild), with selected range collapsed at (testDiv, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].insertBefore(paras[1], paras[0].firstChild), with unselected range on testDiv from 1 to 2
+FAIL paras[0].insertBefore(paras[1], paras[0].firstChild), with selected range on testDiv from 1 to 2 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS paras[0].insertBefore(paras[1], null), with unselected range collapsed at (paras[0], 0)
+FAIL paras[0].insertBefore(paras[1], null), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].insertBefore(paras[1], null), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].insertBefore(paras[1], null), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].insertBefore(paras[1], null), with unselected range collapsed at (paras[0], 1)
+FAIL paras[0].insertBefore(paras[1], null), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].insertBefore(paras[1], null), with unselected range on testDiv from 0 to 1
+FAIL paras[0].insertBefore(paras[1], null), with selected range on testDiv from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+"
+PASS paras[0].insertBefore(paras[1], null), with unselected range on testDiv from 0 to 2
+FAIL paras[0].insertBefore(paras[1], null), with selected range on testDiv from 0 to 2 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+"
+PASS paras[0].insertBefore(paras[1], null), with unselected range collapsed at (testDiv, 1)
+FAIL paras[0].insertBefore(paras[1], null), with selected range collapsed at (testDiv, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].insertBefore(paras[1], null), with unselected range on testDiv from 1 to 2
+FAIL paras[0].insertBefore(paras[1], null), with selected range on testDiv from 1 to 2 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS foreignDoc.insertBefore(detachedComment, foreignDoc.documentElement), with unselected range collapsed at (foreignDoc, 0)
+FAIL foreignDoc.insertBefore(detachedComment, foreignDoc.documentElement), with selected range collapsed at (foreignDoc, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.insertBefore(detachedComment, foreignDoc.documentElement), with unselected range on foreignDoc from 0 to 1
+FAIL foreignDoc.insertBefore(detachedComment, foreignDoc.documentElement), with selected range on foreignDoc from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.insertBefore(detachedComment, foreignDoc.documentElement), with unselected range on foreignDoc from 0 to 2
+FAIL foreignDoc.insertBefore(detachedComment, foreignDoc.documentElement), with selected range on foreignDoc from 0 to 2 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.insertBefore(detachedComment, foreignDoc.documentElement), with unselected range collapsed at (foreignDoc, 1)
+FAIL foreignDoc.insertBefore(detachedComment, foreignDoc.documentElement), with selected range collapsed at (foreignDoc, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.insertBefore(detachedComment, foreignDoc.doctype), with unselected range collapsed at (foreignDoc, 0)
+FAIL foreignDoc.insertBefore(detachedComment, foreignDoc.doctype), with selected range collapsed at (foreignDoc, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.insertBefore(detachedComment, foreignDoc.doctype), with unselected range on foreignDoc from 0 to 1
+FAIL foreignDoc.insertBefore(detachedComment, foreignDoc.doctype), with selected range on foreignDoc from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.insertBefore(detachedComment, foreignDoc.doctype), with unselected range on foreignDoc from 0 to 2
+FAIL foreignDoc.insertBefore(detachedComment, foreignDoc.doctype), with selected range on foreignDoc from 0 to 2 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.insertBefore(detachedComment, foreignDoc.doctype), with unselected range collapsed at (foreignDoc, 1)
+FAIL foreignDoc.insertBefore(detachedComment, foreignDoc.doctype), with selected range collapsed at (foreignDoc, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.insertBefore(detachedComment, null), with unselected range on foreignDoc from 0 to 1
+FAIL foreignDoc.insertBefore(detachedComment, null), with selected range on foreignDoc from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS paras[0].insertBefore(xmlTextNode, paras[0].firstChild), with unselected range collapsed at (paras[0], 0)
+FAIL paras[0].insertBefore(xmlTextNode, paras[0].firstChild), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].insertBefore(xmlTextNode, paras[0].firstChild), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].insertBefore(xmlTextNode, paras[0].firstChild), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].insertBefore(xmlTextNode, paras[0].firstChild), with unselected range collapsed at (paras[0], 1)
+FAIL paras[0].insertBefore(xmlTextNode, paras[0].firstChild), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].insertBefore(paras[0], paras[0].firstChild), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].insertBefore(paras[0], paras[0].firstChild), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].insertBefore(testDiv, paras[0].firstChild), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].insertBefore(testDiv, paras[0].firstChild), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].insertBefore(document, paras[0].firstChild), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].insertBefore(document, paras[0].firstChild), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].insertBefore(foreignDoc, paras[0].firstChild), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].insertBefore(foreignDoc, paras[0].firstChild), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].insertBefore(document.doctype, paras[0].firstChild), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].insertBefore(document.doctype, paras[0].firstChild), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+FAIL testDiv.replaceChild(paras[0], paras[0]), with unselected range collapsed at (paras[0], 0) assert_equals: Wrong start container expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
+FAIL testDiv.replaceChild(paras[0], paras[0]), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL testDiv.replaceChild(paras[0], paras[0]), with unselected range on paras[0] from 0 to 1 assert_equals: Wrong start container expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
+FAIL testDiv.replaceChild(paras[0], paras[0]), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+FAIL testDiv.replaceChild(paras[0], paras[0]), with unselected range collapsed at (paras[0], 1) assert_equals: Wrong start container expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Element node <p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p>
+FAIL testDiv.replaceChild(paras[0], paras[0]), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS testDiv.replaceChild(paras[0], paras[0]), with unselected range on testDiv from 0 to 2
+FAIL testDiv.replaceChild(paras[0], paras[0]), with selected range on testDiv from 0 to 2 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+"
+FAIL testDiv.replaceChild(paras[0], paras[0]), with unselected range collapsed at (testDiv, 1) assert_equals: Wrong start offset expected 0 but got 1
+FAIL testDiv.replaceChild(paras[0], paras[0]), with selected range collapsed at (testDiv, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL testDiv.replaceChild(paras[0], paras[0]), with unselected range on testDiv from 1 to 2 assert_equals: Wrong start offset expected 0 but got 1
+FAIL testDiv.replaceChild(paras[0], paras[0]), with selected range on testDiv from 1 to 2 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS testDiv.replaceChild(paras[0], paras[0]), with unselected range collapsed at (testDiv, 2)
+FAIL testDiv.replaceChild(paras[0], paras[0]), with selected range collapsed at (testDiv, 2) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].replaceChild(paras[1], paras[0].firstChild), with unselected range collapsed at (paras[0], 0)
+FAIL paras[0].replaceChild(paras[1], paras[0].firstChild), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].replaceChild(paras[1], paras[0].firstChild), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].replaceChild(paras[1], paras[0].firstChild), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].replaceChild(paras[1], paras[0].firstChild), with unselected range collapsed at (paras[0], 1)
+FAIL paras[0].replaceChild(paras[1], paras[0].firstChild), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].replaceChild(paras[1], paras[0].firstChild), with unselected range on testDiv from 0 to 1
+FAIL paras[0].replaceChild(paras[1], paras[0].firstChild), with selected range on testDiv from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+"
+PASS paras[0].replaceChild(paras[1], paras[0].firstChild), with unselected range on testDiv from 0 to 2
+FAIL paras[0].replaceChild(paras[1], paras[0].firstChild), with selected range on testDiv from 0 to 2 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+"
+PASS paras[0].replaceChild(paras[1], paras[0].firstChild), with unselected range collapsed at (testDiv, 1)
+FAIL paras[0].replaceChild(paras[1], paras[0].firstChild), with selected range collapsed at (testDiv, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].replaceChild(paras[1], paras[0].firstChild), with unselected range on testDiv from 1 to 2
+FAIL paras[0].replaceChild(paras[1], paras[0].firstChild), with selected range on testDiv from 1 to 2 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS foreignDoc.replaceChild(detachedComment, foreignDoc.documentElement), with unselected range collapsed at (foreignDoc, 0)
+FAIL foreignDoc.replaceChild(detachedComment, foreignDoc.documentElement), with selected range collapsed at (foreignDoc, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.replaceChild(detachedComment, foreignDoc.documentElement), with unselected range on foreignDoc from 0 to 1
+FAIL foreignDoc.replaceChild(detachedComment, foreignDoc.documentElement), with selected range on foreignDoc from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.replaceChild(detachedComment, foreignDoc.documentElement), with unselected range on foreignDoc from 0 to 2
+FAIL foreignDoc.replaceChild(detachedComment, foreignDoc.documentElement), with selected range on foreignDoc from 0 to 2 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.replaceChild(detachedComment, foreignDoc.documentElement), with unselected range collapsed at (foreignDoc, 1)
+FAIL foreignDoc.replaceChild(detachedComment, foreignDoc.documentElement), with selected range collapsed at (foreignDoc, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.replaceChild(detachedComment, foreignDoc.doctype), with unselected range collapsed at (foreignDoc, 0)
+FAIL foreignDoc.replaceChild(detachedComment, foreignDoc.doctype), with selected range collapsed at (foreignDoc, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.replaceChild(detachedComment, foreignDoc.doctype), with unselected range on foreignDoc from 0 to 1
+FAIL foreignDoc.replaceChild(detachedComment, foreignDoc.doctype), with selected range on foreignDoc from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.replaceChild(detachedComment, foreignDoc.doctype), with unselected range on foreignDoc from 0 to 2
+FAIL foreignDoc.replaceChild(detachedComment, foreignDoc.doctype), with selected range on foreignDoc from 0 to 2 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.replaceChild(detachedComment, foreignDoc.doctype), with unselected range collapsed at (foreignDoc, 1)
+FAIL foreignDoc.replaceChild(detachedComment, foreignDoc.doctype), with selected range collapsed at (foreignDoc, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS paras[0].replaceChild(xmlTextNode, paras[0].firstChild), with unselected range collapsed at (paras[0], 0)
+FAIL paras[0].replaceChild(xmlTextNode, paras[0].firstChild), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].replaceChild(xmlTextNode, paras[0].firstChild), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].replaceChild(xmlTextNode, paras[0].firstChild), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].replaceChild(xmlTextNode, paras[0].firstChild), with unselected range collapsed at (paras[0], 1)
+FAIL paras[0].replaceChild(xmlTextNode, paras[0].firstChild), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].replaceChild(paras[0], paras[0].firstChild), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].replaceChild(paras[0], paras[0].firstChild), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].replaceChild(testDiv, paras[0].firstChild), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].replaceChild(testDiv, paras[0].firstChild), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].replaceChild(document, paras[0].firstChild), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].replaceChild(document, paras[0].firstChild), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].replaceChild(foreignDoc, paras[0].firstChild), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].replaceChild(foreignDoc, paras[0].firstChild), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].replaceChild(document.doctype, paras[0].firstChild), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].replaceChild(document.doctype, paras[0].firstChild), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+FAIL testDiv.appendChild(testDiv.lastChild), with unselected range collapsed at (testDiv.lastChild, 0) assert_equals: Wrong start container expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Comment node <!--Alphabet soup?-->
+FAIL testDiv.appendChild(testDiv.lastChild), with selected range collapsed at (testDiv.lastChild, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL testDiv.appendChild(testDiv.lastChild), with unselected range on testDiv.lastChild from 0 to 1 assert_equals: Wrong start container expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Comment node <!--Alphabet soup?-->
+FAIL testDiv.appendChild(testDiv.lastChild), with selected range on testDiv.lastChild from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL testDiv.appendChild(testDiv.lastChild), with unselected range collapsed at (testDiv.lastChild, 1) assert_equals: Wrong start container expected Element node <div id="test"><p id="a">Äb̈c̈d̈ëf̈g̈ḧ
+</p><p id="b" s... but got Comment node <!--Alphabet soup?-->
+FAIL testDiv.appendChild(testDiv.lastChild), with selected range collapsed at (testDiv.lastChild, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL testDiv.appendChild(testDiv.lastChild), with unselected range on testDiv from testDiv.childNodes.length - 2 to testDiv.childNodes.length assert_equals: Wrong end offset expected 5 but got 6
+FAIL testDiv.appendChild(testDiv.lastChild), with selected range on testDiv from testDiv.childNodes.length - 2 to testDiv.childNodes.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ghijklmn" but got object ""
+PASS testDiv.appendChild(testDiv.lastChild), with unselected range on testDiv from testDiv.childNodes.length - 2 to testDiv.childNodes.length - 1
+FAIL testDiv.appendChild(testDiv.lastChild), with selected range on testDiv from testDiv.childNodes.length - 2 to testDiv.childNodes.length - 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ghijklmn" but got object ""
+FAIL testDiv.appendChild(testDiv.lastChild), with unselected range on testDiv from testDiv.childNodes.length - 1 to testDiv.childNodes.length assert_equals: Wrong end offset expected 5 but got 6
+FAIL testDiv.appendChild(testDiv.lastChild), with selected range on testDiv from testDiv.childNodes.length - 1 to testDiv.childNodes.length assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS testDiv.appendChild(testDiv.lastChild), with unselected range collapsed at (testDiv, testDiv.childNodes.length - 1)
+FAIL testDiv.appendChild(testDiv.lastChild), with selected range collapsed at (testDiv, testDiv.childNodes.length - 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL testDiv.appendChild(testDiv.lastChild), with unselected range collapsed at (testDiv, testDiv.childNodes.length) assert_equals: Wrong start offset expected 5 but got 6
+FAIL testDiv.appendChild(testDiv.lastChild), with selected range collapsed at (testDiv, testDiv.childNodes.length) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+FAIL detachedDiv.appendChild(detachedDiv.lastChild), with unselected range collapsed at (detachedDiv.lastChild, 0) assert_equals: Wrong start container expected Element node <div><p>Opqrstuv</p><p>Wxyzabcd</p></div> but got Element node <p>Wxyzabcd</p>
+FAIL detachedDiv.appendChild(detachedDiv.lastChild), with selected range collapsed at (detachedDiv.lastChild, 0) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedDiv.appendChild(detachedDiv.lastChild), with unselected range on detachedDiv.lastChild from 0 to 1 assert_equals: Wrong start container expected Element node <div><p>Opqrstuv</p><p>Wxyzabcd</p></div> but got Element node <p>Wxyzabcd</p>
+FAIL detachedDiv.appendChild(detachedDiv.lastChild), with selected range on detachedDiv.lastChild from 0 to 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedDiv.appendChild(detachedDiv.lastChild), with unselected range collapsed at (detachedDiv.lastChild, 1) assert_equals: Wrong start container expected Element node <div><p>Opqrstuv</p><p>Wxyzabcd</p></div> but got Element node <p>Wxyzabcd</p>
+FAIL detachedDiv.appendChild(detachedDiv.lastChild), with selected range collapsed at (detachedDiv.lastChild, 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedDiv.appendChild(detachedDiv.lastChild), with unselected range on detachedDiv from detachedDiv.childNodes.length - 2 to detachedDiv.childNodes.length assert_equals: Wrong end offset expected 1 but got 2
+FAIL detachedDiv.appendChild(detachedDiv.lastChild), with selected range on detachedDiv from detachedDiv.childNodes.length - 2 to detachedDiv.childNodes.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedDiv.appendChild(detachedDiv.lastChild), with unselected range on detachedDiv from detachedDiv.childNodes.length - 2 to detachedDiv.childNodes.length - 1
+FAIL detachedDiv.appendChild(detachedDiv.lastChild), with selected range on detachedDiv from detachedDiv.childNodes.length - 2 to detachedDiv.childNodes.length - 1 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedDiv.appendChild(detachedDiv.lastChild), with unselected range on detachedDiv from detachedDiv.childNodes.length - 1 to detachedDiv.childNodes.length assert_equals: Wrong end offset expected 1 but got 2
+FAIL detachedDiv.appendChild(detachedDiv.lastChild), with selected range on detachedDiv from detachedDiv.childNodes.length - 1 to detachedDiv.childNodes.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS detachedDiv.appendChild(detachedDiv.lastChild), with unselected range collapsed at (detachedDiv, detachedDiv.childNodes.length - 1)
+FAIL detachedDiv.appendChild(detachedDiv.lastChild), with selected range collapsed at (detachedDiv, detachedDiv.childNodes.length - 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+FAIL detachedDiv.appendChild(detachedDiv.lastChild), with unselected range collapsed at (detachedDiv, detachedDiv.childNodes.length) assert_equals: Wrong start offset expected 1 but got 2
+FAIL detachedDiv.appendChild(detachedDiv.lastChild), with selected range collapsed at (detachedDiv, detachedDiv.childNodes.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS paras[0].appendChild(paras[1]), with unselected range collapsed at (paras[0], 0)
+FAIL paras[0].appendChild(paras[1]), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].appendChild(paras[1]), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].appendChild(paras[1]), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].appendChild(paras[1]), with unselected range collapsed at (paras[0], 1)
+FAIL paras[0].appendChild(paras[1]), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].appendChild(paras[1]), with unselected range on testDiv from 0 to 1
+FAIL paras[0].appendChild(paras[1]), with selected range on testDiv from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+"
+PASS paras[0].appendChild(paras[1]), with unselected range on testDiv from 0 to 2
+FAIL paras[0].appendChild(paras[1]), with selected range on testDiv from 0 to 2 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+"
+PASS paras[0].appendChild(paras[1]), with unselected range collapsed at (testDiv, 1)
+FAIL paras[0].appendChild(paras[1]), with selected range collapsed at (testDiv, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].appendChild(paras[1]), with unselected range on testDiv from 1 to 2
+FAIL paras[0].appendChild(paras[1]), with selected range on testDiv from 1 to 2 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS foreignDoc.appendChild(detachedComment), with unselected range on foreignDoc from foreignDoc.childNodes.length - 1 to foreignDoc.childNodes.length
+FAIL foreignDoc.appendChild(detachedComment), with selected range on foreignDoc from foreignDoc.childNodes.length - 1 to foreignDoc.childNodes.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.appendChild(detachedComment), with unselected range collapsed at (foreignDoc, foreignDoc.childNodes.length - 1)
+FAIL foreignDoc.appendChild(detachedComment), with selected range collapsed at (foreignDoc, foreignDoc.childNodes.length - 1) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.appendChild(detachedComment), with unselected range collapsed at (foreignDoc, foreignDoc.childNodes.length)
+FAIL foreignDoc.appendChild(detachedComment), with selected range collapsed at (foreignDoc, foreignDoc.childNodes.length) assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS foreignDoc.appendChild(detachedComment), with unselected range on detachedComment from 0 to 5
+FAIL foreignDoc.appendChild(detachedComment), with selected range on detachedComment from 0 to 5 assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+PASS paras[0].appendChild(xmlTextNode), with unselected range collapsed at (paras[0], 0)
+FAIL paras[0].appendChild(xmlTextNode), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].appendChild(xmlTextNode), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].appendChild(xmlTextNode), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].appendChild(xmlTextNode), with unselected range collapsed at (paras[0], 1)
+FAIL paras[0].appendChild(xmlTextNode), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].appendChild(paras[0]), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].appendChild(paras[0]), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].appendChild(testDiv), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].appendChild(testDiv), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].appendChild(document), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].appendChild(document), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].appendChild(foreignDoc), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].appendChild(foreignDoc), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].appendChild(document.doctype), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].appendChild(document.doctype), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].parentNode.removeChild(paras[0]), with unselected range collapsed at (paras[0], 0)
+FAIL paras[0].parentNode.removeChild(paras[0]), with selected range collapsed at (paras[0], 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].parentNode.removeChild(paras[0]), with unselected range on paras[0] from 0 to 1
+FAIL paras[0].parentNode.removeChild(paras[0]), with selected range on paras[0] from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ"
+PASS paras[0].parentNode.removeChild(paras[0]), with unselected range collapsed at (paras[0], 1)
+FAIL paras[0].parentNode.removeChild(paras[0]), with selected range collapsed at (paras[0], 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].parentNode.removeChild(paras[0]), with unselected range collapsed at (testDiv, 0)
+FAIL paras[0].parentNode.removeChild(paras[0]), with selected range collapsed at (testDiv, 0) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].parentNode.removeChild(paras[0]), with unselected range on testDiv from 0 to 1
+FAIL paras[0].parentNode.removeChild(paras[0]), with selected range on testDiv from 0 to 1 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+"
+PASS paras[0].parentNode.removeChild(paras[0]), with unselected range collapsed at (testDiv, 1)
+FAIL paras[0].parentNode.removeChild(paras[0]), with selected range collapsed at (testDiv, 1) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS paras[0].parentNode.removeChild(paras[0]), with unselected range on testDiv from 0 to 2
+FAIL paras[0].parentNode.removeChild(paras[0]), with selected range on testDiv from 0 to 2 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+" but got object "Äb̈c̈d̈ëf̈g̈ḧ
+Ijklmnop
+"
+PASS paras[0].parentNode.removeChild(paras[0]), with unselected range on testDiv from 1 to 2
+FAIL paras[0].parentNode.removeChild(paras[0]), with selected range on testDiv from 1 to 2 assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "Ijklmnop
+" but got object ""
+PASS paras[0].parentNode.removeChild(paras[0]), with unselected range collapsed at (testDiv, 2)
+FAIL paras[0].parentNode.removeChild(paras[0]), with selected range collapsed at (testDiv, 2) assert_equals: Sanity check: selection's range must initially be the same as the range we added expected object "" but got object ""
+PASS foreignDoc.documentElement.parentNode.removeChild(foreignDoc.documentElement), with unselected range on foreignDoc from 0 to foreignDoc.childNodes.length
+FAIL foreignDoc.documentElement.parentNode.removeChild(foreignDoc.documentElement), with selected range on foreignDoc from 0 to foreignDoc.childNodes.length assert_equals: Sanity check: selection must have exactly one range after adding the range expected 1 but got 0
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangemutationshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-mutations.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-mutations.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-mutations.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,959 @@
</span><ins>+<!doctype html>
+<title>Range mutation tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+// These tests probably use too much abstraction and too little copy-paste.
+// Reader beware.
+//
+// TODO:
+//
+// * replaceWholeText() tests
+// * Lots and lots and lots more different types of ranges
+// * insertBefore() with DocumentFragments
+// * Fill out other insert/remove tests
+// * normalize() (https://www.w3.org/Bugs/Public/show_bug.cgi?id=13843)
+
+// Give a textual description of the range we're testing, for the test names.
+function describeRange(startContainer, startOffset, endContainer, endOffset) {
+ if (startContainer == endContainer && startOffset == endOffset) {
+ return "range collapsed at (" + startContainer + ", " + startOffset + ")";
+ } else if (startContainer == endContainer) {
+ return "range on " + startContainer + " from " + startOffset + " to " + endOffset;
+ } else {
+ return "range from (" + startContainer + ", " + startOffset + ") to (" + endContainer + ", " + endOffset + ")";
+ }
+}
+
+// Lists of the various types of nodes we'll want to use. We use strings that
+// we can later eval(), so that we can produce legible test names.
+var textNodes = [
+ "paras[0].firstChild",
+ "paras[1].firstChild",
+ "foreignTextNode",
+ "xmlTextNode",
+ "detachedTextNode",
+ "detachedForeignTextNode",
+ "detachedXmlTextNode",
+];
+var commentNodes = [
+ "comment",
+ "foreignComment",
+ "xmlComment",
+ "detachedComment",
+ "detachedForeignComment",
+ "detachedXmlComment",
+];
+var characterDataNodes = textNodes.concat(commentNodes);
+
+// This function is slightly scary, but it works well enough, so . . .
+// sourceTests is an array of test data that will be altered in mysterious ways
+// before being passed off to doTest, descFn is something that takes an element
+// of sourceTests and produces the first part of a human-readable description
+// of the test, testFn is the function that doTest will call to do the actual
+// work and tell it what results to expect.
+function doTests(sourceTests, descFn, testFn) {
+ var tests = [];
+ for (var i = 0; i < sourceTests.length; i++) {
+ var params = sourceTests[i];
+ var len = params.length;
+ tests.push([
+ descFn(params) + ", with unselected " + describeRange(params[len - 4], params[len - 3], params[len - 2], params[len - 1]),
+ // The closure here ensures that the params that testFn get are the
+ // current version of params, not the version from the last
+ // iteration of this loop. We test that none of the parameters
+ // evaluate to undefined to catch bugs in our eval'ing, like
+ // mistyping a property name.
+ function(params) { return function() {
+ var evaledParams = params.map(eval);
+ for (var i = 0; i < evaledParams.length; i++) {
+ assert_true(typeof evaledParams[i] != "undefined",
+ "Test bug: " + params[i] + " is undefined");
+ }
+ return testFn.apply(null, evaledParams);
+ } }(params),
+ false,
+ params[len - 4],
+ params[len - 3],
+ params[len - 2],
+ params[len - 1]
+ ]);
+ tests.push([
+ descFn(params) + ", with selected " + describeRange(params[len - 4], params[len - 3], params[len - 2], params[len - 1]),
+ function(params) { return function() {
+ var evaledParams = params.map(eval);
+ for (var i = 0; i < evaledParams.length; i++) {
+ assert_true(typeof evaledParams[i] != "undefined",
+ "Test bug: " + params[i] + " is undefined");
+ }
+ return testFn.apply(null, evaledParams);
+ } }(params),
+ true,
+ params[len - 4],
+ params[len - 3],
+ params[len - 2],
+ params[len - 1]
+ ]);
+ }
+ generate_tests(doTest, tests);
+}
+
+// Set up the range, call the callback function to do the DOM modification and
+// tell us what to expect. The callback function needs to return a
+// four-element array with the expected start/end containers/offsets, and
+// receives no arguments. useSelection tells us whether the Range should be
+// added to a Selection and the Selection tested to ensure that the mutation
+// affects user selections as well as other ranges; every test is run with this
+// both false and true, because when it's set to true WebKit and Opera fail all
+// tests' sanity checks, which is unhelpful. The last four parameters just
+// tell us what range to build.
+function doTest(callback, useSelection, startContainer, startOffset, endContainer, endOffset) {
+ // Recreate all the test nodes in case they were altered by the last test
+ // run.
+ setupRangeTests();
+ startContainer = eval(startContainer);
+ startOffset = eval(startOffset);
+ endContainer = eval(endContainer);
+ endOffset = eval(endOffset);
+
+ var ownerDoc = startContainer.nodeType == Node.DOCUMENT_NODE
+ ? startContainer
+ : startContainer.ownerDocument;
+ var range = ownerDoc.createRange();
+ range.setStart(startContainer, startOffset);
+ range.setEnd(endContainer, endOffset);
+
+ if (useSelection) {
+ getSelection().removeAllRanges();
+ getSelection().addRange(range);
+
+ assert_equals(getSelection().rangeCount, 1,
+ "Sanity check: selection must have exactly one range after adding the range");
+ assert_equals(getSelection().getRangeAt(0), range,
+ "Sanity check: selection's range must initially be the same as the range we added");
+ assert_equals(range.startContainer, startContainer,
+ "Sanity check: range's startContainer must initially be the one we set");
+ assert_equals(range.endContainer, endContainer,
+ "Sanity check: range's endContainer must initially be the one we set");
+ assert_equals(range.startOffset, startOffset,
+ "Sanity check: range's startOffset must initially be the one we set");
+ assert_equals(range.endOffset, endOffset,
+ "Sanity check: range's endOffset must initially be the one we set");
+ }
+
+ var expected = callback();
+
+ if (useSelection) {
+ assert_equals(getSelection().getRangeAt(0), range,
+ "The range we added must not be removed from the selection");
+ }
+ assert_equals(range.startContainer, expected[0],
+ "Wrong start container");
+ assert_equals(range.startOffset, expected[1],
+ "Wrong start offset");
+ assert_equals(range.endContainer, expected[2],
+ "Wrong end container");
+ assert_equals(range.endOffset, expected[3],
+ "Wrong end offset");
+}
+
+
+// Now we get to the specific tests.
+
+function testSplitText(oldNode, offset, startContainer, startOffset, endContainer, endOffset) {
+ // Save these for later
+ var originalStartOffset = startOffset;
+ var originalEndOffset = endOffset;
+ var originalLength = oldNode.length;
+
+ var newNode;
+ try {
+ newNode = oldNode.splitText(offset);
+ } catch (e) {
+ // Should only happen if offset is negative
+ return [startContainer, startOffset, endContainer, endOffset];
+ }
+
+ // First we adjust for replacing data:
+ //
+ // "Replace data with offset offset, count count, and data the empty
+ // string."
+ //
+ // That translates to offset = offset, count = originalLength - offset,
+ // data = "". node is oldNode.
+ //
+ // "For every boundary point whose node is node, and whose offset is
+ // greater than offset but less than or equal to offset plus count, set its
+ // offset to offset."
+ if (startContainer == oldNode
+ && startOffset > offset
+ && startOffset <= originalLength) {
+ startOffset = offset;
+ }
+
+ if (endContainer == oldNode
+ && endOffset > offset
+ && endOffset <= originalLength) {
+ endOffset = offset;
+ }
+
+ // "For every boundary point whose node is node, and whose offset is
+ // greater than offset plus count, add the length of data to its offset,
+ // then subtract count from it."
+ //
+ // Can't happen: offset plus count is originalLength.
+
+ // Now we insert a node, if oldNode's parent isn't null: "For each boundary
+ // point whose node is the new parent of the affected node and whose offset
+ // is greater than the new index of the affected node, add one to the
+ // boundary point's offset."
+ if (startContainer == oldNode.parentNode
+ && startOffset > 1 + indexOf(oldNode)) {
+ startOffset++;
+ }
+
+ if (endContainer == oldNode.parentNode
+ && endOffset > 1 + indexOf(oldNode)) {
+ endOffset++;
+ }
+
+ // Finally, the splitText stuff itself:
+ //
+ // "If parent is not null, run these substeps:
+ //
+ // * "For each range whose start node is node and start offset is greater
+ // than offset, set its start node to new node and decrease its start
+ // offset by offset.
+ //
+ // * "For each range whose end node is node and end offset is greater
+ // than offset, set its end node to new node and decrease its end offset
+ // by offset.
+ //
+ // * "For each range whose start node is parent and start offset is equal
+ // to the index of node + 1, increase its start offset by one.
+ //
+ // * "For each range whose end node is parent and end offset is equal to
+ // the index of node + 1, increase its end offset by one."
+ if (oldNode.parentNode) {
+ if (startContainer == oldNode && originalStartOffset > offset) {
+ startContainer = newNode;
+ startOffset = originalStartOffset - offset;
+ }
+
+ if (endContainer == oldNode && originalEndOffset > offset) {
+ endContainer = newNode;
+ endOffset = originalEndOffset - offset;
+ }
+
+ if (startContainer == oldNode.parentNode
+ && startOffset == 1 + indexOf(oldNode)) {
+ startOffset++;
+ }
+
+ if (endContainer == oldNode.parentNode
+ && endOffset == 1 + indexOf(oldNode)) {
+ endOffset++;
+ }
+ }
+
+ return [startContainer, startOffset, endContainer, endOffset];
+}
+
+// The offset argument is unsigned, so per WebIDL -1 should wrap to 4294967295,
+// which is probably longer than the length, so it should throw an exception.
+// This is no different from the other cases where the offset is longer than
+// the length, and the wrapping complicates my testing slightly, so I won't
+// bother testing negative values here or in other cases.
+var splitTextTests = [];
+for (var i = 0; i < textNodes.length; i++) {
+ var node = textNodes[i];
+ splitTextTests.push([node, 376, node, 0, node, 1]);
+ splitTextTests.push([node, 0, node, 0, node, 0]);
+ splitTextTests.push([node, 1, node, 1, node, 1]);
+ splitTextTests.push([node, node + ".length", node, node + ".length", node, node + ".length"]);
+ splitTextTests.push([node, 1, node, 1, node, 3]);
+ splitTextTests.push([node, 2, node, 1, node, 3]);
+ splitTextTests.push([node, 3, node, 1, node, 3]);
+}
+
+splitTextTests.push(
+ ["paras[0].firstChild", 1, "paras[0]", 0, "paras[0]", 0],
+ ["paras[0].firstChild", 1, "paras[0]", 0, "paras[0]", 1],
+ ["paras[0].firstChild", 1, "paras[0]", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 1, "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 2, "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 3, "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 1, "paras[0]", 0, "paras[0].firstChild", 3],
+ ["paras[0].firstChild", 2, "paras[0]", 0, "paras[0].firstChild", 3],
+ ["paras[0].firstChild", 3, "paras[0]", 0, "paras[0].firstChild", 3]
+);
+
+
+function testReplaceDataAlgorithm(node, offset, count, data, callback, startContainer, startOffset, endContainer, endOffset) {
+ // Mutation works the same any time DOM Core's "replace data" algorithm is
+ // invoked. node, offset, count, data are as in that algorithm. The
+ // callback is what does the actual setting. Not to be confused with
+ // testReplaceData, which tests the replaceData() method.
+
+ // Barring any provision to the contrary, the containers and offsets must
+ // not change.
+ var expectedStartContainer = startContainer;
+ var expectedStartOffset = startOffset;
+ var expectedEndContainer = endContainer;
+ var expectedEndOffset = endOffset;
+
+ var originalParent = node.parentNode;
+ var originalData = node.data;
+
+ var exceptionThrown = false;
+ try {
+ callback();
+ } catch (e) {
+ // Should only happen if offset is greater than length
+ exceptionThrown = true;
+ }
+
+ assert_equals(node.parentNode, originalParent,
+ "Sanity check failed: changing data changed the parent");
+
+ // "User agents must run the following steps whenever they replace data of
+ // a CharacterData node, as though they were written in the specification
+ // for that algorithm after all other steps. In particular, the steps must
+ // not be executed if the algorithm threw an exception."
+ if (exceptionThrown) {
+ assert_equals(node.data, originalData,
+ "Sanity check failed: exception thrown but data changed");
+ } else {
+ assert_equals(node.data,
+ originalData.substr(0, offset) + data + originalData.substr(offset + count),
+ "Sanity check failed: data not changed as expected");
+ }
+
+ // "For every boundary point whose node is node, and whose offset is
+ // greater than offset but less than or equal to offset plus count, set
+ // its offset to offset."
+ if (!exceptionThrown
+ && startContainer == node
+ && startOffset > offset
+ && startOffset <= offset + count) {
+ expectedStartOffset = offset;
+ }
+
+ if (!exceptionThrown
+ && endContainer == node
+ && endOffset > offset
+ && endOffset <= offset + count) {
+ expectedEndOffset = offset;
+ }
+
+ // "For every boundary point whose node is node, and whose offset is
+ // greater than offset plus count, add the length of data to its offset,
+ // then subtract count from it."
+ if (!exceptionThrown
+ && startContainer == node
+ && startOffset > offset + count) {
+ expectedStartOffset += data.length - count;
+ }
+
+ if (!exceptionThrown
+ && endContainer == node
+ && endOffset > offset + count) {
+ expectedEndOffset += data.length - count;
+ }
+
+ return [expectedStartContainer, expectedStartOffset, expectedEndContainer, expectedEndOffset];
+}
+
+function testInsertData(node, offset, data, startContainer, startOffset, endContainer, endOffset) {
+ return testReplaceDataAlgorithm(node, offset, 0, data,
+ function() { node.insertData(offset, data) },
+ startContainer, startOffset, endContainer, endOffset);
+}
+
+var insertDataTests = [];
+for (var i = 0; i < characterDataNodes.length; i++) {
+ var node = characterDataNodes[i];
+ insertDataTests.push([node, 376, '"foo"', node, 0, node, 1]);
+ insertDataTests.push([node, 0, '"foo"', node, 0, node, 0]);
+ insertDataTests.push([node, 1, '"foo"', node, 1, node, 1]);
+ insertDataTests.push([node, node + ".length", '"foo"', node, node + ".length", node, node + ".length"]);
+ insertDataTests.push([node, 1, '"foo"', node, 1, node, 3]);
+ insertDataTests.push([node, 2, '"foo"', node, 1, node, 3]);
+ insertDataTests.push([node, 3, '"foo"', node, 1, node, 3]);
+
+ insertDataTests.push([node, 376, '""', node, 0, node, 1]);
+ insertDataTests.push([node, 0, '""', node, 0, node, 0]);
+ insertDataTests.push([node, 1, '""', node, 1, node, 1]);
+ insertDataTests.push([node, node + ".length", '""', node, node + ".length", node, node + ".length"]);
+ insertDataTests.push([node, 1, '""', node, 1, node, 3]);
+ insertDataTests.push([node, 2, '""', node, 1, node, 3]);
+ insertDataTests.push([node, 3, '""', node, 1, node, 3]);
+}
+
+insertDataTests.push(
+ ["paras[0].firstChild", 1, '"foo"', "paras[0]", 0, "paras[0]", 0],
+ ["paras[0].firstChild", 1, '"foo"', "paras[0]", 0, "paras[0]", 1],
+ ["paras[0].firstChild", 1, '"foo"', "paras[0]", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 1, '"foo"', "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 2, '"foo"', "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 3, '"foo"', "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 1, '"foo"', "paras[0]", 0, "paras[0].firstChild", 3],
+ ["paras[0].firstChild", 2, '"foo"', "paras[0]", 0, "paras[0].firstChild", 3],
+ ["paras[0].firstChild", 3, '"foo"', "paras[0]", 0, "paras[0].firstChild", 3]
+);
+
+
+function testAppendData(node, data, startContainer, startOffset, endContainer, endOffset) {
+ return testReplaceDataAlgorithm(node, node.length, 0, data,
+ function() { node.appendData(data) },
+ startContainer, startOffset, endContainer, endOffset);
+}
+
+var appendDataTests = [];
+for (var i = 0; i < characterDataNodes.length; i++) {
+ var node = characterDataNodes[i];
+ appendDataTests.push([node, '"foo"', node, 0, node, 1]);
+ appendDataTests.push([node, '"foo"', node, 0, node, 0]);
+ appendDataTests.push([node, '"foo"', node, 1, node, 1]);
+ appendDataTests.push([node, '"foo"', node, 0, node, node + ".length"]);
+ appendDataTests.push([node, '"foo"', node, 1, node, node + ".length"]);
+ appendDataTests.push([node, '"foo"', node, node + ".length", node, node + ".length"]);
+ appendDataTests.push([node, '"foo"', node, 1, node, 3]);
+
+ appendDataTests.push([node, '""', node, 0, node, 1]);
+ appendDataTests.push([node, '""', node, 0, node, 0]);
+ appendDataTests.push([node, '""', node, 1, node, 1]);
+ appendDataTests.push([node, '""', node, 0, node, node + ".length"]);
+ appendDataTests.push([node, '""', node, 1, node, node + ".length"]);
+ appendDataTests.push([node, '""', node, node + ".length", node, node + ".length"]);
+ appendDataTests.push([node, '""', node, 1, node, 3]);
+}
+
+appendDataTests.push(
+ ["paras[0].firstChild", '""', "paras[0]", 0, "paras[0]", 0],
+ ["paras[0].firstChild", '""', "paras[0]", 0, "paras[0]", 1],
+ ["paras[0].firstChild", '""', "paras[0]", 1, "paras[0]", 1],
+ ["paras[0].firstChild", '""', "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", '""', "paras[0]", 0, "paras[0].firstChild", 3],
+
+ ["paras[0].firstChild", '"foo"', "paras[0]", 0, "paras[0]", 0],
+ ["paras[0].firstChild", '"foo"', "paras[0]", 0, "paras[0]", 1],
+ ["paras[0].firstChild", '"foo"', "paras[0]", 1, "paras[0]", 1],
+ ["paras[0].firstChild", '"foo"', "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", '"foo"', "paras[0]", 0, "paras[0].firstChild", 3]
+);
+
+
+function testDeleteData(node, offset, count, startContainer, startOffset, endContainer, endOffset) {
+ return testReplaceDataAlgorithm(node, offset, count, "",
+ function() { node.deleteData(offset, count) },
+ startContainer, startOffset, endContainer, endOffset);
+}
+
+var deleteDataTests = [];
+for (var i = 0; i < characterDataNodes.length; i++) {
+ var node = characterDataNodes[i];
+ deleteDataTests.push([node, 376, 2, node, 0, node, 1]);
+ deleteDataTests.push([node, 0, 2, node, 0, node, 0]);
+ deleteDataTests.push([node, 1, 2, node, 1, node, 1]);
+ deleteDataTests.push([node, node + ".length", 2, node, node + ".length", node, node + ".length"]);
+ deleteDataTests.push([node, 1, 2, node, 1, node, 3]);
+ deleteDataTests.push([node, 2, 2, node, 1, node, 3]);
+ deleteDataTests.push([node, 3, 2, node, 1, node, 3]);
+
+ deleteDataTests.push([node, 376, 0, node, 0, node, 1]);
+ deleteDataTests.push([node, 0, 0, node, 0, node, 0]);
+ deleteDataTests.push([node, 1, 0, node, 1, node, 1]);
+ deleteDataTests.push([node, node + ".length", 0, node, node + ".length", node, node + ".length"]);
+ deleteDataTests.push([node, 1, 0, node, 1, node, 3]);
+ deleteDataTests.push([node, 2, 0, node, 1, node, 3]);
+ deleteDataTests.push([node, 3, 0, node, 1, node, 3]);
+
+ deleteDataTests.push([node, 376, 631, node, 0, node, 1]);
+ deleteDataTests.push([node, 0, 631, node, 0, node, 0]);
+ deleteDataTests.push([node, 1, 631, node, 1, node, 1]);
+ deleteDataTests.push([node, node + ".length", 631, node, node + ".length", node, node + ".length"]);
+ deleteDataTests.push([node, 1, 631, node, 1, node, 3]);
+ deleteDataTests.push([node, 2, 631, node, 1, node, 3]);
+ deleteDataTests.push([node, 3, 631, node, 1, node, 3]);
+}
+
+deleteDataTests.push(
+ ["paras[0].firstChild", 1, 2, "paras[0]", 0, "paras[0]", 0],
+ ["paras[0].firstChild", 1, 2, "paras[0]", 0, "paras[0]", 1],
+ ["paras[0].firstChild", 1, 2, "paras[0]", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 1, 2, "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 2, 2, "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 3, 2, "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 1, 2, "paras[0]", 0, "paras[0].firstChild", 3],
+ ["paras[0].firstChild", 2, 2, "paras[0]", 0, "paras[0].firstChild", 3],
+ ["paras[0].firstChild", 3, 2, "paras[0]", 0, "paras[0].firstChild", 3]
+);
+
+
+function testReplaceData(node, offset, count, data, startContainer, startOffset, endContainer, endOffset) {
+ return testReplaceDataAlgorithm(node, offset, count, data,
+ function() { node.replaceData(offset, count, data) },
+ startContainer, startOffset, endContainer, endOffset);
+}
+
+var replaceDataTests = [];
+for (var i = 0; i < characterDataNodes.length; i++) {
+ var node = characterDataNodes[i];
+ replaceDataTests.push([node, 376, 0, '"foo"', node, 0, node, 1]);
+ replaceDataTests.push([node, 0, 0, '"foo"', node, 0, node, 0]);
+ replaceDataTests.push([node, 1, 0, '"foo"', node, 1, node, 1]);
+ replaceDataTests.push([node, node + ".length", 0, '"foo"', node, node + ".length", node, node + ".length"]);
+ replaceDataTests.push([node, 1, 0, '"foo"', node, 1, node, 3]);
+ replaceDataTests.push([node, 2, 0, '"foo"', node, 1, node, 3]);
+ replaceDataTests.push([node, 3, 0, '"foo"', node, 1, node, 3]);
+
+ replaceDataTests.push([node, 376, 0, '""', node, 0, node, 1]);
+ replaceDataTests.push([node, 0, 0, '""', node, 0, node, 0]);
+ replaceDataTests.push([node, 1, 0, '""', node, 1, node, 1]);
+ replaceDataTests.push([node, node + ".length", 0, '""', node, node + ".length", node, node + ".length"]);
+ replaceDataTests.push([node, 1, 0, '""', node, 1, node, 3]);
+ replaceDataTests.push([node, 2, 0, '""', node, 1, node, 3]);
+ replaceDataTests.push([node, 3, 0, '""', node, 1, node, 3]);
+
+ replaceDataTests.push([node, 376, 1, '"foo"', node, 0, node, 1]);
+ replaceDataTests.push([node, 0, 1, '"foo"', node, 0, node, 0]);
+ replaceDataTests.push([node, 1, 1, '"foo"', node, 1, node, 1]);
+ replaceDataTests.push([node, node + ".length", 1, '"foo"', node, node + ".length", node, node + ".length"]);
+ replaceDataTests.push([node, 1, 1, '"foo"', node, 1, node, 3]);
+ replaceDataTests.push([node, 2, 1, '"foo"', node, 1, node, 3]);
+ replaceDataTests.push([node, 3, 1, '"foo"', node, 1, node, 3]);
+
+ replaceDataTests.push([node, 376, 1, '""', node, 0, node, 1]);
+ replaceDataTests.push([node, 0, 1, '""', node, 0, node, 0]);
+ replaceDataTests.push([node, 1, 1, '""', node, 1, node, 1]);
+ replaceDataTests.push([node, node + ".length", 1, '""', node, node + ".length", node, node + ".length"]);
+ replaceDataTests.push([node, 1, 1, '""', node, 1, node, 3]);
+ replaceDataTests.push([node, 2, 1, '""', node, 1, node, 3]);
+ replaceDataTests.push([node, 3, 1, '""', node, 1, node, 3]);
+
+ replaceDataTests.push([node, 376, 47, '"foo"', node, 0, node, 1]);
+ replaceDataTests.push([node, 0, 47, '"foo"', node, 0, node, 0]);
+ replaceDataTests.push([node, 1, 47, '"foo"', node, 1, node, 1]);
+ replaceDataTests.push([node, node + ".length", 47, '"foo"', node, node + ".length", node, node + ".length"]);
+ replaceDataTests.push([node, 1, 47, '"foo"', node, 1, node, 3]);
+ replaceDataTests.push([node, 2, 47, '"foo"', node, 1, node, 3]);
+ replaceDataTests.push([node, 3, 47, '"foo"', node, 1, node, 3]);
+
+ replaceDataTests.push([node, 376, 47, '""', node, 0, node, 1]);
+ replaceDataTests.push([node, 0, 47, '""', node, 0, node, 0]);
+ replaceDataTests.push([node, 1, 47, '""', node, 1, node, 1]);
+ replaceDataTests.push([node, node + ".length", 47, '""', node, node + ".length", node, node + ".length"]);
+ replaceDataTests.push([node, 1, 47, '""', node, 1, node, 3]);
+ replaceDataTests.push([node, 2, 47, '""', node, 1, node, 3]);
+ replaceDataTests.push([node, 3, 47, '""', node, 1, node, 3]);
+}
+
+replaceDataTests.push(
+ ["paras[0].firstChild", 1, 0, '"foo"', "paras[0]", 0, "paras[0]", 0],
+ ["paras[0].firstChild", 1, 0, '"foo"', "paras[0]", 0, "paras[0]", 1],
+ ["paras[0].firstChild", 1, 0, '"foo"', "paras[0]", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 1, 0, '"foo"', "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 2, 0, '"foo"', "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 3, 0, '"foo"', "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 1, 0, '"foo"', "paras[0]", 0, "paras[0].firstChild", 3],
+ ["paras[0].firstChild", 2, 0, '"foo"', "paras[0]", 0, "paras[0].firstChild", 3],
+ ["paras[0].firstChild", 3, 0, '"foo"', "paras[0]", 0, "paras[0].firstChild", 3],
+
+ ["paras[0].firstChild", 1, 1, '"foo"', "paras[0]", 0, "paras[0]", 0],
+ ["paras[0].firstChild", 1, 1, '"foo"', "paras[0]", 0, "paras[0]", 1],
+ ["paras[0].firstChild", 1, 1, '"foo"', "paras[0]", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 1, 1, '"foo"', "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 2, 1, '"foo"', "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 3, 1, '"foo"', "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 1, 1, '"foo"', "paras[0]", 0, "paras[0].firstChild", 3],
+ ["paras[0].firstChild", 2, 1, '"foo"', "paras[0]", 0, "paras[0].firstChild", 3],
+ ["paras[0].firstChild", 3, 1, '"foo"', "paras[0]", 0, "paras[0].firstChild", 3],
+
+ ["paras[0].firstChild", 1, 47, '"foo"', "paras[0]", 0, "paras[0]", 0],
+ ["paras[0].firstChild", 1, 47, '"foo"', "paras[0]", 0, "paras[0]", 1],
+ ["paras[0].firstChild", 1, 47, '"foo"', "paras[0]", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 1, 47, '"foo"', "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 2, 47, '"foo"', "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 3, 47, '"foo"', "paras[0].firstChild", 1, "paras[0]", 1],
+ ["paras[0].firstChild", 1, 47, '"foo"', "paras[0]", 0, "paras[0].firstChild", 3],
+ ["paras[0].firstChild", 2, 47, '"foo"', "paras[0]", 0, "paras[0].firstChild", 3],
+ ["paras[0].firstChild", 3, 47, '"foo"', "paras[0]", 0, "paras[0].firstChild", 3]
+);
+
+
+// There are lots of ways to set data, so we pass a callback that does the
+// actual setting.
+function testDataChange(node, attr, op, rval, startContainer, startOffset, endContainer, endOffset) {
+ return testReplaceDataAlgorithm(node, 0, node.length, op == "=" ? rval : node[attr] + rval,
+ function() {
+ if (op == "=") {
+ node[attr] = rval;
+ } else if (op == "+=") {
+ node[attr] += rval;
+ } else {
+ throw "Unknown op " + op;
+ }
+ },
+ startContainer, startOffset, endContainer, endOffset);
+}
+
+var dataChangeTests = [];
+var dataChangeTestAttrs = ["data", "textContent", "nodeValue"];
+for (var i = 0; i < characterDataNodes.length; i++) {
+ var node = characterDataNodes[i];
+ var dataChangeTestRanges = [
+ [node, 0, node, 0],
+ [node, 0, node, 1],
+ [node, 1, node, 1],
+ [node, 0, node, node + ".length"],
+ [node, 1, node, node + ".length"],
+ [node, node + ".length", node, node + ".length"],
+ ];
+
+ for (var j = 0; j < dataChangeTestRanges.length; j++) {
+ for (var k = 0; k < dataChangeTestAttrs.length; k++) {
+ dataChangeTests.push([
+ node,
+ '"' + dataChangeTestAttrs[k] + '"',
+ '"="',
+ '""',
+ ].concat(dataChangeTestRanges[j]));
+
+ dataChangeTests.push([
+ node,
+ '"' + dataChangeTestAttrs[k] + '"',
+ '"="',
+ '"foo"',
+ ].concat(dataChangeTestRanges[j]));
+
+ dataChangeTests.push([
+ node,
+ '"' + dataChangeTestAttrs[k] + '"',
+ '"="',
+ node + "." + dataChangeTestAttrs[k],
+ ].concat(dataChangeTestRanges[j]));
+
+ dataChangeTests.push([
+ node,
+ '"' + dataChangeTestAttrs[k] + '"',
+ '"+="',
+ '""',
+ ].concat(dataChangeTestRanges[j]));
+
+ dataChangeTests.push([
+ node,
+ '"' + dataChangeTestAttrs[k] + '"',
+ '"+="',
+ '"foo"',
+ ].concat(dataChangeTestRanges[j]));
+
+ dataChangeTests.push([
+ node,
+ '"' + dataChangeTestAttrs[k] + '"',
+ '"+="',
+ node + "." + dataChangeTestAttrs[k]
+ ].concat(dataChangeTestRanges[j]));
+ }
+ }
+}
+
+
+// Now we test node insertions and deletions, as opposed to just data changes.
+// To avoid loads of repetition, we define modifyForRemove() and
+// modifyForInsert().
+
+// If we were to remove removedNode from its parent, what would the boundary
+// point [node, offset] become? Returns [new node, new offset]. Must be
+// called BEFORE the node is actually removed, so its parent is not null. (If
+// the parent is null, it will do nothing.)
+function modifyForRemove(removedNode, point) {
+ var oldParent = removedNode.parentNode;
+ var oldIndex = indexOf(removedNode);
+ if (!oldParent) {
+ return point;
+ }
+
+ // "For each boundary point whose node is removed node or a descendant of
+ // it, set the boundary point to (old parent, old index)."
+ if (point[0] == removedNode || isDescendant(point[0], removedNode)) {
+ return [oldParent, oldIndex];
+ }
+
+ // "For each boundary point whose node is old parent and whose offset is
+ // greater than old index, subtract one from its offset."
+ if (point[0] == oldParent && point[1] > oldIndex) {
+ return [point[0], point[1] - 1];
+ }
+
+ return point;
+}
+
+// Update the given boundary point [node, offset] to account for the fact that
+// insertedNode was just inserted into its current position. This must be
+// called AFTER insertedNode was already inserted.
+function modifyForInsert(insertedNode, point) {
+ // "For each boundary point whose node is the new parent of the affected
+ // node and whose offset is greater than the new index of the affected
+ // node, add one to the boundary point's offset."
+ if (point[0] == insertedNode.parentNode && point[1] > indexOf(insertedNode)) {
+ return [point[0], point[1] + 1];
+ }
+
+ return point;
+}
+
+
+function testInsertBefore(newParent, affectedNode, refNode, startContainer, startOffset, endContainer, endOffset) {
+ var expectedStart = [startContainer, startOffset];
+ var expectedEnd = [endContainer, endOffset];
+
+ expectedStart = modifyForRemove(affectedNode, expectedStart);
+ expectedEnd = modifyForRemove(affectedNode, expectedEnd);
+
+ try {
+ newParent.insertBefore(affectedNode, refNode);
+ } catch (e) {
+ // For our purposes, assume that DOM Core is true -- i.e., ignore
+ // mutation events and similar.
+ return [startContainer, startOffset, endContainer, endOffset];
+ }
+
+ expectedStart = modifyForInsert(affectedNode, expectedStart);
+ expectedEnd = modifyForInsert(affectedNode, expectedEnd);
+
+ return expectedStart.concat(expectedEnd);
+}
+
+var insertBeforeTests = [
+ // Moving a node to its current position
+ ["testDiv", "paras[0]", "paras[1]", "paras[0]", 0, "paras[0]", 0],
+ ["testDiv", "paras[0]", "paras[1]", "paras[0]", 0, "paras[0]", 1],
+ ["testDiv", "paras[0]", "paras[1]", "paras[0]", 1, "paras[0]", 1],
+ ["testDiv", "paras[0]", "paras[1]", "testDiv", 0, "testDiv", 2],
+ ["testDiv", "paras[0]", "paras[1]", "testDiv", 1, "testDiv", 1],
+ ["testDiv", "paras[0]", "paras[1]", "testDiv", 1, "testDiv", 2],
+ ["testDiv", "paras[0]", "paras[1]", "testDiv", 2, "testDiv", 2],
+
+ // Stuff that actually moves something. Note that paras[0] and paras[1]
+ // are both children of testDiv.
+ ["paras[0]", "paras[1]", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 0],
+ ["paras[0]", "paras[1]", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "paras[1]", "paras[0].firstChild", "paras[0]", 1, "paras[0]", 1],
+ ["paras[0]", "paras[1]", "paras[0].firstChild", "testDiv", 0, "testDiv", 1],
+ ["paras[0]", "paras[1]", "paras[0].firstChild", "testDiv", 0, "testDiv", 2],
+ ["paras[0]", "paras[1]", "paras[0].firstChild", "testDiv", 1, "testDiv", 1],
+ ["paras[0]", "paras[1]", "paras[0].firstChild", "testDiv", 1, "testDiv", 2],
+ ["paras[0]", "paras[1]", "null", "paras[0]", 0, "paras[0]", 0],
+ ["paras[0]", "paras[1]", "null", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "paras[1]", "null", "paras[0]", 1, "paras[0]", 1],
+ ["paras[0]", "paras[1]", "null", "testDiv", 0, "testDiv", 1],
+ ["paras[0]", "paras[1]", "null", "testDiv", 0, "testDiv", 2],
+ ["paras[0]", "paras[1]", "null", "testDiv", 1, "testDiv", 1],
+ ["paras[0]", "paras[1]", "null", "testDiv", 1, "testDiv", 2],
+ ["foreignDoc", "detachedComment", "foreignDoc.documentElement", "foreignDoc", 0, "foreignDoc", 0],
+ ["foreignDoc", "detachedComment", "foreignDoc.documentElement", "foreignDoc", 0, "foreignDoc", 1],
+ ["foreignDoc", "detachedComment", "foreignDoc.documentElement", "foreignDoc", 0, "foreignDoc", 2],
+ ["foreignDoc", "detachedComment", "foreignDoc.documentElement", "foreignDoc", 1, "foreignDoc", 1],
+ ["foreignDoc", "detachedComment", "foreignDoc.doctype", "foreignDoc", 0, "foreignDoc", 0],
+ ["foreignDoc", "detachedComment", "foreignDoc.doctype", "foreignDoc", 0, "foreignDoc", 1],
+ ["foreignDoc", "detachedComment", "foreignDoc.doctype", "foreignDoc", 0, "foreignDoc", 2],
+ ["foreignDoc", "detachedComment", "foreignDoc.doctype", "foreignDoc", 1, "foreignDoc", 1],
+ ["foreignDoc", "detachedComment", "null", "foreignDoc", 0, "foreignDoc", 1],
+ ["paras[0]", "xmlTextNode", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 0],
+ ["paras[0]", "xmlTextNode", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "xmlTextNode", "paras[0].firstChild", "paras[0]", 1, "paras[0]", 1],
+
+ // Stuff that throws exceptions
+ ["paras[0]", "paras[0]", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "testDiv", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "document", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "foreignDoc", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "document.doctype", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 1],
+];
+
+
+function testReplaceChild(newParent, newChild, oldChild, startContainer, startOffset, endContainer, endOffset) {
+ var expectedStart = [startContainer, startOffset];
+ var expectedEnd = [endContainer, endOffset];
+
+ expectedStart = modifyForRemove(oldChild, expectedStart);
+ expectedEnd = modifyForRemove(oldChild, expectedEnd);
+
+ if (newChild != oldChild) {
+ // Don't do this twice, if they're the same!
+ expectedStart = modifyForRemove(newChild, expectedStart);
+ expectedEnd = modifyForRemove(newChild, expectedEnd);
+ }
+
+ try {
+ newParent.replaceChild(newChild, oldChild);
+ } catch (e) {
+ return [startContainer, startOffset, endContainer, endOffset];
+ }
+
+ expectedStart = modifyForInsert(newChild, expectedStart);
+ expectedEnd = modifyForInsert(newChild, expectedEnd);
+
+ return expectedStart.concat(expectedEnd);
+}
+
+var replaceChildTests = [
+ // Moving a node to its current position. Doesn't match most browsers'
+ // behavior, but we probably want to keep the spec the same anyway:
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=647603
+ ["testDiv", "paras[0]", "paras[0]", "paras[0]", 0, "paras[0]", 0],
+ ["testDiv", "paras[0]", "paras[0]", "paras[0]", 0, "paras[0]", 1],
+ ["testDiv", "paras[0]", "paras[0]", "paras[0]", 1, "paras[0]", 1],
+ ["testDiv", "paras[0]", "paras[0]", "testDiv", 0, "testDiv", 2],
+ ["testDiv", "paras[0]", "paras[0]", "testDiv", 1, "testDiv", 1],
+ ["testDiv", "paras[0]", "paras[0]", "testDiv", 1, "testDiv", 2],
+ ["testDiv", "paras[0]", "paras[0]", "testDiv", 2, "testDiv", 2],
+
+ // Stuff that actually moves something.
+ ["paras[0]", "paras[1]", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 0],
+ ["paras[0]", "paras[1]", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "paras[1]", "paras[0].firstChild", "paras[0]", 1, "paras[0]", 1],
+ ["paras[0]", "paras[1]", "paras[0].firstChild", "testDiv", 0, "testDiv", 1],
+ ["paras[0]", "paras[1]", "paras[0].firstChild", "testDiv", 0, "testDiv", 2],
+ ["paras[0]", "paras[1]", "paras[0].firstChild", "testDiv", 1, "testDiv", 1],
+ ["paras[0]", "paras[1]", "paras[0].firstChild", "testDiv", 1, "testDiv", 2],
+ ["foreignDoc", "detachedComment", "foreignDoc.documentElement", "foreignDoc", 0, "foreignDoc", 0],
+ ["foreignDoc", "detachedComment", "foreignDoc.documentElement", "foreignDoc", 0, "foreignDoc", 1],
+ ["foreignDoc", "detachedComment", "foreignDoc.documentElement", "foreignDoc", 0, "foreignDoc", 2],
+ ["foreignDoc", "detachedComment", "foreignDoc.documentElement", "foreignDoc", 1, "foreignDoc", 1],
+ ["foreignDoc", "detachedComment", "foreignDoc.doctype", "foreignDoc", 0, "foreignDoc", 0],
+ ["foreignDoc", "detachedComment", "foreignDoc.doctype", "foreignDoc", 0, "foreignDoc", 1],
+ ["foreignDoc", "detachedComment", "foreignDoc.doctype", "foreignDoc", 0, "foreignDoc", 2],
+ ["foreignDoc", "detachedComment", "foreignDoc.doctype", "foreignDoc", 1, "foreignDoc", 1],
+ ["paras[0]", "xmlTextNode", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 0],
+ ["paras[0]", "xmlTextNode", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "xmlTextNode", "paras[0].firstChild", "paras[0]", 1, "paras[0]", 1],
+
+ // Stuff that throws exceptions
+ ["paras[0]", "paras[0]", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "testDiv", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "document", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "foreignDoc", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "document.doctype", "paras[0].firstChild", "paras[0]", 0, "paras[0]", 1],
+];
+
+
+function testAppendChild(newParent, affectedNode, startContainer, startOffset, endContainer, endOffset) {
+ var expectedStart = [startContainer, startOffset];
+ var expectedEnd = [endContainer, endOffset];
+
+ expectedStart = modifyForRemove(affectedNode, expectedStart);
+ expectedEnd = modifyForRemove(affectedNode, expectedEnd);
+
+ try {
+ newParent.appendChild(affectedNode);
+ } catch (e) {
+ return [startContainer, startOffset, endContainer, endOffset];
+ }
+
+ // These two lines will actually never do anything, if you think about it,
+ // but let's leave them in so correctness is more obvious.
+ expectedStart = modifyForInsert(affectedNode, expectedStart);
+ expectedEnd = modifyForInsert(affectedNode, expectedEnd);
+
+ return expectedStart.concat(expectedEnd);
+}
+
+var appendChildTests = [
+ // Moving a node to its current position
+ ["testDiv", "testDiv.lastChild", "testDiv.lastChild", 0, "testDiv.lastChild", 0],
+ ["testDiv", "testDiv.lastChild", "testDiv.lastChild", 0, "testDiv.lastChild", 1],
+ ["testDiv", "testDiv.lastChild", "testDiv.lastChild", 1, "testDiv.lastChild", 1],
+ ["testDiv", "testDiv.lastChild", "testDiv", "testDiv.childNodes.length - 2", "testDiv", "testDiv.childNodes.length"],
+ ["testDiv", "testDiv.lastChild", "testDiv", "testDiv.childNodes.length - 2", "testDiv", "testDiv.childNodes.length - 1"],
+ ["testDiv", "testDiv.lastChild", "testDiv", "testDiv.childNodes.length - 1", "testDiv", "testDiv.childNodes.length"],
+ ["testDiv", "testDiv.lastChild", "testDiv", "testDiv.childNodes.length - 1", "testDiv", "testDiv.childNodes.length - 1"],
+ ["testDiv", "testDiv.lastChild", "testDiv", "testDiv.childNodes.length", "testDiv", "testDiv.childNodes.length"],
+ ["detachedDiv", "detachedDiv.lastChild", "detachedDiv.lastChild", 0, "detachedDiv.lastChild", 0],
+ ["detachedDiv", "detachedDiv.lastChild", "detachedDiv.lastChild", 0, "detachedDiv.lastChild", 1],
+ ["detachedDiv", "detachedDiv.lastChild", "detachedDiv.lastChild", 1, "detachedDiv.lastChild", 1],
+ ["detachedDiv", "detachedDiv.lastChild", "detachedDiv", "detachedDiv.childNodes.length - 2", "detachedDiv", "detachedDiv.childNodes.length"],
+ ["detachedDiv", "detachedDiv.lastChild", "detachedDiv", "detachedDiv.childNodes.length - 2", "detachedDiv", "detachedDiv.childNodes.length - 1"],
+ ["detachedDiv", "detachedDiv.lastChild", "detachedDiv", "detachedDiv.childNodes.length - 1", "detachedDiv", "detachedDiv.childNodes.length"],
+ ["detachedDiv", "detachedDiv.lastChild", "detachedDiv", "detachedDiv.childNodes.length - 1", "detachedDiv", "detachedDiv.childNodes.length - 1"],
+ ["detachedDiv", "detachedDiv.lastChild", "detachedDiv", "detachedDiv.childNodes.length", "detachedDiv", "detachedDiv.childNodes.length"],
+
+ // Stuff that actually moves something
+ ["paras[0]", "paras[1]", "paras[0]", 0, "paras[0]", 0],
+ ["paras[0]", "paras[1]", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "paras[1]", "paras[0]", 1, "paras[0]", 1],
+ ["paras[0]", "paras[1]", "testDiv", 0, "testDiv", 1],
+ ["paras[0]", "paras[1]", "testDiv", 0, "testDiv", 2],
+ ["paras[0]", "paras[1]", "testDiv", 1, "testDiv", 1],
+ ["paras[0]", "paras[1]", "testDiv", 1, "testDiv", 2],
+ ["foreignDoc", "detachedComment", "foreignDoc", "foreignDoc.childNodes.length - 1", "foreignDoc", "foreignDoc.childNodes.length"],
+ ["foreignDoc", "detachedComment", "foreignDoc", "foreignDoc.childNodes.length - 1", "foreignDoc", "foreignDoc.childNodes.length - 1"],
+ ["foreignDoc", "detachedComment", "foreignDoc", "foreignDoc.childNodes.length", "foreignDoc", "foreignDoc.childNodes.length"],
+ ["foreignDoc", "detachedComment", "detachedComment", 0, "detachedComment", 5],
+ ["paras[0]", "xmlTextNode", "paras[0]", 0, "paras[0]", 0],
+ ["paras[0]", "xmlTextNode", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "xmlTextNode", "paras[0]", 1, "paras[0]", 1],
+
+ // Stuff that throws exceptions
+ ["paras[0]", "paras[0]", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "testDiv", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "document", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "foreignDoc", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "document.doctype", "paras[0]", 0, "paras[0]", 1],
+];
+
+
+function testRemoveChild(affectedNode, startContainer, startOffset, endContainer, endOffset) {
+ var expectedStart = [startContainer, startOffset];
+ var expectedEnd = [endContainer, endOffset];
+
+ expectedStart = modifyForRemove(affectedNode, expectedStart);
+ expectedEnd = modifyForRemove(affectedNode, expectedEnd);
+
+ // We don't test cases where the parent is wrong, so this should never
+ // throw an exception.
+ affectedNode.parentNode.removeChild(affectedNode);
+
+ return expectedStart.concat(expectedEnd);
+}
+
+var removeChildTests = [
+ ["paras[0]", "paras[0]", 0, "paras[0]", 0],
+ ["paras[0]", "paras[0]", 0, "paras[0]", 1],
+ ["paras[0]", "paras[0]", 1, "paras[0]", 1],
+ ["paras[0]", "testDiv", 0, "testDiv", 0],
+ ["paras[0]", "testDiv", 0, "testDiv", 1],
+ ["paras[0]", "testDiv", 1, "testDiv", 1],
+ ["paras[0]", "testDiv", 0, "testDiv", 2],
+ ["paras[0]", "testDiv", 1, "testDiv", 2],
+ ["paras[0]", "testDiv", 2, "testDiv", 2],
+
+ ["foreignDoc.documentElement", "foreignDoc", 0, "foreignDoc", "foreignDoc.childNodes.length"],
+];
+
+
+// Finally run everything. All grouped together at the end so that I can
+// easily comment out some of them, so I don't have to wait for all test types
+// to debug only some of them.
+doTests(splitTextTests, function(params) { return params[0] + ".splitText(" + params[1] + ")" }, testSplitText);
+doTests(insertDataTests, function(params) { return params[0] + ".insertData(" + params[1] + ", " + params[2] + ")" }, testInsertData);
+doTests(appendDataTests, function(params) { return params[0] + ".appendData(" + params[1] + ")" }, testAppendData);
+doTests(deleteDataTests, function(params) { return params[0] + ".deleteData(" + params[1] + ", " + params[2] + ")" }, testDeleteData);
+doTests(replaceDataTests, function(params) { return params[0] + ".replaceData(" + params[1] + ", " + params[2] + ", " + params[3] + ")" }, testReplaceData);
+doTests(dataChangeTests, function(params) { return params[0] + "." + eval(params[1]) + " " + eval(params[2]) + ' ' + params[3] }, testDataChange);
+doTests(insertBeforeTests, function(params) { return params[0] + ".insertBefore(" + params[1] + ", " + params[2] + ")" }, testInsertBefore);
+doTests(replaceChildTests, function(params) { return params[0] + ".replaceChild(" + params[1] + ", " + params[2] + ")" }, testReplaceChild);
+doTests(appendChildTests, function(params) { return params[0] + ".appendChild(" + params[1] + ")" }, testAppendChild);
+doTests(removeChildTests, function(params) { return params[0] + ".parentNode.removeChild(" + params[0] + ")" }, testRemoveChild);
+
+
+testDiv.style.display = "none";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangeselectNodeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-selectNode-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-selectNode-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-selectNode-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,331 @@
</span><ins>+
+FAIL current doc: #document node, current doc's range, type 9 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL current doc: #document node, foreign doc's range, type 9 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL current doc: #document node, XML doc's range, type 9 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS current doc: #document node, detached range, type 9
+FAIL ** current doc: html node, current doc's range, type 10 assert_throws: selectNodeContents() on a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNodeContents(node);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL ** current doc: html node, foreign doc's range, type 10 assert_throws: selectNodeContents() on a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNodeContents(node);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL ** current doc: html node, XML doc's range, type 10 assert_throws: selectNodeContents() on a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNodeContents(node);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS ** current doc: html node, detached range, type 10
+PASS ** current doc: html node, current doc's range, type 1
+PASS ** current doc: html node, foreign doc's range, type 1
+PASS ** current doc: html node, XML doc's range, type 1
+PASS ** current doc: html node, detached range, type 1
+PASS **** current doc: head node, current doc's range, type 1
+PASS **** current doc: head node, foreign doc's range, type 1
+PASS **** current doc: head node, XML doc's range, type 1
+PASS **** current doc: head node, detached range, type 1
+PASS ****** current doc: title node, current doc's range, type 1
+PASS ****** current doc: title node, foreign doc's range, type 1
+PASS ****** current doc: title node, XML doc's range, type 1
+PASS ****** current doc: title node, detached range, type 1
+PASS ******** current doc: #text node, current doc's range, type 3
+PASS ******** current doc: #text node, foreign doc's range, type 3
+PASS ******** current doc: #text node, XML doc's range, type 3
+PASS ******** current doc: #text node, detached range, type 3
+PASS ****** current doc: #text node, current doc's range, type 3
+PASS ****** current doc: #text node, foreign doc's range, type 3
+PASS ****** current doc: #text node, XML doc's range, type 3
+PASS ****** current doc: #text node, detached range, type 3
+PASS ****** current doc: link node, current doc's range, type 1
+PASS ****** current doc: link node, foreign doc's range, type 1
+PASS ****** current doc: link node, XML doc's range, type 1
+PASS ****** current doc: link node, detached range, type 1
+PASS ****** current doc: #text node, current doc's range, type 3
+PASS ****** current doc: #text node, foreign doc's range, type 3
+PASS ****** current doc: #text node, XML doc's range, type 3
+PASS ****** current doc: #text node, detached range, type 3
+PASS ****** current doc: meta node, current doc's range, type 1
+PASS ****** current doc: meta node, foreign doc's range, type 1
+PASS ****** current doc: meta node, XML doc's range, type 1
+PASS ****** current doc: meta node, detached range, type 1
+PASS ****** current doc: #text node, current doc's range, type 3
+PASS ****** current doc: #text node, foreign doc's range, type 3
+PASS ****** current doc: #text node, XML doc's range, type 3
+PASS ****** current doc: #text node, detached range, type 3
+PASS **** current doc: body node, current doc's range, type 1
+PASS **** current doc: body node, foreign doc's range, type 1
+PASS **** current doc: body node, XML doc's range, type 1
+PASS **** current doc: body node, detached range, type 1
+PASS ****** current doc: div node, current doc's range, type 1
+PASS ****** current doc: div node, foreign doc's range, type 1
+PASS ****** current doc: div node, XML doc's range, type 1
+PASS ****** current doc: div node, detached range, type 1
+PASS ******** current doc: p node, current doc's range, type 1
+PASS ******** current doc: p node, foreign doc's range, type 1
+PASS ******** current doc: p node, XML doc's range, type 1
+PASS ******** current doc: p node, detached range, type 1
+PASS ********** current doc: #text node, current doc's range, type 3
+PASS ********** current doc: #text node, foreign doc's range, type 3
+PASS ********** current doc: #text node, XML doc's range, type 3
+PASS ********** current doc: #text node, detached range, type 3
+PASS ******** current doc: p node, current doc's range, type 1
+PASS ******** current doc: p node, foreign doc's range, type 1
+PASS ******** current doc: p node, XML doc's range, type 1
+PASS ******** current doc: p node, detached range, type 1
+PASS ********** current doc: #text node, current doc's range, type 3
+PASS ********** current doc: #text node, foreign doc's range, type 3
+PASS ********** current doc: #text node, XML doc's range, type 3
+PASS ********** current doc: #text node, detached range, type 3
+PASS ******** current doc: p node, current doc's range, type 1
+PASS ******** current doc: p node, foreign doc's range, type 1
+PASS ******** current doc: p node, XML doc's range, type 1
+PASS ******** current doc: p node, detached range, type 1
+PASS ********** current doc: #text node, current doc's range, type 3
+PASS ********** current doc: #text node, foreign doc's range, type 3
+PASS ********** current doc: #text node, XML doc's range, type 3
+PASS ********** current doc: #text node, detached range, type 3
+PASS ******** current doc: p node, current doc's range, type 1
+PASS ******** current doc: p node, foreign doc's range, type 1
+PASS ******** current doc: p node, XML doc's range, type 1
+PASS ******** current doc: p node, detached range, type 1
+PASS ********** current doc: #text node, current doc's range, type 3
+PASS ********** current doc: #text node, foreign doc's range, type 3
+PASS ********** current doc: #text node, XML doc's range, type 3
+PASS ********** current doc: #text node, detached range, type 3
+PASS ******** current doc: p node, current doc's range, type 1
+PASS ******** current doc: p node, foreign doc's range, type 1
+PASS ******** current doc: p node, XML doc's range, type 1
+PASS ******** current doc: p node, detached range, type 1
+PASS ********** current doc: #text node, current doc's range, type 3
+PASS ********** current doc: #text node, foreign doc's range, type 3
+PASS ********** current doc: #text node, XML doc's range, type 3
+PASS ********** current doc: #text node, detached range, type 3
+PASS ******** current doc: #comment node, current doc's range, type 8
+PASS ******** current doc: #comment node, foreign doc's range, type 8
+PASS ******** current doc: #comment node, XML doc's range, type 8
+PASS ******** current doc: #comment node, detached range, type 8
+PASS ****** current doc: #text node, current doc's range, type 3
+PASS ****** current doc: #text node, foreign doc's range, type 3
+PASS ****** current doc: #text node, XML doc's range, type 3
+PASS ****** current doc: #text node, detached range, type 3
+PASS ****** current doc: script node, current doc's range, type 1
+PASS ****** current doc: script node, foreign doc's range, type 1
+PASS ****** current doc: script node, XML doc's range, type 1
+PASS ****** current doc: script node, detached range, type 1
+PASS ****** current doc: #text node, current doc's range, type 3
+PASS ****** current doc: #text node, foreign doc's range, type 3
+PASS ****** current doc: #text node, XML doc's range, type 3
+PASS ****** current doc: #text node, detached range, type 3
+PASS ****** current doc: script node, current doc's range, type 1
+PASS ****** current doc: script node, foreign doc's range, type 1
+PASS ****** current doc: script node, XML doc's range, type 1
+PASS ****** current doc: script node, detached range, type 1
+PASS ****** current doc: #text node, current doc's range, type 3
+PASS ****** current doc: #text node, foreign doc's range, type 3
+PASS ****** current doc: #text node, XML doc's range, type 3
+PASS ****** current doc: #text node, detached range, type 3
+PASS ****** current doc: script node, current doc's range, type 1
+PASS ****** current doc: script node, foreign doc's range, type 1
+PASS ****** current doc: script node, XML doc's range, type 1
+PASS ****** current doc: script node, detached range, type 1
+PASS ****** current doc: #text node, current doc's range, type 3
+PASS ****** current doc: #text node, foreign doc's range, type 3
+PASS ****** current doc: #text node, XML doc's range, type 3
+PASS ****** current doc: #text node, detached range, type 3
+PASS ****** current doc: script node, current doc's range, type 1
+PASS ****** current doc: script node, foreign doc's range, type 1
+PASS ****** current doc: script node, XML doc's range, type 1
+PASS ****** current doc: script node, detached range, type 1
+PASS ******** current doc: #text node, current doc's range, type 3
+PASS ******** current doc: #text node, foreign doc's range, type 3
+PASS ******** current doc: #text node, XML doc's range, type 3
+PASS ******** current doc: #text node, detached range, type 3
+FAIL foreign doc: #document node, current doc's range, type 9 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL foreign doc: #document node, foreign doc's range, type 9 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL foreign doc: #document node, XML doc's range, type 9 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS foreign doc: #document node, detached range, type 9
+FAIL ** foreign doc: html node, current doc's range, type 10 assert_throws: selectNodeContents() on a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNodeContents(node);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL ** foreign doc: html node, foreign doc's range, type 10 assert_throws: selectNodeContents() on a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNodeContents(node);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL ** foreign doc: html node, XML doc's range, type 10 assert_throws: selectNodeContents() on a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNodeContents(node);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS ** foreign doc: html node, detached range, type 10
+PASS ** foreign doc: html node, current doc's range, type 1
+PASS ** foreign doc: html node, foreign doc's range, type 1
+PASS ** foreign doc: html node, XML doc's range, type 1
+PASS ** foreign doc: html node, detached range, type 1
+PASS **** foreign doc: head node, current doc's range, type 1
+PASS **** foreign doc: head node, foreign doc's range, type 1
+PASS **** foreign doc: head node, XML doc's range, type 1
+PASS **** foreign doc: head node, detached range, type 1
+PASS ****** foreign doc: title node, current doc's range, type 1
+PASS ****** foreign doc: title node, foreign doc's range, type 1
+PASS ****** foreign doc: title node, XML doc's range, type 1
+PASS ****** foreign doc: title node, detached range, type 1
+PASS **** foreign doc: body node, current doc's range, type 1
+PASS **** foreign doc: body node, foreign doc's range, type 1
+PASS **** foreign doc: body node, XML doc's range, type 1
+PASS **** foreign doc: body node, detached range, type 1
+PASS ****** foreign doc: p node, current doc's range, type 1
+PASS ****** foreign doc: p node, foreign doc's range, type 1
+PASS ****** foreign doc: p node, XML doc's range, type 1
+PASS ****** foreign doc: p node, detached range, type 1
+PASS ******** foreign doc: #text node, current doc's range, type 3
+PASS ******** foreign doc: #text node, foreign doc's range, type 3
+PASS ******** foreign doc: #text node, XML doc's range, type 3
+PASS ******** foreign doc: #text node, detached range, type 3
+PASS ****** foreign doc: p node, current doc's range, type 1
+PASS ****** foreign doc: p node, foreign doc's range, type 1
+PASS ****** foreign doc: p node, XML doc's range, type 1
+PASS ****** foreign doc: p node, detached range, type 1
+PASS ******** foreign doc: #text node, current doc's range, type 3
+PASS ******** foreign doc: #text node, foreign doc's range, type 3
+PASS ******** foreign doc: #text node, XML doc's range, type 3
+PASS ******** foreign doc: #text node, detached range, type 3
+PASS ****** foreign doc: #text node, current doc's range, type 3
+PASS ****** foreign doc: #text node, foreign doc's range, type 3
+PASS ****** foreign doc: #text node, XML doc's range, type 3
+PASS ****** foreign doc: #text node, detached range, type 3
+PASS ** foreign doc: #comment node, current doc's range, type 8
+PASS ** foreign doc: #comment node, foreign doc's range, type 8
+PASS ** foreign doc: #comment node, XML doc's range, type 8
+PASS ** foreign doc: #comment node, detached range, type 8
+FAIL detached div in current doc: div node, current doc's range, type 1 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL detached div in current doc: div node, foreign doc's range, type 1 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL detached div in current doc: div node, XML doc's range, type 1 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS detached div in current doc: div node, detached range, type 1
+FAIL ** detached div in current doc: p node, current doc's range, type 1 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL ** detached div in current doc: p node, foreign doc's range, type 1 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL ** detached div in current doc: p node, XML doc's range, type 1 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS ** detached div in current doc: p node, detached range, type 1
+FAIL **** detached div in current doc: #text node, current doc's range, type 3 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL **** detached div in current doc: #text node, foreign doc's range, type 3 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL **** detached div in current doc: #text node, XML doc's range, type 3 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS **** detached div in current doc: #text node, detached range, type 3
+FAIL ** detached div in current doc: p node, current doc's range, type 1 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL ** detached div in current doc: p node, foreign doc's range, type 1 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL ** detached div in current doc: p node, XML doc's range, type 1 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS ** detached div in current doc: p node, detached range, type 1
+FAIL **** detached div in current doc: #text node, current doc's range, type 3 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL **** detached div in current doc: #text node, foreign doc's range, type 3 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL **** detached div in current doc: #text node, XML doc's range, type 3 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS **** detached div in current doc: #text node, detached range, type 3
+FAIL #document node, current doc's range, type 9 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL #document node, foreign doc's range, type 9 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL #document node, XML doc's range, type 9 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS #document node, detached range, type 9
+FAIL ** qorflesnorf node, current doc's range, type 10 assert_throws: selectNodeContents() on a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNodeContents(node);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL ** qorflesnorf node, foreign doc's range, type 10 assert_throws: selectNodeContents() on a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNodeContents(node);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL ** qorflesnorf node, XML doc's range, type 10 assert_throws: selectNodeContents() on a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNodeContents(node);..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS ** qorflesnorf node, detached range, type 10
+PASS ** igiveuponcreativenames node, current doc's range, type 1
+PASS ** igiveuponcreativenames node, foreign doc's range, type 1
+PASS ** igiveuponcreativenames node, XML doc's range, type 1
+PASS ** igiveuponcreativenames node, detached range, type 1
+PASS **** #text node, current doc's range, type 3
+PASS **** #text node, foreign doc's range, type 3
+PASS **** #text node, XML doc's range, type 3
+PASS **** #text node, detached range, type 3
+PASS ** somepi node, current doc's range, type 7
+PASS ** somepi node, foreign doc's range, type 7
+PASS ** somepi node, XML doc's range, type 7
+PASS ** somepi node, detached range, type 7
+PASS ** #comment node, current doc's range, type 8
+PASS ** #comment node, foreign doc's range, type 8
+PASS ** #comment node, XML doc's range, type 8
+PASS ** #comment node, detached range, type 8
+PASS igiveuponcreativenames node, current doc's range, type 1
+PASS igiveuponcreativenames node, foreign doc's range, type 1
+PASS igiveuponcreativenames node, XML doc's range, type 1
+PASS igiveuponcreativenames node, detached range, type 1
+PASS ** #text node, current doc's range, type 3
+PASS ** #text node, foreign doc's range, type 3
+PASS ** #text node, XML doc's range, type 3
+PASS ** #text node, detached range, type 3
+FAIL #text node, current doc's range, type 3 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL #text node, foreign doc's range, type 3 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL #text node, XML doc's range, type 3 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS #text node, detached range, type 3
+PASS #text node, current doc's range, type 3
+PASS #text node, foreign doc's range, type 3
+PASS #text node, XML doc's range, type 3
+PASS #text node, detached range, type 3
+PASS #text node, current doc's range, type 3
+PASS #text node, foreign doc's range, type 3
+PASS #text node, XML doc's range, type 3
+PASS #text node, detached range, type 3
+PASS somepi node, current doc's range, type 7
+PASS somepi node, foreign doc's range, type 7
+PASS somepi node, XML doc's range, type 7
+PASS somepi node, detached range, type 7
+PASS #comment node, current doc's range, type 8
+PASS #comment node, foreign doc's range, type 8
+PASS #comment node, XML doc's range, type 8
+PASS #comment node, detached range, type 8
+PASS #comment node, current doc's range, type 8
+PASS #comment node, foreign doc's range, type 8
+PASS #comment node, XML doc's range, type 8
+PASS #comment node, detached range, type 8
+PASS #comment node, current doc's range, type 8
+PASS #comment node, foreign doc's range, type 8
+PASS #comment node, XML doc's range, type 8
+PASS #comment node, detached range, type 8
+FAIL #document-fragment node, current doc's range, type 11 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL #document-fragment node, foreign doc's range, type 11 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL #document-fragment node, XML doc's range, type 11 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS #document-fragment node, detached range, type 11
+FAIL #document-fragment node, current doc's range, type 11 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL #document-fragment node, foreign doc's range, type 11 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL #document-fragment node, XML doc's range, type 11 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS #document-fragment node, detached range, type 11
+FAIL #document-fragment node, current doc's range, type 11 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL #document-fragment node, foreign doc's range, type 11 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL #document-fragment node, XML doc's range, type 11 assert_throws: selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.selectNode(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS #document-fragment node, detached range, type 11
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangeselectNodehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-selectNode.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-selectNode.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-selectNode.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,99 @@
</span><ins>+<!doctype html>
+<title>Range.selectNode() and .selectNodeContents() tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+function testSelectNode(range, node) {
+ try {
+ range.collapsed;
+ } catch (e) {
+ // Range is detached
+ assert_throws("INVALID_STATE_ERR", function () {
+ range.selectNode(node);
+ }, "selectNode() on a detached node must throw INVALID_STATE_ERR");
+ assert_throws("INVALID_STATE_ERR", function () {
+ range.selectNodeContents(node);
+ }, "selectNodeContents() on a detached node must throw INVALID_STATE_ERR");
+ return;
+ }
+
+ if (!node.parentNode) {
+ assert_throws("INVALID_NODE_TYPE_ERR", function() {
+ range.selectNode(node);
+ }, "selectNode() on a node with no parent must throw INVALID_NODE_TYPE_ERR");
+ } else {
+ var index = 0;
+ while (node.parentNode.childNodes[index] != node) {
+ index++;
+ }
+
+ range.selectNode(node);
+ assert_equals(range.startContainer, node.parentNode,
+ "After selectNode(), startContainer must equal parent node");
+ assert_equals(range.endContainer, node.parentNode,
+ "After selectNode(), endContainer must equal parent node");
+ assert_equals(range.startOffset, index,
+ "After selectNode(), startOffset must be index of node in parent (" + index + ")");
+ assert_equals(range.endOffset, index + 1,
+ "After selectNode(), endOffset must be one plus index of node in parent (" + (index + 1) + ")");
+ }
+
+ if (node.nodeType == Node.DOCUMENT_TYPE_NODE) {
+ assert_throws("INVALID_NODE_TYPE_ERR", function () {
+ range.selectNodeContents(node);
+ }, "selectNodeContents() on a doctype must throw INVALID_NODE_TYPE_ERR");
+ } else {
+ range.selectNodeContents(node);
+ assert_equals(range.startContainer, node,
+ "After selectNodeContents(), startContainer must equal node");
+ assert_equals(range.endContainer, node,
+ "After selectNodeContents(), endContainer must equal node");
+ assert_equals(range.startOffset, 0,
+ "After selectNodeContents(), startOffset must equal 0");
+ var len = nodeLength(node);
+ assert_equals(range.endOffset, len,
+ "After selectNodeContents(), endOffset must equal node length (" + len + ")");
+ }
+}
+
+var range = document.createRange();
+var foreignRange = foreignDoc.createRange();
+var xmlRange = xmlDoc.createRange();
+var detachedRange = document.createRange();
+detachedRange.detach();
+var tests = [];
+function testTree(root, marker) {
+ if (root.nodeType == Node.ELEMENT_NODE && root.id == "log") {
+ // This is being modified during the tests, so let's not test it.
+ return;
+ }
+ tests.push([marker + root.nodeName.toLowerCase() + " node, current doc's range, type " + root.nodeType, range, root]);
+ tests.push([marker + root.nodeName.toLowerCase() + " node, foreign doc's range, type " + root.nodeType, foreignRange, root]);
+ tests.push([marker + root.nodeName.toLowerCase() + " node, XML doc's range, type " + root.nodeType, xmlRange, root]);
+ tests.push([marker + root.nodeName.toLowerCase() + " node, detached range, type " + root.nodeType, detachedRange, root]);
+ for (var i = 0; i < root.childNodes.length; i++) {
+ testTree(root.childNodes[i], "**" + marker);
+ }
+}
+testTree(document, " current doc: ");
+testTree(foreignDoc, " foreign doc: ");
+testTree(detachedDiv, " detached div in current doc: ");
+
+var otherTests = [xmlDoc, xmlElement, detachedTextNode, foreignTextNode,
+xmlTextNode, processingInstruction, comment, foreignComment, xmlComment,
+docfrag, foreignDocfrag, xmlDocfrag];
+
+for (var i = 0; i < otherTests.length; i++) {
+ testTree(otherTests[i], " ");
+}
+
+generate_tests(testSelectNode, tests);
+
+testDiv.style.display = "none";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangesetexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-set-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-set-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-set-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,13264 @@
</span><ins>+
+PASS Set up range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0]
+PASS Set up range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1]
+PASS Set up range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8]
+PASS Set up range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9]
+PASS Set up range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0]
+PASS Set up range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9]
+PASS Set up range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0]
+PASS Set up range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8]
+PASS Set up range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0]
+PASS Set up range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8]
+PASS Set up range 10 [document.documentElement, 0, document.documentElement, 1]
+PASS Set up range 11 [document.documentElement, 0, document.documentElement, 2]
+PASS Set up range 12 [document.documentElement, 1, document.documentElement, 2]
+PASS Set up range 13 [document.head, 1, document.head, 1]
+PASS Set up range 14 [document.body, 4, document.body, 5]
+PASS Set up range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1]
+PASS Set up range 16 [paras[0], 0, paras[0], 1]
+PASS Set up range 17 [detachedPara1, 0, detachedPara1, 1]
+PASS Set up range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0]
+PASS Set up range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8]
+PASS Set up range 20 [paras[0].firstChild, 3, paras[3], 1]
+PASS Set up range 21 [paras[0], 0, paras[0].firstChild, 7]
+PASS Set up range 22 [testDiv, 2, paras[4], 1]
+PASS Set up range 23 [document, 0, document, 1]
+PASS Set up range 24 [document, 0, document, 2]
+PASS Set up range 25 [comment, 2, comment, 3]
+PASS Set up range 26 [testDiv, 0, comment, 5]
+PASS Set up range 27 [foreignDoc, 1, foreignComment, 2]
+PASS Set up range 28 [foreignDoc.body, 0, foreignTextNode, 36]
+PASS Set up range 29 [xmlDoc, 1, xmlComment, 0]
+PASS Set up range 30 [detachedTextNode, 0, detachedTextNode, 8]
+PASS Set up range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8]
+PASS Set up range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8]
+PASS Set up range 33 [detachedComment, 3, detachedComment, 4]
+PASS Set up range 34 [detachedForeignComment, 0, detachedForeignComment, 1]
+PASS Set up range 35 [detachedXmlComment, 2, detachedXmlComment, 6]
+PASS Set up range 36 [docfrag, 0, docfrag, 0]
+PASS Set up range 37 [processingInstruction, 0, processingInstruction, 4]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 24 [document.documentElement, -1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 25 [document.documentElement, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 26 [document.documentElement, 1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 27 [document.documentElement, 2]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 28 [document.documentElement, 7]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 29 [document.head, 1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 30 [document.body, 3]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 35 [paras[0], 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 36 [paras[0], 1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 37 [paras[0], 2]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 38 [paras[1], 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 39 [paras[1], 1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 40 [paras[1], 2]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 41 [detachedPara1, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 42 [detachedPara1, 1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 43 [testDiv, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 44 [testDiv, 3]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 45 [document, -1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 46 [document, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 47 [document, 1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 48 [document, 2]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 49 [document, 3]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 50 [comment, -1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 51 [comment, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 52 [comment, 4]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 53 [comment, 96]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 54 [foreignDoc, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 55 [foreignDoc, 1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 56 [foreignComment, 2]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 57 [foreignTextNode, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 58 [foreignTextNode, 36]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 59 [xmlDoc, -1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 60 [xmlDoc, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 61 [xmlDoc, 1]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 62 [xmlDoc, 5]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 63 [xmlComment, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 64 [xmlComment, 4]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 65 [processingInstruction, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 66 [processingInstruction, 5]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 67 [processingInstruction, 9]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 68 [detachedTextNode, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 69 [detachedTextNode, 8]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 75 [detachedComment, 3]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 76 [detachedComment, 5]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 80 [docfrag, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 24 [document.documentElement, -1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 25 [document.documentElement, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 26 [document.documentElement, 1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 27 [document.documentElement, 2]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 28 [document.documentElement, 7]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 29 [document.head, 1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 30 [document.body, 3]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 35 [paras[0], 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 36 [paras[0], 1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 37 [paras[0], 2]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 38 [paras[1], 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 39 [paras[1], 1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 40 [paras[1], 2]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 41 [detachedPara1, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 42 [detachedPara1, 1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 43 [testDiv, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 44 [testDiv, 3]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 45 [document, -1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 46 [document, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 47 [document, 1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 48 [document, 2]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 49 [document, 3]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 50 [comment, -1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 51 [comment, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 52 [comment, 4]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 53 [comment, 96]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 54 [foreignDoc, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 55 [foreignDoc, 1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 56 [foreignComment, 2]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 57 [foreignTextNode, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 58 [foreignTextNode, 36]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 59 [xmlDoc, -1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 60 [xmlDoc, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 61 [xmlDoc, 1]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 62 [xmlDoc, 5]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 63 [xmlComment, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 64 [xmlComment, 4]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 65 [processingInstruction, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 66 [processingInstruction, 5]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 67 [processingInstruction, 9]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 68 [detachedTextNode, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 69 [detachedTextNode, 8]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 75 [detachedComment, 3]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 76 [detachedComment, 5]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 80 [docfrag, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 24 [document.documentElement, -1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 25 [document.documentElement, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 26 [document.documentElement, 1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 27 [document.documentElement, 2]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 28 [document.documentElement, 7]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 29 [document.head, 1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 30 [document.body, 3]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 35 [paras[0], 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 36 [paras[0], 1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 37 [paras[0], 2]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 38 [paras[1], 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 39 [paras[1], 1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 40 [paras[1], 2]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 41 [detachedPara1, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 42 [detachedPara1, 1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 43 [testDiv, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 44 [testDiv, 3]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 45 [document, -1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 46 [document, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 47 [document, 1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 48 [document, 2]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 49 [document, 3]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 50 [comment, -1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 51 [comment, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 52 [comment, 4]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 53 [comment, 96]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 54 [foreignDoc, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 55 [foreignDoc, 1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 56 [foreignComment, 2]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 57 [foreignTextNode, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 58 [foreignTextNode, 36]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 59 [xmlDoc, -1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 60 [xmlDoc, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 61 [xmlDoc, 1]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 62 [xmlDoc, 5]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 63 [xmlComment, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 64 [xmlComment, 4]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 65 [processingInstruction, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 66 [processingInstruction, 5]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 67 [processingInstruction, 9]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 68 [detachedTextNode, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 69 [detachedTextNode, 8]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 75 [detachedComment, 3]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 76 [detachedComment, 5]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 80 [docfrag, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 24 [document.documentElement, -1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 25 [document.documentElement, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 26 [document.documentElement, 1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 27 [document.documentElement, 2]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 28 [document.documentElement, 7]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 29 [document.head, 1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 30 [document.body, 3]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 35 [paras[0], 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 36 [paras[0], 1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 37 [paras[0], 2]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 38 [paras[1], 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 39 [paras[1], 1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 40 [paras[1], 2]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 41 [detachedPara1, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 42 [detachedPara1, 1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 43 [testDiv, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 44 [testDiv, 3]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 45 [document, -1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 46 [document, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 47 [document, 1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 48 [document, 2]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 49 [document, 3]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 50 [comment, -1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 51 [comment, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 52 [comment, 4]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 53 [comment, 96]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 54 [foreignDoc, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 55 [foreignDoc, 1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 56 [foreignComment, 2]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 57 [foreignTextNode, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 58 [foreignTextNode, 36]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 59 [xmlDoc, -1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 60 [xmlDoc, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 61 [xmlDoc, 1]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 62 [xmlDoc, 5]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 63 [xmlComment, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 64 [xmlComment, 4]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 65 [processingInstruction, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 66 [processingInstruction, 5]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 67 [processingInstruction, 9]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 68 [detachedTextNode, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 69 [detachedTextNode, 8]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 75 [detachedComment, 3]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 76 [detachedComment, 5]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 80 [docfrag, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 24 [document.documentElement, -1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 25 [document.documentElement, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 26 [document.documentElement, 1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 27 [document.documentElement, 2]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 28 [document.documentElement, 7]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 29 [document.head, 1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 30 [document.body, 3]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 35 [paras[0], 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 36 [paras[0], 1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 37 [paras[0], 2]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 38 [paras[1], 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 39 [paras[1], 1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 40 [paras[1], 2]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 41 [detachedPara1, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 42 [detachedPara1, 1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 43 [testDiv, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 44 [testDiv, 3]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 45 [document, -1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 46 [document, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 47 [document, 1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 48 [document, 2]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 49 [document, 3]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 50 [comment, -1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 51 [comment, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 52 [comment, 4]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 53 [comment, 96]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 54 [foreignDoc, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 55 [foreignDoc, 1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 56 [foreignComment, 2]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 57 [foreignTextNode, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 58 [foreignTextNode, 36]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 59 [xmlDoc, -1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 60 [xmlDoc, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 61 [xmlDoc, 1]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 62 [xmlDoc, 5]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 63 [xmlComment, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 64 [xmlComment, 4]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 65 [processingInstruction, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 66 [processingInstruction, 5]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 67 [processingInstruction, 9]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 68 [detachedTextNode, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 69 [detachedTextNode, 8]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 75 [detachedComment, 3]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 76 [detachedComment, 5]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 80 [docfrag, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 24 [document.documentElement, -1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 25 [document.documentElement, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 26 [document.documentElement, 1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 27 [document.documentElement, 2]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 28 [document.documentElement, 7]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 29 [document.head, 1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 30 [document.body, 3]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 35 [paras[0], 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 36 [paras[0], 1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 37 [paras[0], 2]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 38 [paras[1], 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 39 [paras[1], 1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 40 [paras[1], 2]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 41 [detachedPara1, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 42 [detachedPara1, 1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 43 [testDiv, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 44 [testDiv, 3]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 45 [document, -1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 46 [document, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 47 [document, 1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 48 [document, 2]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 49 [document, 3]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 50 [comment, -1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 51 [comment, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 52 [comment, 4]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 53 [comment, 96]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 54 [foreignDoc, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 55 [foreignDoc, 1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 56 [foreignComment, 2]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 57 [foreignTextNode, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 58 [foreignTextNode, 36]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 59 [xmlDoc, -1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 60 [xmlDoc, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 61 [xmlDoc, 1]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 62 [xmlDoc, 5]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 63 [xmlComment, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 64 [xmlComment, 4]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 65 [processingInstruction, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 66 [processingInstruction, 5]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 67 [processingInstruction, 9]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 68 [detachedTextNode, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 69 [detachedTextNode, 8]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 75 [detachedComment, 3]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 76 [detachedComment, 5]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 80 [docfrag, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 15 [paras[1].firstChild, 65535]
+FAIL setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 16 [detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 17 [detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+FAIL setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 18 [detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 24 [document.documentElement, -1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 25 [document.documentElement, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 26 [document.documentElement, 1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 27 [document.documentElement, 2]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 28 [document.documentElement, 7]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 29 [document.head, 1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 30 [document.body, 3]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 35 [paras[0], 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 36 [paras[0], 1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 37 [paras[0], 2]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 38 [paras[1], 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 39 [paras[1], 1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 40 [paras[1], 2]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 41 [detachedPara1, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 42 [detachedPara1, 1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 43 [testDiv, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 44 [testDiv, 3]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 45 [document, -1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 46 [document, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 47 [document, 1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 48 [document, 2]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 49 [document, 3]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 50 [comment, -1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 51 [comment, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 52 [comment, 4]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 53 [comment, 96]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 54 [foreignDoc, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 55 [foreignDoc, 1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 56 [foreignComment, 2]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 57 [foreignTextNode, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 58 [foreignTextNode, 36]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 59 [xmlDoc, -1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 60 [xmlDoc, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 61 [xmlDoc, 1]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 62 [xmlDoc, 5]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 63 [xmlComment, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 64 [xmlComment, 4]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 65 [processingInstruction, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 66 [processingInstruction, 5]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 67 [processingInstruction, 9]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 68 [detachedTextNode, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 69 [detachedTextNode, 8]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 75 [detachedComment, 3]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 76 [detachedComment, 5]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 80 [docfrag, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 15 [paras[1].firstChild, 65535]
+FAIL setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 16 [detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 17 [detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+FAIL setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 18 [detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 24 [document.documentElement, -1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 25 [document.documentElement, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 26 [document.documentElement, 1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 27 [document.documentElement, 2]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 28 [document.documentElement, 7]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 29 [document.head, 1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 30 [document.body, 3]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 35 [paras[0], 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 36 [paras[0], 1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 37 [paras[0], 2]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 38 [paras[1], 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 39 [paras[1], 1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 40 [paras[1], 2]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 41 [detachedPara1, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 42 [detachedPara1, 1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 43 [testDiv, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 44 [testDiv, 3]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 45 [document, -1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 46 [document, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 47 [document, 1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 48 [document, 2]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 49 [document, 3]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 50 [comment, -1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 51 [comment, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 52 [comment, 4]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 53 [comment, 96]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 54 [foreignDoc, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 55 [foreignDoc, 1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 56 [foreignComment, 2]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 57 [foreignTextNode, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 58 [foreignTextNode, 36]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 59 [xmlDoc, -1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 60 [xmlDoc, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 61 [xmlDoc, 1]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 62 [xmlDoc, 5]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 63 [xmlComment, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 64 [xmlComment, 4]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 65 [processingInstruction, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 66 [processingInstruction, 5]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 67 [processingInstruction, 9]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 68 [detachedTextNode, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 69 [detachedTextNode, 8]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 75 [detachedComment, 3]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 76 [detachedComment, 5]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 80 [docfrag, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 24 [document.documentElement, -1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 25 [document.documentElement, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 26 [document.documentElement, 1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 27 [document.documentElement, 2]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 28 [document.documentElement, 7]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 29 [document.head, 1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 30 [document.body, 3]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 35 [paras[0], 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 36 [paras[0], 1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 37 [paras[0], 2]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 38 [paras[1], 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 39 [paras[1], 1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 40 [paras[1], 2]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 41 [detachedPara1, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 42 [detachedPara1, 1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 43 [testDiv, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 44 [testDiv, 3]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 45 [document, -1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 46 [document, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 47 [document, 1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 48 [document, 2]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 49 [document, 3]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 50 [comment, -1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 51 [comment, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 52 [comment, 4]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 53 [comment, 96]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 54 [foreignDoc, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 55 [foreignDoc, 1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 56 [foreignComment, 2]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 57 [foreignTextNode, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 58 [foreignTextNode, 36]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 59 [xmlDoc, -1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 60 [xmlDoc, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 61 [xmlDoc, 1]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 62 [xmlDoc, 5]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 63 [xmlComment, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 64 [xmlComment, 4]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 65 [processingInstruction, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 66 [processingInstruction, 5]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 67 [processingInstruction, 9]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 68 [detachedTextNode, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 69 [detachedTextNode, 8]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 75 [detachedComment, 3]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 76 [detachedComment, 5]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 80 [docfrag, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 24 [document.documentElement, -1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 25 [document.documentElement, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 26 [document.documentElement, 1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 27 [document.documentElement, 2]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 28 [document.documentElement, 7]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 29 [document.head, 1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 30 [document.body, 3]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 35 [paras[0], 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 36 [paras[0], 1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 37 [paras[0], 2]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 38 [paras[1], 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 39 [paras[1], 1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 40 [paras[1], 2]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 41 [detachedPara1, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 42 [detachedPara1, 1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 43 [testDiv, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 44 [testDiv, 3]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 45 [document, -1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 46 [document, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 47 [document, 1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 48 [document, 2]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 49 [document, 3]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 50 [comment, -1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 51 [comment, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 52 [comment, 4]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 53 [comment, 96]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 54 [foreignDoc, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 55 [foreignDoc, 1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 56 [foreignComment, 2]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 57 [foreignTextNode, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 58 [foreignTextNode, 36]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 59 [xmlDoc, -1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 60 [xmlDoc, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 61 [xmlDoc, 1]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 62 [xmlDoc, 5]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 63 [xmlComment, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 64 [xmlComment, 4]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 65 [processingInstruction, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 66 [processingInstruction, 5]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 67 [processingInstruction, 9]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 68 [detachedTextNode, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 69 [detachedTextNode, 8]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 75 [detachedComment, 3]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 76 [detachedComment, 5]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 80 [docfrag, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 24 [document.documentElement, -1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 25 [document.documentElement, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 26 [document.documentElement, 1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 27 [document.documentElement, 2]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 28 [document.documentElement, 7]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 29 [document.head, 1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 30 [document.body, 3]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 35 [paras[0], 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 36 [paras[0], 1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 37 [paras[0], 2]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 38 [paras[1], 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 39 [paras[1], 1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 40 [paras[1], 2]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 41 [detachedPara1, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 42 [detachedPara1, 1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 43 [testDiv, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 44 [testDiv, 3]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 45 [document, -1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 46 [document, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 47 [document, 1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 48 [document, 2]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 49 [document, 3]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 50 [comment, -1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 51 [comment, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 52 [comment, 4]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 53 [comment, 96]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 54 [foreignDoc, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 55 [foreignDoc, 1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 56 [foreignComment, 2]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 57 [foreignTextNode, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 58 [foreignTextNode, 36]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 59 [xmlDoc, -1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 60 [xmlDoc, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 61 [xmlDoc, 1]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 62 [xmlDoc, 5]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 63 [xmlComment, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 64 [xmlComment, 4]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 65 [processingInstruction, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 66 [processingInstruction, 5]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 67 [processingInstruction, 9]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 68 [detachedTextNode, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 69 [detachedTextNode, 8]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 75 [detachedComment, 3]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 76 [detachedComment, 5]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 80 [docfrag, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 10 [document.documentElement, 0, document.documentElement, 1], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 24 [document.documentElement, -1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 25 [document.documentElement, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 26 [document.documentElement, 1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 27 [document.documentElement, 2]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 28 [document.documentElement, 7]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 29 [document.head, 1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 30 [document.body, 3]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 35 [paras[0], 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 36 [paras[0], 1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 37 [paras[0], 2]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 38 [paras[1], 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 39 [paras[1], 1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 40 [paras[1], 2]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 41 [detachedPara1, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 42 [detachedPara1, 1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 43 [testDiv, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 44 [testDiv, 3]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 45 [document, -1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 46 [document, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 47 [document, 1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 48 [document, 2]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 49 [document, 3]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 50 [comment, -1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 51 [comment, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 52 [comment, 4]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 53 [comment, 96]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 54 [foreignDoc, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 55 [foreignDoc, 1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 56 [foreignComment, 2]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 57 [foreignTextNode, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 58 [foreignTextNode, 36]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 59 [xmlDoc, -1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 60 [xmlDoc, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 61 [xmlDoc, 1]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 62 [xmlDoc, 5]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 63 [xmlComment, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 64 [xmlComment, 4]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 65 [processingInstruction, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 66 [processingInstruction, 5]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 67 [processingInstruction, 9]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 68 [detachedTextNode, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 69 [detachedTextNode, 8]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 75 [detachedComment, 3]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 76 [detachedComment, 5]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 80 [docfrag, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 11 [document.documentElement, 0, document.documentElement, 2], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 24 [document.documentElement, -1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 25 [document.documentElement, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 26 [document.documentElement, 1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 27 [document.documentElement, 2]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 28 [document.documentElement, 7]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 29 [document.head, 1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 30 [document.body, 3]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 35 [paras[0], 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 36 [paras[0], 1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 37 [paras[0], 2]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 38 [paras[1], 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 39 [paras[1], 1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 40 [paras[1], 2]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 41 [detachedPara1, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 42 [detachedPara1, 1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 43 [testDiv, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 44 [testDiv, 3]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 45 [document, -1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 46 [document, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 47 [document, 1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 48 [document, 2]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 49 [document, 3]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 50 [comment, -1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 51 [comment, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 52 [comment, 4]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 53 [comment, 96]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 54 [foreignDoc, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 55 [foreignDoc, 1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 56 [foreignComment, 2]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 57 [foreignTextNode, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 58 [foreignTextNode, 36]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 59 [xmlDoc, -1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 60 [xmlDoc, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 61 [xmlDoc, 1]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 62 [xmlDoc, 5]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 63 [xmlComment, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 64 [xmlComment, 4]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 65 [processingInstruction, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 66 [processingInstruction, 5]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 67 [processingInstruction, 9]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 68 [detachedTextNode, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 69 [detachedTextNode, 8]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 75 [detachedComment, 3]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 76 [detachedComment, 5]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 80 [docfrag, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 12 [document.documentElement, 1, document.documentElement, 2], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 24 [document.documentElement, -1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 25 [document.documentElement, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 26 [document.documentElement, 1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 27 [document.documentElement, 2]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 28 [document.documentElement, 7]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 29 [document.head, 1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 30 [document.body, 3]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 35 [paras[0], 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 36 [paras[0], 1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 37 [paras[0], 2]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 38 [paras[1], 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 39 [paras[1], 1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 40 [paras[1], 2]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 41 [detachedPara1, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 42 [detachedPara1, 1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 43 [testDiv, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 44 [testDiv, 3]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 45 [document, -1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 46 [document, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 47 [document, 1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 48 [document, 2]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 49 [document, 3]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 50 [comment, -1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 51 [comment, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 52 [comment, 4]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 53 [comment, 96]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 54 [foreignDoc, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 55 [foreignDoc, 1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 56 [foreignComment, 2]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 57 [foreignTextNode, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 58 [foreignTextNode, 36]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 59 [xmlDoc, -1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 60 [xmlDoc, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 61 [xmlDoc, 1]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 62 [xmlDoc, 5]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 63 [xmlComment, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 64 [xmlComment, 4]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 65 [processingInstruction, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 66 [processingInstruction, 5]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 67 [processingInstruction, 9]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 68 [detachedTextNode, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 69 [detachedTextNode, 8]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 75 [detachedComment, 3]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 76 [detachedComment, 5]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 80 [docfrag, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 13 [document.head, 1, document.head, 1], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 13 [document.head, 1, document.head, 1], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 13 [document.head, 1, document.head, 1], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 13 [document.head, 1, document.head, 1], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 13 [document.head, 1, document.head, 1], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 13 [document.head, 1, document.head, 1], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 24 [document.documentElement, -1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 25 [document.documentElement, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 26 [document.documentElement, 1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 27 [document.documentElement, 2]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 28 [document.documentElement, 7]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 29 [document.head, 1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 30 [document.body, 3]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 35 [paras[0], 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 36 [paras[0], 1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 37 [paras[0], 2]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 38 [paras[1], 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 39 [paras[1], 1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 40 [paras[1], 2]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 41 [detachedPara1, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 42 [detachedPara1, 1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 43 [testDiv, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 44 [testDiv, 3]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 45 [document, -1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 46 [document, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 47 [document, 1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 48 [document, 2]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 49 [document, 3]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 50 [comment, -1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 51 [comment, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 52 [comment, 4]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 53 [comment, 96]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 54 [foreignDoc, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 55 [foreignDoc, 1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 56 [foreignComment, 2]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 57 [foreignTextNode, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 58 [foreignTextNode, 36]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 59 [xmlDoc, -1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 60 [xmlDoc, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 61 [xmlDoc, 1]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 62 [xmlDoc, 5]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 63 [xmlComment, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 64 [xmlComment, 4]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 65 [processingInstruction, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 66 [processingInstruction, 5]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 67 [processingInstruction, 9]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 68 [detachedTextNode, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 69 [detachedTextNode, 8]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 75 [detachedComment, 3]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 76 [detachedComment, 5]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 80 [docfrag, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 14 [document.body, 4, document.body, 5], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 14 [document.body, 4, document.body, 5], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 14 [document.body, 4, document.body, 5], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 14 [document.body, 4, document.body, 5], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 14 [document.body, 4, document.body, 5], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 14 [document.body, 4, document.body, 5], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 24 [document.documentElement, -1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 25 [document.documentElement, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 26 [document.documentElement, 1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 27 [document.documentElement, 2]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 28 [document.documentElement, 7]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 29 [document.head, 1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 30 [document.body, 3]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 35 [paras[0], 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 36 [paras[0], 1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 37 [paras[0], 2]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 38 [paras[1], 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 39 [paras[1], 1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 40 [paras[1], 2]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 41 [detachedPara1, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 42 [detachedPara1, 1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 43 [testDiv, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 44 [testDiv, 3]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 45 [document, -1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 46 [document, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 47 [document, 1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 48 [document, 2]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 49 [document, 3]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 50 [comment, -1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 51 [comment, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 52 [comment, 4]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 53 [comment, 96]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 54 [foreignDoc, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 55 [foreignDoc, 1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 56 [foreignComment, 2]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 57 [foreignTextNode, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 58 [foreignTextNode, 36]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 59 [xmlDoc, -1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 60 [xmlDoc, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 61 [xmlDoc, 1]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 62 [xmlDoc, 5]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 63 [xmlComment, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 64 [xmlComment, 4]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 65 [processingInstruction, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 66 [processingInstruction, 5]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 67 [processingInstruction, 9]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 68 [detachedTextNode, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 69 [detachedTextNode, 8]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 75 [detachedComment, 3]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 76 [detachedComment, 5]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 80 [docfrag, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 24 [document.documentElement, -1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 25 [document.documentElement, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 26 [document.documentElement, 1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 27 [document.documentElement, 2]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 28 [document.documentElement, 7]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 29 [document.head, 1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 30 [document.body, 3]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 35 [paras[0], 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 36 [paras[0], 1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 37 [paras[0], 2]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 38 [paras[1], 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 39 [paras[1], 1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 40 [paras[1], 2]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 41 [detachedPara1, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 42 [detachedPara1, 1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 43 [testDiv, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 44 [testDiv, 3]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 45 [document, -1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 46 [document, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 47 [document, 1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 48 [document, 2]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 49 [document, 3]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 50 [comment, -1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 51 [comment, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 52 [comment, 4]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 53 [comment, 96]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 54 [foreignDoc, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 55 [foreignDoc, 1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 56 [foreignComment, 2]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 57 [foreignTextNode, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 58 [foreignTextNode, 36]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 59 [xmlDoc, -1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 60 [xmlDoc, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 61 [xmlDoc, 1]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 62 [xmlDoc, 5]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 63 [xmlComment, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 64 [xmlComment, 4]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 65 [processingInstruction, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 66 [processingInstruction, 5]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 67 [processingInstruction, 9]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 68 [detachedTextNode, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 69 [detachedTextNode, 8]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 75 [detachedComment, 3]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 76 [detachedComment, 5]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 80 [docfrag, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 16 [paras[0], 0, paras[0], 1], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 16 [paras[0], 0, paras[0], 1], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 16 [paras[0], 0, paras[0], 1], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 16 [paras[0], 0, paras[0], 1], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 16 [paras[0], 0, paras[0], 1], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 16 [paras[0], 0, paras[0], 1], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 15 [paras[1].firstChild, 65535]
+FAIL setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 16 [detachedPara1.firstChild, 0] WrongDocumentError: DOM Exception 4
+FAIL setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 17 [detachedPara1.firstChild, 1] WrongDocumentError: DOM Exception 4
+FAIL setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 18 [detachedPara1.firstChild, 8] WrongDocumentError: DOM Exception 4
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 24 [document.documentElement, -1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 25 [document.documentElement, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 26 [document.documentElement, 1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 27 [document.documentElement, 2]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 28 [document.documentElement, 7]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 29 [document.head, 1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 30 [document.body, 3]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 35 [paras[0], 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 36 [paras[0], 1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 37 [paras[0], 2]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 38 [paras[1], 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 39 [paras[1], 1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 40 [paras[1], 2]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 41 [detachedPara1, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 42 [detachedPara1, 1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 43 [testDiv, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 44 [testDiv, 3]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 45 [document, -1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 46 [document, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 47 [document, 1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 48 [document, 2]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 49 [document, 3]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 50 [comment, -1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 51 [comment, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 52 [comment, 4]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 53 [comment, 96]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 54 [foreignDoc, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 55 [foreignDoc, 1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 56 [foreignComment, 2]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 57 [foreignTextNode, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 58 [foreignTextNode, 36]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 59 [xmlDoc, -1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 60 [xmlDoc, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 61 [xmlDoc, 1]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 62 [xmlDoc, 5]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 63 [xmlComment, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 64 [xmlComment, 4]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 65 [processingInstruction, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 66 [processingInstruction, 5]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 67 [processingInstruction, 9]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 68 [detachedTextNode, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 69 [detachedTextNode, 8]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 75 [detachedComment, 3]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 76 [detachedComment, 5]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 80 [docfrag, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 17 [detachedPara1, 0, detachedPara1, 1], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 24 [document.documentElement, -1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 25 [document.documentElement, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 26 [document.documentElement, 1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 27 [document.documentElement, 2]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 28 [document.documentElement, 7]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 29 [document.head, 1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 30 [document.body, 3]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 35 [paras[0], 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 36 [paras[0], 1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 37 [paras[0], 2]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 38 [paras[1], 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 39 [paras[1], 1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 40 [paras[1], 2]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 41 [detachedPara1, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 42 [detachedPara1, 1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 43 [testDiv, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 44 [testDiv, 3]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 45 [document, -1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 46 [document, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 47 [document, 1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 48 [document, 2]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 49 [document, 3]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 50 [comment, -1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 51 [comment, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 52 [comment, 4]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 53 [comment, 96]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 54 [foreignDoc, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 55 [foreignDoc, 1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 56 [foreignComment, 2]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 57 [foreignTextNode, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 58 [foreignTextNode, 36]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 59 [xmlDoc, -1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 60 [xmlDoc, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 61 [xmlDoc, 1]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 62 [xmlDoc, 5]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 63 [xmlComment, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 64 [xmlComment, 4]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 65 [processingInstruction, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 66 [processingInstruction, 5]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 67 [processingInstruction, 9]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 68 [detachedTextNode, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 69 [detachedTextNode, 8]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 75 [detachedComment, 3]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 76 [detachedComment, 5]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 80 [docfrag, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 24 [document.documentElement, -1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 25 [document.documentElement, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 26 [document.documentElement, 1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 27 [document.documentElement, 2]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 28 [document.documentElement, 7]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 29 [document.head, 1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 30 [document.body, 3]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 35 [paras[0], 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 36 [paras[0], 1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 37 [paras[0], 2]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 38 [paras[1], 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 39 [paras[1], 1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 40 [paras[1], 2]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 41 [detachedPara1, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 42 [detachedPara1, 1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 43 [testDiv, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 44 [testDiv, 3]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 45 [document, -1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 46 [document, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 47 [document, 1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 48 [document, 2]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 49 [document, 3]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 50 [comment, -1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 51 [comment, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 52 [comment, 4]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 53 [comment, 96]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 54 [foreignDoc, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 55 [foreignDoc, 1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 56 [foreignComment, 2]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 57 [foreignTextNode, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 58 [foreignTextNode, 36]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 59 [xmlDoc, -1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 60 [xmlDoc, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 61 [xmlDoc, 1]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 62 [xmlDoc, 5]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 63 [xmlComment, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 64 [xmlComment, 4]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 65 [processingInstruction, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 66 [processingInstruction, 5]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 67 [processingInstruction, 9]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 68 [detachedTextNode, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 69 [detachedTextNode, 8]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 75 [detachedComment, 3]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 76 [detachedComment, 5]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 80 [docfrag, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 24 [document.documentElement, -1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 25 [document.documentElement, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 26 [document.documentElement, 1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 27 [document.documentElement, 2]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 28 [document.documentElement, 7]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 29 [document.head, 1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 30 [document.body, 3]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 35 [paras[0], 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 36 [paras[0], 1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 37 [paras[0], 2]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 38 [paras[1], 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 39 [paras[1], 1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 40 [paras[1], 2]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 41 [detachedPara1, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 42 [detachedPara1, 1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 43 [testDiv, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 44 [testDiv, 3]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 45 [document, -1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 46 [document, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 47 [document, 1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 48 [document, 2]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 49 [document, 3]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 50 [comment, -1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 51 [comment, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 52 [comment, 4]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 53 [comment, 96]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 54 [foreignDoc, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 55 [foreignDoc, 1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 56 [foreignComment, 2]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 57 [foreignTextNode, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 58 [foreignTextNode, 36]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 59 [xmlDoc, -1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 60 [xmlDoc, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 61 [xmlDoc, 1]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 62 [xmlDoc, 5]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 63 [xmlComment, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 64 [xmlComment, 4]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 65 [processingInstruction, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 66 [processingInstruction, 5]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 67 [processingInstruction, 9]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 68 [detachedTextNode, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 69 [detachedTextNode, 8]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 75 [detachedComment, 3]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 76 [detachedComment, 5]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 80 [docfrag, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 24 [document.documentElement, -1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 25 [document.documentElement, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 26 [document.documentElement, 1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 27 [document.documentElement, 2]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 28 [document.documentElement, 7]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 29 [document.head, 1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 30 [document.body, 3]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 35 [paras[0], 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 36 [paras[0], 1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 37 [paras[0], 2]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 38 [paras[1], 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 39 [paras[1], 1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 40 [paras[1], 2]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 41 [detachedPara1, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 42 [detachedPara1, 1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 43 [testDiv, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 44 [testDiv, 3]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 45 [document, -1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 46 [document, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 47 [document, 1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 48 [document, 2]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 49 [document, 3]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 50 [comment, -1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 51 [comment, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 52 [comment, 4]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 53 [comment, 96]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 54 [foreignDoc, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 55 [foreignDoc, 1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 56 [foreignComment, 2]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 57 [foreignTextNode, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 58 [foreignTextNode, 36]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 59 [xmlDoc, -1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 60 [xmlDoc, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 61 [xmlDoc, 1]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 62 [xmlDoc, 5]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 63 [xmlComment, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 64 [xmlComment, 4]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 65 [processingInstruction, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 66 [processingInstruction, 5]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 67 [processingInstruction, 9]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 68 [detachedTextNode, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 69 [detachedTextNode, 8]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 75 [detachedComment, 3]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 76 [detachedComment, 5]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 80 [docfrag, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 24 [document.documentElement, -1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 25 [document.documentElement, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 26 [document.documentElement, 1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 27 [document.documentElement, 2]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 28 [document.documentElement, 7]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 29 [document.head, 1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 30 [document.body, 3]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 35 [paras[0], 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 36 [paras[0], 1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 37 [paras[0], 2]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 38 [paras[1], 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 39 [paras[1], 1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 40 [paras[1], 2]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 41 [detachedPara1, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 42 [detachedPara1, 1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 43 [testDiv, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 44 [testDiv, 3]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 45 [document, -1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 46 [document, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 47 [document, 1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 48 [document, 2]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 49 [document, 3]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 50 [comment, -1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 51 [comment, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 52 [comment, 4]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 53 [comment, 96]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 54 [foreignDoc, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 55 [foreignDoc, 1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 56 [foreignComment, 2]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 57 [foreignTextNode, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 58 [foreignTextNode, 36]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 59 [xmlDoc, -1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 60 [xmlDoc, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 61 [xmlDoc, 1]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 62 [xmlDoc, 5]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 63 [xmlComment, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 64 [xmlComment, 4]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 65 [processingInstruction, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 66 [processingInstruction, 5]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 67 [processingInstruction, 9]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 68 [detachedTextNode, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 69 [detachedTextNode, 8]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 75 [detachedComment, 3]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 76 [detachedComment, 5]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 80 [docfrag, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 22 [testDiv, 2, paras[4], 1], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 22 [testDiv, 2, paras[4], 1], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 22 [testDiv, 2, paras[4], 1], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 22 [testDiv, 2, paras[4], 1], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 22 [testDiv, 2, paras[4], 1], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 22 [testDiv, 2, paras[4], 1], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 23 [document, 0, document, 1], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 23 [document, 0, document, 1], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 23 [document, 0, document, 1], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 23 [document, 0, document, 1], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 23 [document, 0, document, 1], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 23 [document, 0, document, 1], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 23 [document, 0, document, 1], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 23 [document, 0, document, 1], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 23 [document, 0, document, 1], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 23 [document, 0, document, 1], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 23 [document, 0, document, 1], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 23 [document, 0, document, 1], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 23 [document, 0, document, 1], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 23 [document, 0, document, 1], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 23 [document, 0, document, 1], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 23 [document, 0, document, 1], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 23 [document, 0, document, 1], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 23 [document, 0, document, 1], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 23 [document, 0, document, 1], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 23 [document, 0, document, 1], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 23 [document, 0, document, 1], point 24 [document.documentElement, -1]
+PASS setStart() with range 23 [document, 0, document, 1], point 25 [document.documentElement, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 26 [document.documentElement, 1]
+PASS setStart() with range 23 [document, 0, document, 1], point 27 [document.documentElement, 2]
+PASS setStart() with range 23 [document, 0, document, 1], point 28 [document.documentElement, 7]
+PASS setStart() with range 23 [document, 0, document, 1], point 29 [document.head, 1]
+PASS setStart() with range 23 [document, 0, document, 1], point 30 [document.body, 3]
+PASS setStart() with range 23 [document, 0, document, 1], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 23 [document, 0, document, 1], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 23 [document, 0, document, 1], point 35 [paras[0], 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 36 [paras[0], 1]
+PASS setStart() with range 23 [document, 0, document, 1], point 37 [paras[0], 2]
+PASS setStart() with range 23 [document, 0, document, 1], point 38 [paras[1], 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 39 [paras[1], 1]
+PASS setStart() with range 23 [document, 0, document, 1], point 40 [paras[1], 2]
+PASS setStart() with range 23 [document, 0, document, 1], point 41 [detachedPara1, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 42 [detachedPara1, 1]
+PASS setStart() with range 23 [document, 0, document, 1], point 43 [testDiv, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 44 [testDiv, 3]
+PASS setStart() with range 23 [document, 0, document, 1], point 45 [document, -1]
+PASS setStart() with range 23 [document, 0, document, 1], point 46 [document, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 47 [document, 1]
+PASS setStart() with range 23 [document, 0, document, 1], point 48 [document, 2]
+PASS setStart() with range 23 [document, 0, document, 1], point 49 [document, 3]
+PASS setStart() with range 23 [document, 0, document, 1], point 50 [comment, -1]
+PASS setStart() with range 23 [document, 0, document, 1], point 51 [comment, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 52 [comment, 4]
+PASS setStart() with range 23 [document, 0, document, 1], point 53 [comment, 96]
+PASS setStart() with range 23 [document, 0, document, 1], point 54 [foreignDoc, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 55 [foreignDoc, 1]
+PASS setStart() with range 23 [document, 0, document, 1], point 56 [foreignComment, 2]
+PASS setStart() with range 23 [document, 0, document, 1], point 57 [foreignTextNode, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 58 [foreignTextNode, 36]
+PASS setStart() with range 23 [document, 0, document, 1], point 59 [xmlDoc, -1]
+PASS setStart() with range 23 [document, 0, document, 1], point 60 [xmlDoc, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 61 [xmlDoc, 1]
+PASS setStart() with range 23 [document, 0, document, 1], point 62 [xmlDoc, 5]
+PASS setStart() with range 23 [document, 0, document, 1], point 63 [xmlComment, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 64 [xmlComment, 4]
+PASS setStart() with range 23 [document, 0, document, 1], point 65 [processingInstruction, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 66 [processingInstruction, 5]
+PASS setStart() with range 23 [document, 0, document, 1], point 67 [processingInstruction, 9]
+PASS setStart() with range 23 [document, 0, document, 1], point 68 [detachedTextNode, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 69 [detachedTextNode, 8]
+PASS setStart() with range 23 [document, 0, document, 1], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 23 [document, 0, document, 1], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 23 [document, 0, document, 1], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 23 [document, 0, document, 1], point 75 [detachedComment, 3]
+PASS setStart() with range 23 [document, 0, document, 1], point 76 [detachedComment, 5]
+PASS setStart() with range 23 [document, 0, document, 1], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 23 [document, 0, document, 1], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 23 [document, 0, document, 1], point 80 [docfrag, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 23 [document, 0, document, 1], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 23 [document, 0, document, 1], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 23 [document, 0, document, 1], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 23 [document, 0, document, 1], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 23 [document, 0, document, 1], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 23 [document, 0, document, 1], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 24 [document, 0, document, 2], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 24 [document, 0, document, 2], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 24 [document, 0, document, 2], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 24 [document, 0, document, 2], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 24 [document, 0, document, 2], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 24 [document, 0, document, 2], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 24 [document, 0, document, 2], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 24 [document, 0, document, 2], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 24 [document, 0, document, 2], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 24 [document, 0, document, 2], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 24 [document, 0, document, 2], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 24 [document, 0, document, 2], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 24 [document, 0, document, 2], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 24 [document, 0, document, 2], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 24 [document, 0, document, 2], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 24 [document, 0, document, 2], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 24 [document, 0, document, 2], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 24 [document, 0, document, 2], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 24 [document, 0, document, 2], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 24 [document, 0, document, 2], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 24 [document, 0, document, 2], point 24 [document.documentElement, -1]
+PASS setStart() with range 24 [document, 0, document, 2], point 25 [document.documentElement, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 26 [document.documentElement, 1]
+PASS setStart() with range 24 [document, 0, document, 2], point 27 [document.documentElement, 2]
+PASS setStart() with range 24 [document, 0, document, 2], point 28 [document.documentElement, 7]
+PASS setStart() with range 24 [document, 0, document, 2], point 29 [document.head, 1]
+PASS setStart() with range 24 [document, 0, document, 2], point 30 [document.body, 3]
+PASS setStart() with range 24 [document, 0, document, 2], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 24 [document, 0, document, 2], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 24 [document, 0, document, 2], point 35 [paras[0], 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 36 [paras[0], 1]
+PASS setStart() with range 24 [document, 0, document, 2], point 37 [paras[0], 2]
+PASS setStart() with range 24 [document, 0, document, 2], point 38 [paras[1], 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 39 [paras[1], 1]
+PASS setStart() with range 24 [document, 0, document, 2], point 40 [paras[1], 2]
+PASS setStart() with range 24 [document, 0, document, 2], point 41 [detachedPara1, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 42 [detachedPara1, 1]
+PASS setStart() with range 24 [document, 0, document, 2], point 43 [testDiv, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 44 [testDiv, 3]
+PASS setStart() with range 24 [document, 0, document, 2], point 45 [document, -1]
+PASS setStart() with range 24 [document, 0, document, 2], point 46 [document, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 47 [document, 1]
+PASS setStart() with range 24 [document, 0, document, 2], point 48 [document, 2]
+PASS setStart() with range 24 [document, 0, document, 2], point 49 [document, 3]
+PASS setStart() with range 24 [document, 0, document, 2], point 50 [comment, -1]
+PASS setStart() with range 24 [document, 0, document, 2], point 51 [comment, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 52 [comment, 4]
+PASS setStart() with range 24 [document, 0, document, 2], point 53 [comment, 96]
+PASS setStart() with range 24 [document, 0, document, 2], point 54 [foreignDoc, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 55 [foreignDoc, 1]
+PASS setStart() with range 24 [document, 0, document, 2], point 56 [foreignComment, 2]
+PASS setStart() with range 24 [document, 0, document, 2], point 57 [foreignTextNode, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 58 [foreignTextNode, 36]
+PASS setStart() with range 24 [document, 0, document, 2], point 59 [xmlDoc, -1]
+PASS setStart() with range 24 [document, 0, document, 2], point 60 [xmlDoc, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 61 [xmlDoc, 1]
+PASS setStart() with range 24 [document, 0, document, 2], point 62 [xmlDoc, 5]
+PASS setStart() with range 24 [document, 0, document, 2], point 63 [xmlComment, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 64 [xmlComment, 4]
+PASS setStart() with range 24 [document, 0, document, 2], point 65 [processingInstruction, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 66 [processingInstruction, 5]
+PASS setStart() with range 24 [document, 0, document, 2], point 67 [processingInstruction, 9]
+PASS setStart() with range 24 [document, 0, document, 2], point 68 [detachedTextNode, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 69 [detachedTextNode, 8]
+PASS setStart() with range 24 [document, 0, document, 2], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 24 [document, 0, document, 2], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 24 [document, 0, document, 2], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 24 [document, 0, document, 2], point 75 [detachedComment, 3]
+PASS setStart() with range 24 [document, 0, document, 2], point 76 [detachedComment, 5]
+PASS setStart() with range 24 [document, 0, document, 2], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 24 [document, 0, document, 2], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 24 [document, 0, document, 2], point 80 [docfrag, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 24 [document, 0, document, 2], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 24 [document, 0, document, 2], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 24 [document, 0, document, 2], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 24 [document, 0, document, 2], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 24 [document, 0, document, 2], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 24 [document, 0, document, 2], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 25 [comment, 2, comment, 3], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 24 [document.documentElement, -1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 25 [document.documentElement, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 26 [document.documentElement, 1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 27 [document.documentElement, 2]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 28 [document.documentElement, 7]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 29 [document.head, 1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 30 [document.body, 3]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 35 [paras[0], 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 36 [paras[0], 1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 37 [paras[0], 2]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 38 [paras[1], 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 39 [paras[1], 1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 40 [paras[1], 2]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 41 [detachedPara1, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 42 [detachedPara1, 1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 43 [testDiv, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 44 [testDiv, 3]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 45 [document, -1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 46 [document, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 47 [document, 1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 48 [document, 2]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 49 [document, 3]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 50 [comment, -1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 51 [comment, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 52 [comment, 4]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 53 [comment, 96]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 54 [foreignDoc, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 55 [foreignDoc, 1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 56 [foreignComment, 2]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 57 [foreignTextNode, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 58 [foreignTextNode, 36]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 59 [xmlDoc, -1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 60 [xmlDoc, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 61 [xmlDoc, 1]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 62 [xmlDoc, 5]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 63 [xmlComment, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 64 [xmlComment, 4]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 65 [processingInstruction, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 66 [processingInstruction, 5]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 67 [processingInstruction, 9]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 68 [detachedTextNode, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 69 [detachedTextNode, 8]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 75 [detachedComment, 3]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 76 [detachedComment, 5]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 80 [docfrag, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 25 [comment, 2, comment, 3], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 25 [comment, 2, comment, 3], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 25 [comment, 2, comment, 3], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 25 [comment, 2, comment, 3], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 25 [comment, 2, comment, 3], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 25 [comment, 2, comment, 3], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 24 [document.documentElement, -1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 25 [document.documentElement, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 26 [document.documentElement, 1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 27 [document.documentElement, 2]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 28 [document.documentElement, 7]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 29 [document.head, 1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 30 [document.body, 3]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 35 [paras[0], 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 36 [paras[0], 1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 37 [paras[0], 2]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 38 [paras[1], 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 39 [paras[1], 1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 40 [paras[1], 2]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 41 [detachedPara1, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 42 [detachedPara1, 1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 43 [testDiv, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 44 [testDiv, 3]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 45 [document, -1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 46 [document, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 47 [document, 1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 48 [document, 2]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 49 [document, 3]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 50 [comment, -1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 51 [comment, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 52 [comment, 4]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 53 [comment, 96]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 54 [foreignDoc, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 55 [foreignDoc, 1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 56 [foreignComment, 2]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 57 [foreignTextNode, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 58 [foreignTextNode, 36]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 59 [xmlDoc, -1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 60 [xmlDoc, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 61 [xmlDoc, 1]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 62 [xmlDoc, 5]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 63 [xmlComment, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 64 [xmlComment, 4]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 65 [processingInstruction, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 66 [processingInstruction, 5]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 67 [processingInstruction, 9]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 68 [detachedTextNode, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 69 [detachedTextNode, 8]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 75 [detachedComment, 3]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 76 [detachedComment, 5]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 80 [docfrag, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 26 [testDiv, 0, comment, 5], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 26 [testDiv, 0, comment, 5], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 26 [testDiv, 0, comment, 5], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 26 [testDiv, 0, comment, 5], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 26 [testDiv, 0, comment, 5], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 26 [testDiv, 0, comment, 5], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 24 [document.documentElement, -1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 25 [document.documentElement, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 26 [document.documentElement, 1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 27 [document.documentElement, 2]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 28 [document.documentElement, 7]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 29 [document.head, 1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 30 [document.body, 3]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 35 [paras[0], 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 36 [paras[0], 1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 37 [paras[0], 2]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 38 [paras[1], 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 39 [paras[1], 1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 40 [paras[1], 2]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 41 [detachedPara1, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 42 [detachedPara1, 1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 43 [testDiv, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 44 [testDiv, 3]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 45 [document, -1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 46 [document, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 47 [document, 1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 48 [document, 2]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 49 [document, 3]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 50 [comment, -1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 51 [comment, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 52 [comment, 4]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 53 [comment, 96]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 54 [foreignDoc, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 55 [foreignDoc, 1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 56 [foreignComment, 2]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 57 [foreignTextNode, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 58 [foreignTextNode, 36]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 59 [xmlDoc, -1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 60 [xmlDoc, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 61 [xmlDoc, 1]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 62 [xmlDoc, 5]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 63 [xmlComment, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 64 [xmlComment, 4]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 65 [processingInstruction, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 66 [processingInstruction, 5]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 67 [processingInstruction, 9]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 68 [detachedTextNode, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 69 [detachedTextNode, 8]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 75 [detachedComment, 3]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 76 [detachedComment, 5]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 80 [docfrag, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 27 [foreignDoc, 1, foreignComment, 2], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 24 [document.documentElement, -1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 25 [document.documentElement, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 26 [document.documentElement, 1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 27 [document.documentElement, 2]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 28 [document.documentElement, 7]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 29 [document.head, 1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 30 [document.body, 3]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 35 [paras[0], 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 36 [paras[0], 1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 37 [paras[0], 2]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 38 [paras[1], 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 39 [paras[1], 1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 40 [paras[1], 2]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 41 [detachedPara1, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 42 [detachedPara1, 1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 43 [testDiv, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 44 [testDiv, 3]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 45 [document, -1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 46 [document, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 47 [document, 1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 48 [document, 2]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 49 [document, 3]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 50 [comment, -1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 51 [comment, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 52 [comment, 4]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 53 [comment, 96]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 54 [foreignDoc, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 55 [foreignDoc, 1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 56 [foreignComment, 2]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 57 [foreignTextNode, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 58 [foreignTextNode, 36]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 59 [xmlDoc, -1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 60 [xmlDoc, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 61 [xmlDoc, 1]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 62 [xmlDoc, 5]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 63 [xmlComment, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 64 [xmlComment, 4]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 65 [processingInstruction, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 66 [processingInstruction, 5]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 67 [processingInstruction, 9]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 68 [detachedTextNode, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 69 [detachedTextNode, 8]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 75 [detachedComment, 3]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 76 [detachedComment, 5]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 80 [docfrag, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 24 [document.documentElement, -1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 25 [document.documentElement, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 26 [document.documentElement, 1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 27 [document.documentElement, 2]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 28 [document.documentElement, 7]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 29 [document.head, 1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 30 [document.body, 3]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 35 [paras[0], 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 36 [paras[0], 1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 37 [paras[0], 2]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 38 [paras[1], 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 39 [paras[1], 1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 40 [paras[1], 2]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 41 [detachedPara1, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 42 [detachedPara1, 1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 43 [testDiv, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 44 [testDiv, 3]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 45 [document, -1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 46 [document, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 47 [document, 1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 48 [document, 2]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 49 [document, 3]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 50 [comment, -1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 51 [comment, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 52 [comment, 4]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 53 [comment, 96]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 54 [foreignDoc, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 55 [foreignDoc, 1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 56 [foreignComment, 2]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 57 [foreignTextNode, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 58 [foreignTextNode, 36]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 59 [xmlDoc, -1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 60 [xmlDoc, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 61 [xmlDoc, 1]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 62 [xmlDoc, 5]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 63 [xmlComment, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 64 [xmlComment, 4]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 65 [processingInstruction, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 66 [processingInstruction, 5]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 67 [processingInstruction, 9]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 68 [detachedTextNode, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 69 [detachedTextNode, 8]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 75 [detachedComment, 3]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 76 [detachedComment, 5]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 80 [docfrag, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 29 [xmlDoc, 1, xmlComment, 0], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 24 [document.documentElement, -1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 25 [document.documentElement, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 26 [document.documentElement, 1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 27 [document.documentElement, 2]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 28 [document.documentElement, 7]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 29 [document.head, 1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 30 [document.body, 3]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 35 [paras[0], 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 36 [paras[0], 1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 37 [paras[0], 2]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 38 [paras[1], 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 39 [paras[1], 1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 40 [paras[1], 2]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 41 [detachedPara1, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 42 [detachedPara1, 1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 43 [testDiv, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 44 [testDiv, 3]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 45 [document, -1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 46 [document, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 47 [document, 1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 48 [document, 2]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 49 [document, 3]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 50 [comment, -1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 51 [comment, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 52 [comment, 4]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 53 [comment, 96]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 54 [foreignDoc, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 55 [foreignDoc, 1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 56 [foreignComment, 2]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 57 [foreignTextNode, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 58 [foreignTextNode, 36]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 59 [xmlDoc, -1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 60 [xmlDoc, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 61 [xmlDoc, 1]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 62 [xmlDoc, 5]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 63 [xmlComment, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 64 [xmlComment, 4]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 65 [processingInstruction, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 66 [processingInstruction, 5]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 67 [processingInstruction, 9]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 68 [detachedTextNode, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 69 [detachedTextNode, 8]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 75 [detachedComment, 3]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 76 [detachedComment, 5]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 80 [docfrag, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 24 [document.documentElement, -1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 25 [document.documentElement, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 26 [document.documentElement, 1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 27 [document.documentElement, 2]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 28 [document.documentElement, 7]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 29 [document.head, 1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 30 [document.body, 3]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 35 [paras[0], 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 36 [paras[0], 1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 37 [paras[0], 2]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 38 [paras[1], 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 39 [paras[1], 1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 40 [paras[1], 2]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 41 [detachedPara1, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 42 [detachedPara1, 1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 43 [testDiv, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 44 [testDiv, 3]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 45 [document, -1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 46 [document, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 47 [document, 1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 48 [document, 2]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 49 [document, 3]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 50 [comment, -1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 51 [comment, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 52 [comment, 4]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 53 [comment, 96]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 54 [foreignDoc, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 55 [foreignDoc, 1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 56 [foreignComment, 2]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 57 [foreignTextNode, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 58 [foreignTextNode, 36]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 59 [xmlDoc, -1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 60 [xmlDoc, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 61 [xmlDoc, 1]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 62 [xmlDoc, 5]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 63 [xmlComment, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 64 [xmlComment, 4]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 65 [processingInstruction, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 66 [processingInstruction, 5]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 67 [processingInstruction, 9]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 68 [detachedTextNode, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 69 [detachedTextNode, 8]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 75 [detachedComment, 3]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 76 [detachedComment, 5]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 80 [docfrag, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 24 [document.documentElement, -1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 25 [document.documentElement, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 26 [document.documentElement, 1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 27 [document.documentElement, 2]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 28 [document.documentElement, 7]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 29 [document.head, 1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 30 [document.body, 3]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 35 [paras[0], 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 36 [paras[0], 1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 37 [paras[0], 2]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 38 [paras[1], 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 39 [paras[1], 1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 40 [paras[1], 2]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 41 [detachedPara1, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 42 [detachedPara1, 1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 43 [testDiv, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 44 [testDiv, 3]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 45 [document, -1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 46 [document, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 47 [document, 1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 48 [document, 2]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 49 [document, 3]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 50 [comment, -1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 51 [comment, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 52 [comment, 4]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 53 [comment, 96]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 54 [foreignDoc, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 55 [foreignDoc, 1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 56 [foreignComment, 2]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 57 [foreignTextNode, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 58 [foreignTextNode, 36]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 59 [xmlDoc, -1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 60 [xmlDoc, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 61 [xmlDoc, 1]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 62 [xmlDoc, 5]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 63 [xmlComment, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 64 [xmlComment, 4]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 65 [processingInstruction, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 66 [processingInstruction, 5]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 67 [processingInstruction, 9]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 68 [detachedTextNode, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 69 [detachedTextNode, 8]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 75 [detachedComment, 3]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 76 [detachedComment, 5]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 80 [docfrag, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 24 [document.documentElement, -1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 25 [document.documentElement, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 26 [document.documentElement, 1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 27 [document.documentElement, 2]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 28 [document.documentElement, 7]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 29 [document.head, 1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 30 [document.body, 3]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 35 [paras[0], 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 36 [paras[0], 1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 37 [paras[0], 2]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 38 [paras[1], 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 39 [paras[1], 1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 40 [paras[1], 2]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 41 [detachedPara1, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 42 [detachedPara1, 1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 43 [testDiv, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 44 [testDiv, 3]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 45 [document, -1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 46 [document, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 47 [document, 1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 48 [document, 2]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 49 [document, 3]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 50 [comment, -1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 51 [comment, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 52 [comment, 4]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 53 [comment, 96]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 54 [foreignDoc, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 55 [foreignDoc, 1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 56 [foreignComment, 2]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 57 [foreignTextNode, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 58 [foreignTextNode, 36]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 59 [xmlDoc, -1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 60 [xmlDoc, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 61 [xmlDoc, 1]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 62 [xmlDoc, 5]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 63 [xmlComment, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 64 [xmlComment, 4]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 65 [processingInstruction, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 66 [processingInstruction, 5]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 67 [processingInstruction, 9]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 68 [detachedTextNode, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 69 [detachedTextNode, 8]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 75 [detachedComment, 3]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 76 [detachedComment, 5]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 80 [docfrag, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 33 [detachedComment, 3, detachedComment, 4], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 24 [document.documentElement, -1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 25 [document.documentElement, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 26 [document.documentElement, 1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 27 [document.documentElement, 2]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 28 [document.documentElement, 7]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 29 [document.head, 1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 30 [document.body, 3]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 35 [paras[0], 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 36 [paras[0], 1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 37 [paras[0], 2]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 38 [paras[1], 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 39 [paras[1], 1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 40 [paras[1], 2]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 41 [detachedPara1, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 42 [detachedPara1, 1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 43 [testDiv, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 44 [testDiv, 3]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 45 [document, -1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 46 [document, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 47 [document, 1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 48 [document, 2]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 49 [document, 3]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 50 [comment, -1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 51 [comment, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 52 [comment, 4]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 53 [comment, 96]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 54 [foreignDoc, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 55 [foreignDoc, 1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 56 [foreignComment, 2]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 57 [foreignTextNode, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 58 [foreignTextNode, 36]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 59 [xmlDoc, -1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 60 [xmlDoc, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 61 [xmlDoc, 1]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 62 [xmlDoc, 5]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 63 [xmlComment, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 64 [xmlComment, 4]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 65 [processingInstruction, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 66 [processingInstruction, 5]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 67 [processingInstruction, 9]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 68 [detachedTextNode, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 69 [detachedTextNode, 8]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 75 [detachedComment, 3]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 76 [detachedComment, 5]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 80 [docfrag, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 24 [document.documentElement, -1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 25 [document.documentElement, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 26 [document.documentElement, 1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 27 [document.documentElement, 2]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 28 [document.documentElement, 7]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 29 [document.head, 1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 30 [document.body, 3]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 35 [paras[0], 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 36 [paras[0], 1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 37 [paras[0], 2]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 38 [paras[1], 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 39 [paras[1], 1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 40 [paras[1], 2]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 41 [detachedPara1, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 42 [detachedPara1, 1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 43 [testDiv, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 44 [testDiv, 3]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 45 [document, -1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 46 [document, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 47 [document, 1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 48 [document, 2]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 49 [document, 3]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 50 [comment, -1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 51 [comment, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 52 [comment, 4]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 53 [comment, 96]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 54 [foreignDoc, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 55 [foreignDoc, 1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 56 [foreignComment, 2]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 57 [foreignTextNode, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 58 [foreignTextNode, 36]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 59 [xmlDoc, -1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 60 [xmlDoc, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 61 [xmlDoc, 1]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 62 [xmlDoc, 5]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 63 [xmlComment, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 64 [xmlComment, 4]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 65 [processingInstruction, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 66 [processingInstruction, 5]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 67 [processingInstruction, 9]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 68 [detachedTextNode, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 69 [detachedTextNode, 8]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 75 [detachedComment, 3]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 76 [detachedComment, 5]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 80 [docfrag, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 24 [document.documentElement, -1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 25 [document.documentElement, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 26 [document.documentElement, 1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 27 [document.documentElement, 2]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 28 [document.documentElement, 7]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 29 [document.head, 1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 30 [document.body, 3]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 35 [paras[0], 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 36 [paras[0], 1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 37 [paras[0], 2]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 38 [paras[1], 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 39 [paras[1], 1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 40 [paras[1], 2]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 41 [detachedPara1, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 42 [detachedPara1, 1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 43 [testDiv, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 44 [testDiv, 3]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 45 [document, -1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 46 [document, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 47 [document, 1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 48 [document, 2]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 49 [document, 3]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 50 [comment, -1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 51 [comment, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 52 [comment, 4]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 53 [comment, 96]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 54 [foreignDoc, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 55 [foreignDoc, 1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 56 [foreignComment, 2]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 57 [foreignTextNode, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 58 [foreignTextNode, 36]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 59 [xmlDoc, -1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 60 [xmlDoc, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 61 [xmlDoc, 1]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 62 [xmlDoc, 5]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 63 [xmlComment, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 64 [xmlComment, 4]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 65 [processingInstruction, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 66 [processingInstruction, 5]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 67 [processingInstruction, 9]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 68 [detachedTextNode, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 69 [detachedTextNode, 8]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 75 [detachedComment, 3]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 76 [detachedComment, 5]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 80 [docfrag, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 36 [docfrag, 0, docfrag, 0], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 36 [docfrag, 0, docfrag, 0], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 36 [docfrag, 0, docfrag, 0], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 36 [docfrag, 0, docfrag, 0], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 36 [docfrag, 0, docfrag, 0], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 36 [docfrag, 0, docfrag, 0], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 0 [paras[0].firstChild, -1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 1 [paras[0].firstChild, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 2 [paras[0].firstChild, 1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 3 [paras[0].firstChild, 2]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 4 [paras[0].firstChild, 8]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 5 [paras[0].firstChild, 9]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 6 [paras[0].firstChild, 10]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 7 [paras[0].firstChild, 65535]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 8 [paras[1].firstChild, -1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 9 [paras[1].firstChild, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 10 [paras[1].firstChild, 1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 11 [paras[1].firstChild, 2]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 12 [paras[1].firstChild, 8]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 13 [paras[1].firstChild, 9]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 14 [paras[1].firstChild, 10]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 15 [paras[1].firstChild, 65535]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 16 [detachedPara1.firstChild, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 17 [detachedPara1.firstChild, 1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 18 [detachedPara1.firstChild, 8]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 19 [detachedPara1.firstChild, 9]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 20 [foreignPara1.firstChild, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 21 [foreignPara1.firstChild, 1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 22 [foreignPara1.firstChild, 8]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 23 [foreignPara1.firstChild, 9]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 24 [document.documentElement, -1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 25 [document.documentElement, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 26 [document.documentElement, 1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 27 [document.documentElement, 2]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 28 [document.documentElement, 7]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 29 [document.head, 1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 30 [document.body, 3]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 31 [foreignDoc.documentElement, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 32 [foreignDoc.documentElement, 1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 33 [foreignDoc.head, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 34 [foreignDoc.body, 1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 35 [paras[0], 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 36 [paras[0], 1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 37 [paras[0], 2]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 38 [paras[1], 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 39 [paras[1], 1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 40 [paras[1], 2]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 41 [detachedPara1, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 42 [detachedPara1, 1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 43 [testDiv, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 44 [testDiv, 3]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 45 [document, -1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 46 [document, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 47 [document, 1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 48 [document, 2]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 49 [document, 3]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 50 [comment, -1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 51 [comment, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 52 [comment, 4]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 53 [comment, 96]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 54 [foreignDoc, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 55 [foreignDoc, 1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 56 [foreignComment, 2]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 57 [foreignTextNode, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 58 [foreignTextNode, 36]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 59 [xmlDoc, -1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 60 [xmlDoc, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 61 [xmlDoc, 1]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 62 [xmlDoc, 5]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 63 [xmlComment, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 64 [xmlComment, 4]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 65 [processingInstruction, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 66 [processingInstruction, 5]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 67 [processingInstruction, 9]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 68 [detachedTextNode, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 69 [detachedTextNode, 8]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 70 [detachedForeignTextNode, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 71 [detachedForeignTextNode, 8]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 72 [detachedXmlTextNode, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 73 [detachedXmlTextNode, 8]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 74 [detachedProcessingInstruction, 12]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 75 [detachedComment, 3]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 76 [detachedComment, 5]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 77 [detachedForeignComment, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 78 [detachedForeignComment, 4]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 79 [detachedXmlComment, 2]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 80 [docfrag, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 81 [foreignDocfrag, 0]
+PASS setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 82 [xmlDocfrag, 0]
+FAIL setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 83 [doctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 84 [doctype, -17] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 85 [doctype, 1] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 86 [foreignDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStart() with range 37 [processingInstruction, 0, processingInstruction, 4], point 87 [xmlDoctype, 0] assert_throws: setStart() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStart(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 24 [document.documentElement, -1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 25 [document.documentElement, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 26 [document.documentElement, 1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 27 [document.documentElement, 2]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 28 [document.documentElement, 7]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 29 [document.head, 1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 30 [document.body, 3]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 35 [paras[0], 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 36 [paras[0], 1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 37 [paras[0], 2]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 38 [paras[1], 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 39 [paras[1], 1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 40 [paras[1], 2]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 41 [detachedPara1, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 42 [detachedPara1, 1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 43 [testDiv, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 44 [testDiv, 3]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 45 [document, -1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 46 [document, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 47 [document, 1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 48 [document, 2]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 49 [document, 3]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 50 [comment, -1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 51 [comment, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 52 [comment, 4]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 53 [comment, 96]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 54 [foreignDoc, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 55 [foreignDoc, 1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 56 [foreignComment, 2]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 59 [xmlDoc, -1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 60 [xmlDoc, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 61 [xmlDoc, 1]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 62 [xmlDoc, 5]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 63 [xmlComment, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 64 [xmlComment, 4]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 65 [processingInstruction, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 66 [processingInstruction, 5]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 67 [processingInstruction, 9]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 75 [detachedComment, 3]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 76 [detachedComment, 5]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 80 [docfrag, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 24 [document.documentElement, -1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 25 [document.documentElement, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 26 [document.documentElement, 1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 27 [document.documentElement, 2]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 28 [document.documentElement, 7]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 29 [document.head, 1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 30 [document.body, 3]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 35 [paras[0], 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 36 [paras[0], 1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 37 [paras[0], 2]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 38 [paras[1], 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 39 [paras[1], 1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 40 [paras[1], 2]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 41 [detachedPara1, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 42 [detachedPara1, 1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 43 [testDiv, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 44 [testDiv, 3]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 45 [document, -1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 46 [document, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 47 [document, 1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 48 [document, 2]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 49 [document, 3]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 50 [comment, -1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 51 [comment, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 52 [comment, 4]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 53 [comment, 96]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 54 [foreignDoc, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 55 [foreignDoc, 1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 56 [foreignComment, 2]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 59 [xmlDoc, -1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 60 [xmlDoc, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 61 [xmlDoc, 1]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 62 [xmlDoc, 5]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 63 [xmlComment, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 64 [xmlComment, 4]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 65 [processingInstruction, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 66 [processingInstruction, 5]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 67 [processingInstruction, 9]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 75 [detachedComment, 3]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 76 [detachedComment, 5]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 80 [docfrag, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 24 [document.documentElement, -1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 25 [document.documentElement, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 26 [document.documentElement, 1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 27 [document.documentElement, 2]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 28 [document.documentElement, 7]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 29 [document.head, 1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 30 [document.body, 3]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 35 [paras[0], 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 36 [paras[0], 1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 37 [paras[0], 2]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 38 [paras[1], 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 39 [paras[1], 1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 40 [paras[1], 2]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 41 [detachedPara1, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 42 [detachedPara1, 1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 43 [testDiv, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 44 [testDiv, 3]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 45 [document, -1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 46 [document, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 47 [document, 1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 48 [document, 2]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 49 [document, 3]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 50 [comment, -1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 51 [comment, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 52 [comment, 4]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 53 [comment, 96]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 54 [foreignDoc, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 55 [foreignDoc, 1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 56 [foreignComment, 2]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 59 [xmlDoc, -1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 60 [xmlDoc, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 61 [xmlDoc, 1]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 62 [xmlDoc, 5]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 63 [xmlComment, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 64 [xmlComment, 4]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 65 [processingInstruction, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 66 [processingInstruction, 5]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 67 [processingInstruction, 9]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 75 [detachedComment, 3]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 76 [detachedComment, 5]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 80 [docfrag, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 24 [document.documentElement, -1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 25 [document.documentElement, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 26 [document.documentElement, 1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 27 [document.documentElement, 2]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 28 [document.documentElement, 7]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 29 [document.head, 1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 30 [document.body, 3]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 35 [paras[0], 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 36 [paras[0], 1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 37 [paras[0], 2]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 38 [paras[1], 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 39 [paras[1], 1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 40 [paras[1], 2]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 41 [detachedPara1, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 42 [detachedPara1, 1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 43 [testDiv, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 44 [testDiv, 3]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 45 [document, -1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 46 [document, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 47 [document, 1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 48 [document, 2]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 49 [document, 3]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 50 [comment, -1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 51 [comment, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 52 [comment, 4]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 53 [comment, 96]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 54 [foreignDoc, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 55 [foreignDoc, 1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 56 [foreignComment, 2]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 59 [xmlDoc, -1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 60 [xmlDoc, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 61 [xmlDoc, 1]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 62 [xmlDoc, 5]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 63 [xmlComment, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 64 [xmlComment, 4]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 65 [processingInstruction, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 66 [processingInstruction, 5]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 67 [processingInstruction, 9]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 75 [detachedComment, 3]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 76 [detachedComment, 5]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 80 [docfrag, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 24 [document.documentElement, -1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 25 [document.documentElement, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 26 [document.documentElement, 1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 27 [document.documentElement, 2]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 28 [document.documentElement, 7]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 29 [document.head, 1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 30 [document.body, 3]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 35 [paras[0], 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 36 [paras[0], 1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 37 [paras[0], 2]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 38 [paras[1], 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 39 [paras[1], 1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 40 [paras[1], 2]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 41 [detachedPara1, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 42 [detachedPara1, 1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 43 [testDiv, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 44 [testDiv, 3]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 45 [document, -1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 46 [document, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 47 [document, 1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 48 [document, 2]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 49 [document, 3]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 50 [comment, -1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 51 [comment, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 52 [comment, 4]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 53 [comment, 96]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 54 [foreignDoc, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 55 [foreignDoc, 1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 56 [foreignComment, 2]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 59 [xmlDoc, -1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 60 [xmlDoc, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 61 [xmlDoc, 1]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 62 [xmlDoc, 5]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 63 [xmlComment, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 64 [xmlComment, 4]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 65 [processingInstruction, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 66 [processingInstruction, 5]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 67 [processingInstruction, 9]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 75 [detachedComment, 3]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 76 [detachedComment, 5]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 80 [docfrag, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 24 [document.documentElement, -1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 25 [document.documentElement, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 26 [document.documentElement, 1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 27 [document.documentElement, 2]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 28 [document.documentElement, 7]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 29 [document.head, 1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 30 [document.body, 3]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 35 [paras[0], 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 36 [paras[0], 1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 37 [paras[0], 2]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 38 [paras[1], 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 39 [paras[1], 1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 40 [paras[1], 2]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 41 [detachedPara1, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 42 [detachedPara1, 1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 43 [testDiv, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 44 [testDiv, 3]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 45 [document, -1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 46 [document, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 47 [document, 1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 48 [document, 2]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 49 [document, 3]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 50 [comment, -1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 51 [comment, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 52 [comment, 4]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 53 [comment, 96]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 54 [foreignDoc, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 55 [foreignDoc, 1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 56 [foreignComment, 2]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 59 [xmlDoc, -1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 60 [xmlDoc, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 61 [xmlDoc, 1]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 62 [xmlDoc, 5]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 63 [xmlComment, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 64 [xmlComment, 4]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 65 [processingInstruction, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 66 [processingInstruction, 5]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 67 [processingInstruction, 9]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 75 [detachedComment, 3]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 76 [detachedComment, 5]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 80 [docfrag, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 24 [document.documentElement, -1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 25 [document.documentElement, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 26 [document.documentElement, 1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 27 [document.documentElement, 2]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 28 [document.documentElement, 7]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 29 [document.head, 1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 30 [document.body, 3]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 35 [paras[0], 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 36 [paras[0], 1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 37 [paras[0], 2]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 38 [paras[1], 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 39 [paras[1], 1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 40 [paras[1], 2]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 41 [detachedPara1, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 42 [detachedPara1, 1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 43 [testDiv, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 44 [testDiv, 3]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 45 [document, -1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 46 [document, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 47 [document, 1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 48 [document, 2]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 49 [document, 3]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 50 [comment, -1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 51 [comment, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 52 [comment, 4]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 53 [comment, 96]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 54 [foreignDoc, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 55 [foreignDoc, 1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 56 [foreignComment, 2]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 59 [xmlDoc, -1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 60 [xmlDoc, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 61 [xmlDoc, 1]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 62 [xmlDoc, 5]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 63 [xmlComment, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 64 [xmlComment, 4]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 65 [processingInstruction, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 66 [processingInstruction, 5]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 67 [processingInstruction, 9]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 75 [detachedComment, 3]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 76 [detachedComment, 5]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 80 [docfrag, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 24 [document.documentElement, -1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 25 [document.documentElement, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 26 [document.documentElement, 1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 27 [document.documentElement, 2]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 28 [document.documentElement, 7]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 29 [document.head, 1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 30 [document.body, 3]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 35 [paras[0], 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 36 [paras[0], 1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 37 [paras[0], 2]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 38 [paras[1], 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 39 [paras[1], 1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 40 [paras[1], 2]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 41 [detachedPara1, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 42 [detachedPara1, 1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 43 [testDiv, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 44 [testDiv, 3]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 45 [document, -1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 46 [document, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 47 [document, 1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 48 [document, 2]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 49 [document, 3]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 50 [comment, -1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 51 [comment, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 52 [comment, 4]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 53 [comment, 96]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 54 [foreignDoc, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 55 [foreignDoc, 1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 56 [foreignComment, 2]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 59 [xmlDoc, -1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 60 [xmlDoc, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 61 [xmlDoc, 1]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 62 [xmlDoc, 5]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 63 [xmlComment, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 64 [xmlComment, 4]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 65 [processingInstruction, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 66 [processingInstruction, 5]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 67 [processingInstruction, 9]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 75 [detachedComment, 3]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 76 [detachedComment, 5]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 80 [docfrag, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 24 [document.documentElement, -1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 25 [document.documentElement, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 26 [document.documentElement, 1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 27 [document.documentElement, 2]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 28 [document.documentElement, 7]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 29 [document.head, 1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 30 [document.body, 3]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 35 [paras[0], 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 36 [paras[0], 1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 37 [paras[0], 2]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 38 [paras[1], 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 39 [paras[1], 1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 40 [paras[1], 2]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 41 [detachedPara1, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 42 [detachedPara1, 1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 43 [testDiv, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 44 [testDiv, 3]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 45 [document, -1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 46 [document, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 47 [document, 1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 48 [document, 2]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 49 [document, 3]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 50 [comment, -1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 51 [comment, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 52 [comment, 4]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 53 [comment, 96]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 54 [foreignDoc, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 55 [foreignDoc, 1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 56 [foreignComment, 2]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 59 [xmlDoc, -1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 60 [xmlDoc, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 61 [xmlDoc, 1]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 62 [xmlDoc, 5]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 63 [xmlComment, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 64 [xmlComment, 4]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 65 [processingInstruction, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 66 [processingInstruction, 5]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 67 [processingInstruction, 9]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 75 [detachedComment, 3]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 76 [detachedComment, 5]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 80 [docfrag, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 24 [document.documentElement, -1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 25 [document.documentElement, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 26 [document.documentElement, 1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 27 [document.documentElement, 2]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 28 [document.documentElement, 7]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 29 [document.head, 1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 30 [document.body, 3]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 35 [paras[0], 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 36 [paras[0], 1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 37 [paras[0], 2]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 38 [paras[1], 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 39 [paras[1], 1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 40 [paras[1], 2]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 41 [detachedPara1, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 42 [detachedPara1, 1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 43 [testDiv, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 44 [testDiv, 3]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 45 [document, -1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 46 [document, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 47 [document, 1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 48 [document, 2]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 49 [document, 3]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 50 [comment, -1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 51 [comment, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 52 [comment, 4]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 53 [comment, 96]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 54 [foreignDoc, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 55 [foreignDoc, 1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 56 [foreignComment, 2]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 59 [xmlDoc, -1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 60 [xmlDoc, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 61 [xmlDoc, 1]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 62 [xmlDoc, 5]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 63 [xmlComment, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 64 [xmlComment, 4]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 65 [processingInstruction, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 66 [processingInstruction, 5]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 67 [processingInstruction, 9]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 75 [detachedComment, 3]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 76 [detachedComment, 5]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 80 [docfrag, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 24 [document.documentElement, -1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 25 [document.documentElement, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 26 [document.documentElement, 1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 27 [document.documentElement, 2]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 28 [document.documentElement, 7]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 29 [document.head, 1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 30 [document.body, 3]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 35 [paras[0], 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 36 [paras[0], 1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 37 [paras[0], 2]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 38 [paras[1], 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 39 [paras[1], 1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 40 [paras[1], 2]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 41 [detachedPara1, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 42 [detachedPara1, 1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 43 [testDiv, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 44 [testDiv, 3]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 45 [document, -1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 46 [document, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 47 [document, 1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 48 [document, 2]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 49 [document, 3]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 50 [comment, -1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 51 [comment, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 52 [comment, 4]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 53 [comment, 96]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 54 [foreignDoc, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 55 [foreignDoc, 1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 56 [foreignComment, 2]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 59 [xmlDoc, -1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 60 [xmlDoc, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 61 [xmlDoc, 1]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 62 [xmlDoc, 5]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 63 [xmlComment, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 64 [xmlComment, 4]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 65 [processingInstruction, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 66 [processingInstruction, 5]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 67 [processingInstruction, 9]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 75 [detachedComment, 3]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 76 [detachedComment, 5]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 80 [docfrag, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 10 [document.documentElement, 0, document.documentElement, 1], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 24 [document.documentElement, -1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 25 [document.documentElement, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 26 [document.documentElement, 1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 27 [document.documentElement, 2]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 28 [document.documentElement, 7]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 29 [document.head, 1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 30 [document.body, 3]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 35 [paras[0], 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 36 [paras[0], 1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 37 [paras[0], 2]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 38 [paras[1], 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 39 [paras[1], 1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 40 [paras[1], 2]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 41 [detachedPara1, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 42 [detachedPara1, 1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 43 [testDiv, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 44 [testDiv, 3]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 45 [document, -1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 46 [document, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 47 [document, 1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 48 [document, 2]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 49 [document, 3]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 50 [comment, -1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 51 [comment, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 52 [comment, 4]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 53 [comment, 96]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 54 [foreignDoc, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 55 [foreignDoc, 1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 56 [foreignComment, 2]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 59 [xmlDoc, -1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 60 [xmlDoc, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 61 [xmlDoc, 1]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 62 [xmlDoc, 5]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 63 [xmlComment, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 64 [xmlComment, 4]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 65 [processingInstruction, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 66 [processingInstruction, 5]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 67 [processingInstruction, 9]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 75 [detachedComment, 3]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 76 [detachedComment, 5]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 80 [docfrag, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 11 [document.documentElement, 0, document.documentElement, 2], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 24 [document.documentElement, -1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 25 [document.documentElement, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 26 [document.documentElement, 1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 27 [document.documentElement, 2]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 28 [document.documentElement, 7]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 29 [document.head, 1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 30 [document.body, 3]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 35 [paras[0], 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 36 [paras[0], 1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 37 [paras[0], 2]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 38 [paras[1], 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 39 [paras[1], 1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 40 [paras[1], 2]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 41 [detachedPara1, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 42 [detachedPara1, 1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 43 [testDiv, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 44 [testDiv, 3]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 45 [document, -1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 46 [document, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 47 [document, 1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 48 [document, 2]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 49 [document, 3]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 50 [comment, -1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 51 [comment, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 52 [comment, 4]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 53 [comment, 96]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 54 [foreignDoc, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 55 [foreignDoc, 1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 56 [foreignComment, 2]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 59 [xmlDoc, -1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 60 [xmlDoc, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 61 [xmlDoc, 1]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 62 [xmlDoc, 5]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 63 [xmlComment, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 64 [xmlComment, 4]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 65 [processingInstruction, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 66 [processingInstruction, 5]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 67 [processingInstruction, 9]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 75 [detachedComment, 3]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 76 [detachedComment, 5]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 80 [docfrag, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 12 [document.documentElement, 1, document.documentElement, 2], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 24 [document.documentElement, -1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 25 [document.documentElement, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 26 [document.documentElement, 1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 27 [document.documentElement, 2]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 28 [document.documentElement, 7]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 29 [document.head, 1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 30 [document.body, 3]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 35 [paras[0], 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 36 [paras[0], 1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 37 [paras[0], 2]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 38 [paras[1], 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 39 [paras[1], 1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 40 [paras[1], 2]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 41 [detachedPara1, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 42 [detachedPara1, 1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 43 [testDiv, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 44 [testDiv, 3]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 45 [document, -1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 46 [document, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 47 [document, 1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 48 [document, 2]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 49 [document, 3]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 50 [comment, -1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 51 [comment, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 52 [comment, 4]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 53 [comment, 96]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 54 [foreignDoc, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 55 [foreignDoc, 1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 56 [foreignComment, 2]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 59 [xmlDoc, -1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 60 [xmlDoc, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 61 [xmlDoc, 1]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 62 [xmlDoc, 5]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 63 [xmlComment, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 64 [xmlComment, 4]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 65 [processingInstruction, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 66 [processingInstruction, 5]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 67 [processingInstruction, 9]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 75 [detachedComment, 3]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 76 [detachedComment, 5]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 80 [docfrag, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 13 [document.head, 1, document.head, 1], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 13 [document.head, 1, document.head, 1], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 13 [document.head, 1, document.head, 1], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 13 [document.head, 1, document.head, 1], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 13 [document.head, 1, document.head, 1], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 13 [document.head, 1, document.head, 1], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 24 [document.documentElement, -1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 25 [document.documentElement, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 26 [document.documentElement, 1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 27 [document.documentElement, 2]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 28 [document.documentElement, 7]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 29 [document.head, 1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 30 [document.body, 3]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 35 [paras[0], 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 36 [paras[0], 1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 37 [paras[0], 2]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 38 [paras[1], 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 39 [paras[1], 1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 40 [paras[1], 2]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 41 [detachedPara1, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 42 [detachedPara1, 1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 43 [testDiv, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 44 [testDiv, 3]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 45 [document, -1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 46 [document, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 47 [document, 1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 48 [document, 2]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 49 [document, 3]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 50 [comment, -1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 51 [comment, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 52 [comment, 4]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 53 [comment, 96]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 54 [foreignDoc, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 55 [foreignDoc, 1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 56 [foreignComment, 2]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 59 [xmlDoc, -1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 60 [xmlDoc, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 61 [xmlDoc, 1]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 62 [xmlDoc, 5]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 63 [xmlComment, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 64 [xmlComment, 4]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 65 [processingInstruction, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 66 [processingInstruction, 5]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 67 [processingInstruction, 9]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 75 [detachedComment, 3]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 76 [detachedComment, 5]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 80 [docfrag, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 14 [document.body, 4, document.body, 5], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 14 [document.body, 4, document.body, 5], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 14 [document.body, 4, document.body, 5], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 14 [document.body, 4, document.body, 5], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 14 [document.body, 4, document.body, 5], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 14 [document.body, 4, document.body, 5], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 24 [document.documentElement, -1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 25 [document.documentElement, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 26 [document.documentElement, 1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 27 [document.documentElement, 2]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 28 [document.documentElement, 7]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 29 [document.head, 1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 30 [document.body, 3]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 35 [paras[0], 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 36 [paras[0], 1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 37 [paras[0], 2]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 38 [paras[1], 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 39 [paras[1], 1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 40 [paras[1], 2]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 41 [detachedPara1, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 42 [detachedPara1, 1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 43 [testDiv, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 44 [testDiv, 3]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 45 [document, -1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 46 [document, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 47 [document, 1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 48 [document, 2]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 49 [document, 3]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 50 [comment, -1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 51 [comment, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 52 [comment, 4]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 53 [comment, 96]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 54 [foreignDoc, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 55 [foreignDoc, 1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 56 [foreignComment, 2]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 59 [xmlDoc, -1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 60 [xmlDoc, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 61 [xmlDoc, 1]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 62 [xmlDoc, 5]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 63 [xmlComment, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 64 [xmlComment, 4]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 65 [processingInstruction, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 66 [processingInstruction, 5]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 67 [processingInstruction, 9]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 75 [detachedComment, 3]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 76 [detachedComment, 5]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 80 [docfrag, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 24 [document.documentElement, -1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 25 [document.documentElement, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 26 [document.documentElement, 1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 27 [document.documentElement, 2]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 28 [document.documentElement, 7]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 29 [document.head, 1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 30 [document.body, 3]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 35 [paras[0], 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 36 [paras[0], 1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 37 [paras[0], 2]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 38 [paras[1], 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 39 [paras[1], 1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 40 [paras[1], 2]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 41 [detachedPara1, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 42 [detachedPara1, 1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 43 [testDiv, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 44 [testDiv, 3]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 45 [document, -1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 46 [document, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 47 [document, 1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 48 [document, 2]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 49 [document, 3]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 50 [comment, -1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 51 [comment, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 52 [comment, 4]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 53 [comment, 96]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 54 [foreignDoc, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 55 [foreignDoc, 1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 56 [foreignComment, 2]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 59 [xmlDoc, -1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 60 [xmlDoc, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 61 [xmlDoc, 1]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 62 [xmlDoc, 5]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 63 [xmlComment, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 64 [xmlComment, 4]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 65 [processingInstruction, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 66 [processingInstruction, 5]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 67 [processingInstruction, 9]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 75 [detachedComment, 3]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 76 [detachedComment, 5]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 80 [docfrag, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 16 [paras[0], 0, paras[0], 1], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 16 [paras[0], 0, paras[0], 1], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 16 [paras[0], 0, paras[0], 1], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 16 [paras[0], 0, paras[0], 1], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 16 [paras[0], 0, paras[0], 1], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 16 [paras[0], 0, paras[0], 1], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 24 [document.documentElement, -1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 25 [document.documentElement, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 26 [document.documentElement, 1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 27 [document.documentElement, 2]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 28 [document.documentElement, 7]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 29 [document.head, 1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 30 [document.body, 3]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 35 [paras[0], 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 36 [paras[0], 1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 37 [paras[0], 2]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 38 [paras[1], 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 39 [paras[1], 1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 40 [paras[1], 2]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 41 [detachedPara1, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 42 [detachedPara1, 1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 43 [testDiv, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 44 [testDiv, 3]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 45 [document, -1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 46 [document, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 47 [document, 1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 48 [document, 2]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 49 [document, 3]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 50 [comment, -1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 51 [comment, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 52 [comment, 4]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 53 [comment, 96]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 54 [foreignDoc, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 55 [foreignDoc, 1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 56 [foreignComment, 2]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 59 [xmlDoc, -1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 60 [xmlDoc, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 61 [xmlDoc, 1]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 62 [xmlDoc, 5]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 63 [xmlComment, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 64 [xmlComment, 4]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 65 [processingInstruction, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 66 [processingInstruction, 5]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 67 [processingInstruction, 9]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 75 [detachedComment, 3]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 76 [detachedComment, 5]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 80 [docfrag, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 17 [detachedPara1, 0, detachedPara1, 1], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 24 [document.documentElement, -1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 25 [document.documentElement, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 26 [document.documentElement, 1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 27 [document.documentElement, 2]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 28 [document.documentElement, 7]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 29 [document.head, 1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 30 [document.body, 3]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 35 [paras[0], 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 36 [paras[0], 1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 37 [paras[0], 2]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 38 [paras[1], 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 39 [paras[1], 1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 40 [paras[1], 2]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 41 [detachedPara1, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 42 [detachedPara1, 1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 43 [testDiv, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 44 [testDiv, 3]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 45 [document, -1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 46 [document, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 47 [document, 1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 48 [document, 2]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 49 [document, 3]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 50 [comment, -1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 51 [comment, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 52 [comment, 4]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 53 [comment, 96]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 54 [foreignDoc, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 55 [foreignDoc, 1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 56 [foreignComment, 2]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 59 [xmlDoc, -1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 60 [xmlDoc, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 61 [xmlDoc, 1]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 62 [xmlDoc, 5]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 63 [xmlComment, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 64 [xmlComment, 4]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 65 [processingInstruction, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 66 [processingInstruction, 5]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 67 [processingInstruction, 9]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 75 [detachedComment, 3]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 76 [detachedComment, 5]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 80 [docfrag, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 24 [document.documentElement, -1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 25 [document.documentElement, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 26 [document.documentElement, 1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 27 [document.documentElement, 2]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 28 [document.documentElement, 7]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 29 [document.head, 1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 30 [document.body, 3]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 35 [paras[0], 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 36 [paras[0], 1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 37 [paras[0], 2]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 38 [paras[1], 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 39 [paras[1], 1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 40 [paras[1], 2]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 41 [detachedPara1, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 42 [detachedPara1, 1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 43 [testDiv, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 44 [testDiv, 3]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 45 [document, -1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 46 [document, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 47 [document, 1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 48 [document, 2]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 49 [document, 3]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 50 [comment, -1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 51 [comment, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 52 [comment, 4]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 53 [comment, 96]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 54 [foreignDoc, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 55 [foreignDoc, 1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 56 [foreignComment, 2]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 59 [xmlDoc, -1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 60 [xmlDoc, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 61 [xmlDoc, 1]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 62 [xmlDoc, 5]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 63 [xmlComment, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 64 [xmlComment, 4]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 65 [processingInstruction, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 66 [processingInstruction, 5]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 67 [processingInstruction, 9]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 75 [detachedComment, 3]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 76 [detachedComment, 5]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 80 [docfrag, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 24 [document.documentElement, -1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 25 [document.documentElement, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 26 [document.documentElement, 1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 27 [document.documentElement, 2]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 28 [document.documentElement, 7]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 29 [document.head, 1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 30 [document.body, 3]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 35 [paras[0], 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 36 [paras[0], 1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 37 [paras[0], 2]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 38 [paras[1], 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 39 [paras[1], 1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 40 [paras[1], 2]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 41 [detachedPara1, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 42 [detachedPara1, 1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 43 [testDiv, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 44 [testDiv, 3]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 45 [document, -1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 46 [document, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 47 [document, 1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 48 [document, 2]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 49 [document, 3]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 50 [comment, -1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 51 [comment, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 52 [comment, 4]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 53 [comment, 96]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 54 [foreignDoc, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 55 [foreignDoc, 1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 56 [foreignComment, 2]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 59 [xmlDoc, -1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 60 [xmlDoc, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 61 [xmlDoc, 1]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 62 [xmlDoc, 5]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 63 [xmlComment, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 64 [xmlComment, 4]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 65 [processingInstruction, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 66 [processingInstruction, 5]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 67 [processingInstruction, 9]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 75 [detachedComment, 3]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 76 [detachedComment, 5]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 80 [docfrag, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 20 [paras[0].firstChild, 3, paras[3], 1], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 24 [document.documentElement, -1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 25 [document.documentElement, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 26 [document.documentElement, 1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 27 [document.documentElement, 2]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 28 [document.documentElement, 7]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 29 [document.head, 1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 30 [document.body, 3]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 35 [paras[0], 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 36 [paras[0], 1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 37 [paras[0], 2]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 38 [paras[1], 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 39 [paras[1], 1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 40 [paras[1], 2]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 41 [detachedPara1, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 42 [detachedPara1, 1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 43 [testDiv, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 44 [testDiv, 3]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 45 [document, -1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 46 [document, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 47 [document, 1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 48 [document, 2]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 49 [document, 3]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 50 [comment, -1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 51 [comment, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 52 [comment, 4]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 53 [comment, 96]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 54 [foreignDoc, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 55 [foreignDoc, 1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 56 [foreignComment, 2]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 59 [xmlDoc, -1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 60 [xmlDoc, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 61 [xmlDoc, 1]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 62 [xmlDoc, 5]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 63 [xmlComment, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 64 [xmlComment, 4]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 65 [processingInstruction, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 66 [processingInstruction, 5]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 67 [processingInstruction, 9]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 75 [detachedComment, 3]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 76 [detachedComment, 5]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 80 [docfrag, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 21 [paras[0], 0, paras[0].firstChild, 7], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 24 [document.documentElement, -1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 25 [document.documentElement, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 26 [document.documentElement, 1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 27 [document.documentElement, 2]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 28 [document.documentElement, 7]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 29 [document.head, 1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 30 [document.body, 3]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 35 [paras[0], 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 36 [paras[0], 1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 37 [paras[0], 2]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 38 [paras[1], 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 39 [paras[1], 1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 40 [paras[1], 2]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 41 [detachedPara1, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 42 [detachedPara1, 1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 43 [testDiv, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 44 [testDiv, 3]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 45 [document, -1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 46 [document, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 47 [document, 1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 48 [document, 2]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 49 [document, 3]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 50 [comment, -1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 51 [comment, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 52 [comment, 4]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 53 [comment, 96]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 54 [foreignDoc, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 55 [foreignDoc, 1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 56 [foreignComment, 2]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 59 [xmlDoc, -1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 60 [xmlDoc, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 61 [xmlDoc, 1]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 62 [xmlDoc, 5]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 63 [xmlComment, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 64 [xmlComment, 4]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 65 [processingInstruction, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 66 [processingInstruction, 5]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 67 [processingInstruction, 9]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 75 [detachedComment, 3]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 76 [detachedComment, 5]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 80 [docfrag, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 22 [testDiv, 2, paras[4], 1], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 22 [testDiv, 2, paras[4], 1], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 22 [testDiv, 2, paras[4], 1], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 22 [testDiv, 2, paras[4], 1], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 22 [testDiv, 2, paras[4], 1], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 22 [testDiv, 2, paras[4], 1], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 23 [document, 0, document, 1], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 23 [document, 0, document, 1], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 23 [document, 0, document, 1], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 23 [document, 0, document, 1], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 23 [document, 0, document, 1], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 23 [document, 0, document, 1], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 23 [document, 0, document, 1], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 23 [document, 0, document, 1], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 23 [document, 0, document, 1], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 23 [document, 0, document, 1], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 23 [document, 0, document, 1], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 23 [document, 0, document, 1], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 23 [document, 0, document, 1], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 23 [document, 0, document, 1], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 23 [document, 0, document, 1], point 24 [document.documentElement, -1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 25 [document.documentElement, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 26 [document.documentElement, 1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 27 [document.documentElement, 2]
+PASS setEnd() with range 23 [document, 0, document, 1], point 28 [document.documentElement, 7]
+PASS setEnd() with range 23 [document, 0, document, 1], point 29 [document.head, 1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 30 [document.body, 3]
+PASS setEnd() with range 23 [document, 0, document, 1], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 35 [paras[0], 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 36 [paras[0], 1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 37 [paras[0], 2]
+PASS setEnd() with range 23 [document, 0, document, 1], point 38 [paras[1], 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 39 [paras[1], 1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 40 [paras[1], 2]
+PASS setEnd() with range 23 [document, 0, document, 1], point 41 [detachedPara1, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 42 [detachedPara1, 1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 43 [testDiv, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 44 [testDiv, 3]
+PASS setEnd() with range 23 [document, 0, document, 1], point 45 [document, -1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 46 [document, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 47 [document, 1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 48 [document, 2]
+PASS setEnd() with range 23 [document, 0, document, 1], point 49 [document, 3]
+PASS setEnd() with range 23 [document, 0, document, 1], point 50 [comment, -1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 51 [comment, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 52 [comment, 4]
+PASS setEnd() with range 23 [document, 0, document, 1], point 53 [comment, 96]
+PASS setEnd() with range 23 [document, 0, document, 1], point 54 [foreignDoc, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 55 [foreignDoc, 1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 56 [foreignComment, 2]
+PASS setEnd() with range 23 [document, 0, document, 1], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 23 [document, 0, document, 1], point 59 [xmlDoc, -1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 60 [xmlDoc, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 61 [xmlDoc, 1]
+PASS setEnd() with range 23 [document, 0, document, 1], point 62 [xmlDoc, 5]
+PASS setEnd() with range 23 [document, 0, document, 1], point 63 [xmlComment, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 64 [xmlComment, 4]
+PASS setEnd() with range 23 [document, 0, document, 1], point 65 [processingInstruction, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 66 [processingInstruction, 5]
+PASS setEnd() with range 23 [document, 0, document, 1], point 67 [processingInstruction, 9]
+PASS setEnd() with range 23 [document, 0, document, 1], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 23 [document, 0, document, 1], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 23 [document, 0, document, 1], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 23 [document, 0, document, 1], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 23 [document, 0, document, 1], point 75 [detachedComment, 3]
+PASS setEnd() with range 23 [document, 0, document, 1], point 76 [detachedComment, 5]
+PASS setEnd() with range 23 [document, 0, document, 1], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 23 [document, 0, document, 1], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 23 [document, 0, document, 1], point 80 [docfrag, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 23 [document, 0, document, 1], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 23 [document, 0, document, 1], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 23 [document, 0, document, 1], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 23 [document, 0, document, 1], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 23 [document, 0, document, 1], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 23 [document, 0, document, 1], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 24 [document, 0, document, 2], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 24 [document, 0, document, 2], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 24 [document, 0, document, 2], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 24 [document, 0, document, 2], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 24 [document, 0, document, 2], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 24 [document, 0, document, 2], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 24 [document, 0, document, 2], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 24 [document, 0, document, 2], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 24 [document, 0, document, 2], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 24 [document, 0, document, 2], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 24 [document, 0, document, 2], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 24 [document, 0, document, 2], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 24 [document, 0, document, 2], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 24 [document, 0, document, 2], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 24 [document, 0, document, 2], point 24 [document.documentElement, -1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 25 [document.documentElement, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 26 [document.documentElement, 1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 27 [document.documentElement, 2]
+PASS setEnd() with range 24 [document, 0, document, 2], point 28 [document.documentElement, 7]
+PASS setEnd() with range 24 [document, 0, document, 2], point 29 [document.head, 1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 30 [document.body, 3]
+PASS setEnd() with range 24 [document, 0, document, 2], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 35 [paras[0], 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 36 [paras[0], 1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 37 [paras[0], 2]
+PASS setEnd() with range 24 [document, 0, document, 2], point 38 [paras[1], 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 39 [paras[1], 1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 40 [paras[1], 2]
+PASS setEnd() with range 24 [document, 0, document, 2], point 41 [detachedPara1, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 42 [detachedPara1, 1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 43 [testDiv, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 44 [testDiv, 3]
+PASS setEnd() with range 24 [document, 0, document, 2], point 45 [document, -1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 46 [document, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 47 [document, 1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 48 [document, 2]
+PASS setEnd() with range 24 [document, 0, document, 2], point 49 [document, 3]
+PASS setEnd() with range 24 [document, 0, document, 2], point 50 [comment, -1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 51 [comment, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 52 [comment, 4]
+PASS setEnd() with range 24 [document, 0, document, 2], point 53 [comment, 96]
+PASS setEnd() with range 24 [document, 0, document, 2], point 54 [foreignDoc, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 55 [foreignDoc, 1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 56 [foreignComment, 2]
+PASS setEnd() with range 24 [document, 0, document, 2], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 24 [document, 0, document, 2], point 59 [xmlDoc, -1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 60 [xmlDoc, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 61 [xmlDoc, 1]
+PASS setEnd() with range 24 [document, 0, document, 2], point 62 [xmlDoc, 5]
+PASS setEnd() with range 24 [document, 0, document, 2], point 63 [xmlComment, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 64 [xmlComment, 4]
+PASS setEnd() with range 24 [document, 0, document, 2], point 65 [processingInstruction, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 66 [processingInstruction, 5]
+PASS setEnd() with range 24 [document, 0, document, 2], point 67 [processingInstruction, 9]
+PASS setEnd() with range 24 [document, 0, document, 2], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 24 [document, 0, document, 2], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 24 [document, 0, document, 2], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 24 [document, 0, document, 2], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 24 [document, 0, document, 2], point 75 [detachedComment, 3]
+PASS setEnd() with range 24 [document, 0, document, 2], point 76 [detachedComment, 5]
+PASS setEnd() with range 24 [document, 0, document, 2], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 24 [document, 0, document, 2], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 24 [document, 0, document, 2], point 80 [docfrag, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 24 [document, 0, document, 2], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 24 [document, 0, document, 2], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 24 [document, 0, document, 2], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 24 [document, 0, document, 2], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 24 [document, 0, document, 2], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 24 [document, 0, document, 2], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 24 [document.documentElement, -1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 25 [document.documentElement, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 26 [document.documentElement, 1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 27 [document.documentElement, 2]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 28 [document.documentElement, 7]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 29 [document.head, 1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 30 [document.body, 3]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 35 [paras[0], 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 36 [paras[0], 1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 37 [paras[0], 2]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 38 [paras[1], 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 39 [paras[1], 1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 40 [paras[1], 2]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 41 [detachedPara1, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 42 [detachedPara1, 1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 43 [testDiv, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 44 [testDiv, 3]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 45 [document, -1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 46 [document, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 47 [document, 1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 48 [document, 2]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 49 [document, 3]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 50 [comment, -1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 51 [comment, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 52 [comment, 4]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 53 [comment, 96]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 54 [foreignDoc, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 55 [foreignDoc, 1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 56 [foreignComment, 2]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 59 [xmlDoc, -1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 60 [xmlDoc, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 61 [xmlDoc, 1]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 62 [xmlDoc, 5]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 63 [xmlComment, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 64 [xmlComment, 4]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 65 [processingInstruction, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 66 [processingInstruction, 5]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 67 [processingInstruction, 9]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 75 [detachedComment, 3]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 76 [detachedComment, 5]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 80 [docfrag, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 25 [comment, 2, comment, 3], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 25 [comment, 2, comment, 3], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 25 [comment, 2, comment, 3], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 25 [comment, 2, comment, 3], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 25 [comment, 2, comment, 3], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 25 [comment, 2, comment, 3], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 24 [document.documentElement, -1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 25 [document.documentElement, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 26 [document.documentElement, 1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 27 [document.documentElement, 2]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 28 [document.documentElement, 7]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 29 [document.head, 1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 30 [document.body, 3]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 35 [paras[0], 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 36 [paras[0], 1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 37 [paras[0], 2]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 38 [paras[1], 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 39 [paras[1], 1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 40 [paras[1], 2]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 41 [detachedPara1, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 42 [detachedPara1, 1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 43 [testDiv, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 44 [testDiv, 3]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 45 [document, -1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 46 [document, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 47 [document, 1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 48 [document, 2]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 49 [document, 3]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 50 [comment, -1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 51 [comment, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 52 [comment, 4]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 53 [comment, 96]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 54 [foreignDoc, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 55 [foreignDoc, 1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 56 [foreignComment, 2]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 59 [xmlDoc, -1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 60 [xmlDoc, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 61 [xmlDoc, 1]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 62 [xmlDoc, 5]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 63 [xmlComment, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 64 [xmlComment, 4]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 65 [processingInstruction, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 66 [processingInstruction, 5]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 67 [processingInstruction, 9]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 75 [detachedComment, 3]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 76 [detachedComment, 5]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 80 [docfrag, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 26 [testDiv, 0, comment, 5], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 26 [testDiv, 0, comment, 5], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 26 [testDiv, 0, comment, 5], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 26 [testDiv, 0, comment, 5], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 26 [testDiv, 0, comment, 5], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 26 [testDiv, 0, comment, 5], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 24 [document.documentElement, -1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 25 [document.documentElement, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 26 [document.documentElement, 1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 27 [document.documentElement, 2]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 28 [document.documentElement, 7]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 29 [document.head, 1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 30 [document.body, 3]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 35 [paras[0], 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 36 [paras[0], 1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 37 [paras[0], 2]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 38 [paras[1], 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 39 [paras[1], 1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 40 [paras[1], 2]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 41 [detachedPara1, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 42 [detachedPara1, 1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 43 [testDiv, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 44 [testDiv, 3]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 45 [document, -1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 46 [document, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 47 [document, 1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 48 [document, 2]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 49 [document, 3]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 50 [comment, -1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 51 [comment, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 52 [comment, 4]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 53 [comment, 96]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 54 [foreignDoc, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 55 [foreignDoc, 1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 56 [foreignComment, 2]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 59 [xmlDoc, -1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 60 [xmlDoc, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 61 [xmlDoc, 1]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 62 [xmlDoc, 5]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 63 [xmlComment, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 64 [xmlComment, 4]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 65 [processingInstruction, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 66 [processingInstruction, 5]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 67 [processingInstruction, 9]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 75 [detachedComment, 3]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 76 [detachedComment, 5]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 80 [docfrag, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 27 [foreignDoc, 1, foreignComment, 2], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 24 [document.documentElement, -1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 25 [document.documentElement, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 26 [document.documentElement, 1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 27 [document.documentElement, 2]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 28 [document.documentElement, 7]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 29 [document.head, 1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 30 [document.body, 3]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 35 [paras[0], 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 36 [paras[0], 1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 37 [paras[0], 2]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 38 [paras[1], 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 39 [paras[1], 1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 40 [paras[1], 2]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 41 [detachedPara1, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 42 [detachedPara1, 1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 43 [testDiv, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 44 [testDiv, 3]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 45 [document, -1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 46 [document, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 47 [document, 1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 48 [document, 2]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 49 [document, 3]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 50 [comment, -1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 51 [comment, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 52 [comment, 4]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 53 [comment, 96]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 54 [foreignDoc, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 55 [foreignDoc, 1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 56 [foreignComment, 2]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 59 [xmlDoc, -1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 60 [xmlDoc, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 61 [xmlDoc, 1]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 62 [xmlDoc, 5]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 63 [xmlComment, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 64 [xmlComment, 4]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 65 [processingInstruction, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 66 [processingInstruction, 5]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 67 [processingInstruction, 9]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 75 [detachedComment, 3]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 76 [detachedComment, 5]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 80 [docfrag, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 24 [document.documentElement, -1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 25 [document.documentElement, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 26 [document.documentElement, 1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 27 [document.documentElement, 2]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 28 [document.documentElement, 7]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 29 [document.head, 1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 30 [document.body, 3]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 35 [paras[0], 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 36 [paras[0], 1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 37 [paras[0], 2]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 38 [paras[1], 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 39 [paras[1], 1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 40 [paras[1], 2]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 41 [detachedPara1, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 42 [detachedPara1, 1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 43 [testDiv, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 44 [testDiv, 3]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 45 [document, -1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 46 [document, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 47 [document, 1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 48 [document, 2]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 49 [document, 3]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 50 [comment, -1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 51 [comment, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 52 [comment, 4]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 53 [comment, 96]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 54 [foreignDoc, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 55 [foreignDoc, 1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 56 [foreignComment, 2]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 59 [xmlDoc, -1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 60 [xmlDoc, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 61 [xmlDoc, 1]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 62 [xmlDoc, 5]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 63 [xmlComment, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 64 [xmlComment, 4]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 65 [processingInstruction, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 66 [processingInstruction, 5]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 67 [processingInstruction, 9]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 75 [detachedComment, 3]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 76 [detachedComment, 5]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 80 [docfrag, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 29 [xmlDoc, 1, xmlComment, 0], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 24 [document.documentElement, -1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 25 [document.documentElement, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 26 [document.documentElement, 1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 27 [document.documentElement, 2]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 28 [document.documentElement, 7]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 29 [document.head, 1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 30 [document.body, 3]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 35 [paras[0], 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 36 [paras[0], 1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 37 [paras[0], 2]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 38 [paras[1], 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 39 [paras[1], 1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 40 [paras[1], 2]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 41 [detachedPara1, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 42 [detachedPara1, 1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 43 [testDiv, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 44 [testDiv, 3]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 45 [document, -1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 46 [document, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 47 [document, 1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 48 [document, 2]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 49 [document, 3]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 50 [comment, -1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 51 [comment, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 52 [comment, 4]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 53 [comment, 96]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 54 [foreignDoc, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 55 [foreignDoc, 1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 56 [foreignComment, 2]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 59 [xmlDoc, -1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 60 [xmlDoc, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 61 [xmlDoc, 1]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 62 [xmlDoc, 5]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 63 [xmlComment, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 64 [xmlComment, 4]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 65 [processingInstruction, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 66 [processingInstruction, 5]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 67 [processingInstruction, 9]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 75 [detachedComment, 3]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 76 [detachedComment, 5]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 80 [docfrag, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 30 [detachedTextNode, 0, detachedTextNode, 8], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 24 [document.documentElement, -1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 25 [document.documentElement, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 26 [document.documentElement, 1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 27 [document.documentElement, 2]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 28 [document.documentElement, 7]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 29 [document.head, 1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 30 [document.body, 3]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 35 [paras[0], 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 36 [paras[0], 1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 37 [paras[0], 2]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 38 [paras[1], 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 39 [paras[1], 1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 40 [paras[1], 2]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 41 [detachedPara1, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 42 [detachedPara1, 1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 43 [testDiv, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 44 [testDiv, 3]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 45 [document, -1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 46 [document, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 47 [document, 1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 48 [document, 2]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 49 [document, 3]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 50 [comment, -1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 51 [comment, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 52 [comment, 4]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 53 [comment, 96]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 54 [foreignDoc, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 55 [foreignDoc, 1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 56 [foreignComment, 2]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 59 [xmlDoc, -1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 60 [xmlDoc, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 61 [xmlDoc, 1]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 62 [xmlDoc, 5]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 63 [xmlComment, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 64 [xmlComment, 4]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 65 [processingInstruction, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 66 [processingInstruction, 5]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 67 [processingInstruction, 9]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 75 [detachedComment, 3]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 76 [detachedComment, 5]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 80 [docfrag, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 24 [document.documentElement, -1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 25 [document.documentElement, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 26 [document.documentElement, 1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 27 [document.documentElement, 2]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 28 [document.documentElement, 7]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 29 [document.head, 1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 30 [document.body, 3]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 35 [paras[0], 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 36 [paras[0], 1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 37 [paras[0], 2]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 38 [paras[1], 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 39 [paras[1], 1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 40 [paras[1], 2]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 41 [detachedPara1, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 42 [detachedPara1, 1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 43 [testDiv, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 44 [testDiv, 3]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 45 [document, -1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 46 [document, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 47 [document, 1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 48 [document, 2]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 49 [document, 3]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 50 [comment, -1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 51 [comment, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 52 [comment, 4]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 53 [comment, 96]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 54 [foreignDoc, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 55 [foreignDoc, 1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 56 [foreignComment, 2]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 59 [xmlDoc, -1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 60 [xmlDoc, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 61 [xmlDoc, 1]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 62 [xmlDoc, 5]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 63 [xmlComment, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 64 [xmlComment, 4]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 65 [processingInstruction, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 66 [processingInstruction, 5]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 67 [processingInstruction, 9]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 75 [detachedComment, 3]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 76 [detachedComment, 5]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 80 [docfrag, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 24 [document.documentElement, -1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 25 [document.documentElement, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 26 [document.documentElement, 1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 27 [document.documentElement, 2]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 28 [document.documentElement, 7]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 29 [document.head, 1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 30 [document.body, 3]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 35 [paras[0], 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 36 [paras[0], 1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 37 [paras[0], 2]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 38 [paras[1], 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 39 [paras[1], 1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 40 [paras[1], 2]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 41 [detachedPara1, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 42 [detachedPara1, 1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 43 [testDiv, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 44 [testDiv, 3]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 45 [document, -1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 46 [document, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 47 [document, 1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 48 [document, 2]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 49 [document, 3]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 50 [comment, -1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 51 [comment, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 52 [comment, 4]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 53 [comment, 96]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 54 [foreignDoc, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 55 [foreignDoc, 1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 56 [foreignComment, 2]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 59 [xmlDoc, -1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 60 [xmlDoc, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 61 [xmlDoc, 1]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 62 [xmlDoc, 5]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 63 [xmlComment, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 64 [xmlComment, 4]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 65 [processingInstruction, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 66 [processingInstruction, 5]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 67 [processingInstruction, 9]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 75 [detachedComment, 3]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 76 [detachedComment, 5]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 80 [docfrag, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 33 [detachedComment, 3, detachedComment, 4], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 24 [document.documentElement, -1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 25 [document.documentElement, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 26 [document.documentElement, 1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 27 [document.documentElement, 2]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 28 [document.documentElement, 7]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 29 [document.head, 1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 30 [document.body, 3]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 35 [paras[0], 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 36 [paras[0], 1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 37 [paras[0], 2]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 38 [paras[1], 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 39 [paras[1], 1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 40 [paras[1], 2]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 41 [detachedPara1, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 42 [detachedPara1, 1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 43 [testDiv, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 44 [testDiv, 3]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 45 [document, -1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 46 [document, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 47 [document, 1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 48 [document, 2]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 49 [document, 3]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 50 [comment, -1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 51 [comment, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 52 [comment, 4]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 53 [comment, 96]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 54 [foreignDoc, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 55 [foreignDoc, 1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 56 [foreignComment, 2]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 59 [xmlDoc, -1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 60 [xmlDoc, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 61 [xmlDoc, 1]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 62 [xmlDoc, 5]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 63 [xmlComment, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 64 [xmlComment, 4]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 65 [processingInstruction, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 66 [processingInstruction, 5]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 67 [processingInstruction, 9]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 75 [detachedComment, 3]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 76 [detachedComment, 5]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 80 [docfrag, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 24 [document.documentElement, -1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 25 [document.documentElement, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 26 [document.documentElement, 1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 27 [document.documentElement, 2]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 28 [document.documentElement, 7]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 29 [document.head, 1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 30 [document.body, 3]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 35 [paras[0], 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 36 [paras[0], 1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 37 [paras[0], 2]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 38 [paras[1], 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 39 [paras[1], 1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 40 [paras[1], 2]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 41 [detachedPara1, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 42 [detachedPara1, 1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 43 [testDiv, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 44 [testDiv, 3]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 45 [document, -1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 46 [document, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 47 [document, 1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 48 [document, 2]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 49 [document, 3]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 50 [comment, -1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 51 [comment, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 52 [comment, 4]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 53 [comment, 96]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 54 [foreignDoc, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 55 [foreignDoc, 1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 56 [foreignComment, 2]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 59 [xmlDoc, -1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 60 [xmlDoc, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 61 [xmlDoc, 1]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 62 [xmlDoc, 5]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 63 [xmlComment, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 64 [xmlComment, 4]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 65 [processingInstruction, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 66 [processingInstruction, 5]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 67 [processingInstruction, 9]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 75 [detachedComment, 3]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 76 [detachedComment, 5]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 80 [docfrag, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 24 [document.documentElement, -1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 25 [document.documentElement, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 26 [document.documentElement, 1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 27 [document.documentElement, 2]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 28 [document.documentElement, 7]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 29 [document.head, 1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 30 [document.body, 3]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 35 [paras[0], 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 36 [paras[0], 1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 37 [paras[0], 2]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 38 [paras[1], 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 39 [paras[1], 1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 40 [paras[1], 2]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 41 [detachedPara1, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 42 [detachedPara1, 1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 43 [testDiv, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 44 [testDiv, 3]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 45 [document, -1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 46 [document, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 47 [document, 1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 48 [document, 2]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 49 [document, 3]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 50 [comment, -1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 51 [comment, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 52 [comment, 4]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 53 [comment, 96]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 54 [foreignDoc, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 55 [foreignDoc, 1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 56 [foreignComment, 2]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 59 [xmlDoc, -1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 60 [xmlDoc, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 61 [xmlDoc, 1]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 62 [xmlDoc, 5]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 63 [xmlComment, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 64 [xmlComment, 4]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 65 [processingInstruction, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 66 [processingInstruction, 5]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 67 [processingInstruction, 9]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 75 [detachedComment, 3]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 76 [detachedComment, 5]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 80 [docfrag, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 36 [docfrag, 0, docfrag, 0], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 36 [docfrag, 0, docfrag, 0], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 36 [docfrag, 0, docfrag, 0], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 36 [docfrag, 0, docfrag, 0], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 36 [docfrag, 0, docfrag, 0], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 36 [docfrag, 0, docfrag, 0], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 0 [paras[0].firstChild, -1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 1 [paras[0].firstChild, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 2 [paras[0].firstChild, 1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 3 [paras[0].firstChild, 2]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 4 [paras[0].firstChild, 8]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 5 [paras[0].firstChild, 9]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 6 [paras[0].firstChild, 10]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 7 [paras[0].firstChild, 65535]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 8 [paras[1].firstChild, -1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 9 [paras[1].firstChild, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 10 [paras[1].firstChild, 1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 11 [paras[1].firstChild, 2]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 12 [paras[1].firstChild, 8]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 13 [paras[1].firstChild, 9]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 14 [paras[1].firstChild, 10]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 15 [paras[1].firstChild, 65535]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 16 [detachedPara1.firstChild, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 17 [detachedPara1.firstChild, 1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 18 [detachedPara1.firstChild, 8]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 19 [detachedPara1.firstChild, 9]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 20 [foreignPara1.firstChild, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 21 [foreignPara1.firstChild, 1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 22 [foreignPara1.firstChild, 8]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 23 [foreignPara1.firstChild, 9]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 24 [document.documentElement, -1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 25 [document.documentElement, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 26 [document.documentElement, 1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 27 [document.documentElement, 2]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 28 [document.documentElement, 7]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 29 [document.head, 1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 30 [document.body, 3]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 31 [foreignDoc.documentElement, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 32 [foreignDoc.documentElement, 1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 33 [foreignDoc.head, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 34 [foreignDoc.body, 1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 35 [paras[0], 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 36 [paras[0], 1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 37 [paras[0], 2]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 38 [paras[1], 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 39 [paras[1], 1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 40 [paras[1], 2]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 41 [detachedPara1, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 42 [detachedPara1, 1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 43 [testDiv, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 44 [testDiv, 3]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 45 [document, -1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 46 [document, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 47 [document, 1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 48 [document, 2]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 49 [document, 3]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 50 [comment, -1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 51 [comment, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 52 [comment, 4]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 53 [comment, 96]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 54 [foreignDoc, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 55 [foreignDoc, 1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 56 [foreignComment, 2]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 57 [foreignTextNode, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 58 [foreignTextNode, 36]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 59 [xmlDoc, -1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 60 [xmlDoc, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 61 [xmlDoc, 1]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 62 [xmlDoc, 5]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 63 [xmlComment, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 64 [xmlComment, 4]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 65 [processingInstruction, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 66 [processingInstruction, 5]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 67 [processingInstruction, 9]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 68 [detachedTextNode, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 69 [detachedTextNode, 8]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 70 [detachedForeignTextNode, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 71 [detachedForeignTextNode, 8]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 72 [detachedXmlTextNode, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 73 [detachedXmlTextNode, 8]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 74 [detachedProcessingInstruction, 12]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 75 [detachedComment, 3]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 76 [detachedComment, 5]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 77 [detachedForeignComment, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 78 [detachedForeignComment, 4]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 79 [detachedXmlComment, 2]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 80 [docfrag, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 81 [foreignDocfrag, 0]
+PASS setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 82 [xmlDocfrag, 0]
+FAIL setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 83 [doctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 84 [doctype, -17] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 85 [doctype, 1] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 86 [foreignDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEnd() with range 37 [processingInstruction, 0, processingInstruction, 4], point 87 [xmlDoctype, 0] assert_throws: setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEnd(node, offset);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 0 paras[0]
+PASS setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 1 paras[0].firstChild
+PASS setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 2 paras[1].firstChild
+PASS setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 3 foreignPara1
+PASS setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 5 detachedPara1
+PASS setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 10 foreignPara2
+FAIL setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 12 xmlElement
+FAIL setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 14 foreignTextNode
+PASS setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 15 processingInstruction
+FAIL setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 17 comment
+FAIL setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 20 doctype
+PASS setStartBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 21 foreignDoctype
+PASS setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 0 paras[0]
+PASS setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 1 paras[0].firstChild
+PASS setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 2 paras[1].firstChild
+PASS setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 3 foreignPara1
+PASS setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 5 detachedPara1
+PASS setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 10 foreignPara2
+FAIL setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 12 xmlElement
+FAIL setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 14 foreignTextNode
+PASS setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 15 processingInstruction
+FAIL setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 17 comment
+FAIL setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 20 doctype
+PASS setStartBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 21 foreignDoctype
+PASS setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 0 paras[0]
+PASS setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 1 paras[0].firstChild
+PASS setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 2 paras[1].firstChild
+PASS setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 3 foreignPara1
+PASS setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 5 detachedPara1
+PASS setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 10 foreignPara2
+FAIL setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 12 xmlElement
+FAIL setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 14 foreignTextNode
+PASS setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 15 processingInstruction
+FAIL setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 17 comment
+FAIL setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 20 doctype
+PASS setStartBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 21 foreignDoctype
+PASS setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 0 paras[0]
+PASS setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 1 paras[0].firstChild
+PASS setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 2 paras[1].firstChild
+PASS setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 3 foreignPara1
+PASS setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 5 detachedPara1
+PASS setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 10 foreignPara2
+FAIL setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 12 xmlElement
+FAIL setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 14 foreignTextNode
+PASS setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 15 processingInstruction
+FAIL setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 17 comment
+FAIL setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 20 doctype
+PASS setStartBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 21 foreignDoctype
+PASS setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 0 paras[0]
+PASS setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 1 paras[0].firstChild
+PASS setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 2 paras[1].firstChild
+PASS setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 3 foreignPara1
+PASS setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 5 detachedPara1
+PASS setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 10 foreignPara2
+FAIL setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 12 xmlElement
+FAIL setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 14 foreignTextNode
+PASS setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 15 processingInstruction
+FAIL setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 17 comment
+FAIL setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 20 doctype
+PASS setStartBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 21 foreignDoctype
+PASS setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 0 paras[0]
+PASS setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 1 paras[0].firstChild
+PASS setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 2 paras[1].firstChild
+PASS setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 3 foreignPara1
+PASS setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 5 detachedPara1
+PASS setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 10 foreignPara2
+FAIL setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 12 xmlElement
+FAIL setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 14 foreignTextNode
+PASS setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 15 processingInstruction
+FAIL setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 17 comment
+FAIL setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 20 doctype
+PASS setStartBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 21 foreignDoctype
+PASS setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 0 paras[0]
+PASS setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 1 paras[0].firstChild
+PASS setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 2 paras[1].firstChild
+PASS setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 3 foreignPara1
+PASS setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 5 detachedPara1
+PASS setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 10 foreignPara2
+FAIL setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 12 xmlElement
+FAIL setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 14 foreignTextNode
+PASS setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 15 processingInstruction
+FAIL setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 17 comment
+FAIL setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 20 doctype
+PASS setStartBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 21 foreignDoctype
+PASS setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 0 paras[0]
+PASS setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 1 paras[0].firstChild
+PASS setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 2 paras[1].firstChild
+PASS setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 3 foreignPara1
+PASS setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 5 detachedPara1
+PASS setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 10 foreignPara2
+FAIL setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 12 xmlElement
+FAIL setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 14 foreignTextNode
+PASS setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 15 processingInstruction
+FAIL setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 17 comment
+FAIL setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 20 doctype
+PASS setStartBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 21 foreignDoctype
+PASS setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 0 paras[0]
+PASS setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 1 paras[0].firstChild
+PASS setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 2 paras[1].firstChild
+PASS setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 3 foreignPara1
+PASS setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 5 detachedPara1
+PASS setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 10 foreignPara2
+FAIL setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 12 xmlElement
+FAIL setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 14 foreignTextNode
+PASS setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 15 processingInstruction
+FAIL setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 17 comment
+FAIL setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 20 doctype
+PASS setStartBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 21 foreignDoctype
+PASS setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 0 paras[0]
+PASS setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 1 paras[0].firstChild
+PASS setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 2 paras[1].firstChild
+PASS setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 3 foreignPara1
+PASS setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 5 detachedPara1
+PASS setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 10 foreignPara2
+FAIL setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 12 xmlElement
+FAIL setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 14 foreignTextNode
+PASS setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 15 processingInstruction
+FAIL setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 17 comment
+FAIL setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 20 doctype
+PASS setStartBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 21 foreignDoctype
+PASS setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 0 paras[0]
+PASS setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 1 paras[0].firstChild
+PASS setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 2 paras[1].firstChild
+PASS setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 3 foreignPara1
+PASS setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 5 detachedPara1
+PASS setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 10 foreignPara2
+FAIL setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 12 xmlElement
+FAIL setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 14 foreignTextNode
+PASS setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 15 processingInstruction
+FAIL setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 17 comment
+FAIL setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 20 doctype
+PASS setStartBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 21 foreignDoctype
+PASS setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 0 paras[0]
+PASS setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 1 paras[0].firstChild
+PASS setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 2 paras[1].firstChild
+PASS setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 3 foreignPara1
+PASS setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 5 detachedPara1
+PASS setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 10 foreignPara2
+FAIL setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 12 xmlElement
+FAIL setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 14 foreignTextNode
+PASS setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 15 processingInstruction
+FAIL setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 17 comment
+FAIL setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 20 doctype
+PASS setStartBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 21 foreignDoctype
+PASS setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 0 paras[0]
+PASS setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 1 paras[0].firstChild
+PASS setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 2 paras[1].firstChild
+PASS setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 3 foreignPara1
+PASS setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 5 detachedPara1
+PASS setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 10 foreignPara2
+FAIL setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 12 xmlElement
+FAIL setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 14 foreignTextNode
+PASS setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 15 processingInstruction
+FAIL setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 17 comment
+FAIL setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 20 doctype
+PASS setStartBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 21 foreignDoctype
+PASS setStartBefore() with range 13 [document.head, 1, document.head, 1], node 0 paras[0]
+PASS setStartBefore() with range 13 [document.head, 1, document.head, 1], node 1 paras[0].firstChild
+PASS setStartBefore() with range 13 [document.head, 1, document.head, 1], node 2 paras[1].firstChild
+PASS setStartBefore() with range 13 [document.head, 1, document.head, 1], node 3 foreignPara1
+PASS setStartBefore() with range 13 [document.head, 1, document.head, 1], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 13 [document.head, 1, document.head, 1], node 5 detachedPara1
+PASS setStartBefore() with range 13 [document.head, 1, document.head, 1], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 13 [document.head, 1, document.head, 1], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 13 [document.head, 1, document.head, 1], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 13 [document.head, 1, document.head, 1], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 13 [document.head, 1, document.head, 1], node 10 foreignPara2
+FAIL setStartBefore() with range 13 [document.head, 1, document.head, 1], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 13 [document.head, 1, document.head, 1], node 12 xmlElement
+FAIL setStartBefore() with range 13 [document.head, 1, document.head, 1], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 13 [document.head, 1, document.head, 1], node 14 foreignTextNode
+PASS setStartBefore() with range 13 [document.head, 1, document.head, 1], node 15 processingInstruction
+FAIL setStartBefore() with range 13 [document.head, 1, document.head, 1], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 13 [document.head, 1, document.head, 1], node 17 comment
+FAIL setStartBefore() with range 13 [document.head, 1, document.head, 1], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 13 [document.head, 1, document.head, 1], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 13 [document.head, 1, document.head, 1], node 20 doctype
+PASS setStartBefore() with range 13 [document.head, 1, document.head, 1], node 21 foreignDoctype
+PASS setStartBefore() with range 14 [document.body, 4, document.body, 5], node 0 paras[0]
+PASS setStartBefore() with range 14 [document.body, 4, document.body, 5], node 1 paras[0].firstChild
+PASS setStartBefore() with range 14 [document.body, 4, document.body, 5], node 2 paras[1].firstChild
+PASS setStartBefore() with range 14 [document.body, 4, document.body, 5], node 3 foreignPara1
+PASS setStartBefore() with range 14 [document.body, 4, document.body, 5], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 14 [document.body, 4, document.body, 5], node 5 detachedPara1
+PASS setStartBefore() with range 14 [document.body, 4, document.body, 5], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 14 [document.body, 4, document.body, 5], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 14 [document.body, 4, document.body, 5], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 14 [document.body, 4, document.body, 5], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 14 [document.body, 4, document.body, 5], node 10 foreignPara2
+FAIL setStartBefore() with range 14 [document.body, 4, document.body, 5], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 14 [document.body, 4, document.body, 5], node 12 xmlElement
+FAIL setStartBefore() with range 14 [document.body, 4, document.body, 5], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 14 [document.body, 4, document.body, 5], node 14 foreignTextNode
+PASS setStartBefore() with range 14 [document.body, 4, document.body, 5], node 15 processingInstruction
+FAIL setStartBefore() with range 14 [document.body, 4, document.body, 5], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 14 [document.body, 4, document.body, 5], node 17 comment
+FAIL setStartBefore() with range 14 [document.body, 4, document.body, 5], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 14 [document.body, 4, document.body, 5], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 14 [document.body, 4, document.body, 5], node 20 doctype
+PASS setStartBefore() with range 14 [document.body, 4, document.body, 5], node 21 foreignDoctype
+PASS setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 0 paras[0]
+PASS setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 1 paras[0].firstChild
+PASS setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 2 paras[1].firstChild
+PASS setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 3 foreignPara1
+PASS setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 5 detachedPara1
+PASS setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 10 foreignPara2
+FAIL setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 12 xmlElement
+FAIL setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 14 foreignTextNode
+PASS setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 15 processingInstruction
+FAIL setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 17 comment
+FAIL setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 20 doctype
+PASS setStartBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 21 foreignDoctype
+PASS setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 0 paras[0]
+PASS setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 1 paras[0].firstChild
+PASS setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 2 paras[1].firstChild
+PASS setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 3 foreignPara1
+PASS setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 5 detachedPara1
+PASS setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 10 foreignPara2
+FAIL setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 12 xmlElement
+FAIL setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 14 foreignTextNode
+PASS setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 15 processingInstruction
+FAIL setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 17 comment
+FAIL setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 20 doctype
+PASS setStartBefore() with range 16 [paras[0], 0, paras[0], 1], node 21 foreignDoctype
+PASS setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 0 paras[0]
+PASS setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 1 paras[0].firstChild
+PASS setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 2 paras[1].firstChild
+PASS setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 3 foreignPara1
+PASS setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 5 detachedPara1
+PASS setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 10 foreignPara2
+FAIL setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 12 xmlElement
+FAIL setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 14 foreignTextNode
+PASS setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 15 processingInstruction
+FAIL setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 17 comment
+FAIL setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 20 doctype
+PASS setStartBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 21 foreignDoctype
+PASS setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 0 paras[0]
+PASS setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 1 paras[0].firstChild
+PASS setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 2 paras[1].firstChild
+PASS setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 3 foreignPara1
+PASS setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 5 detachedPara1
+PASS setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 10 foreignPara2
+FAIL setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 12 xmlElement
+FAIL setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 14 foreignTextNode
+PASS setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 15 processingInstruction
+FAIL setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 17 comment
+FAIL setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 20 doctype
+PASS setStartBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 21 foreignDoctype
+PASS setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 0 paras[0]
+PASS setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 1 paras[0].firstChild
+PASS setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 2 paras[1].firstChild
+PASS setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 3 foreignPara1
+PASS setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 5 detachedPara1
+PASS setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 10 foreignPara2
+FAIL setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 12 xmlElement
+FAIL setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 14 foreignTextNode
+PASS setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 15 processingInstruction
+FAIL setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 17 comment
+FAIL setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 20 doctype
+PASS setStartBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 21 foreignDoctype
+PASS setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 0 paras[0]
+PASS setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 1 paras[0].firstChild
+PASS setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 2 paras[1].firstChild
+PASS setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 3 foreignPara1
+PASS setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 5 detachedPara1
+PASS setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 10 foreignPara2
+FAIL setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 12 xmlElement
+FAIL setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 14 foreignTextNode
+PASS setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 15 processingInstruction
+FAIL setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 17 comment
+FAIL setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 20 doctype
+PASS setStartBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 21 foreignDoctype
+PASS setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 0 paras[0]
+PASS setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 1 paras[0].firstChild
+PASS setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 2 paras[1].firstChild
+PASS setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 3 foreignPara1
+PASS setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 5 detachedPara1
+PASS setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 10 foreignPara2
+FAIL setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 12 xmlElement
+FAIL setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 14 foreignTextNode
+PASS setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 15 processingInstruction
+FAIL setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 17 comment
+FAIL setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 20 doctype
+PASS setStartBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 21 foreignDoctype
+PASS setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 0 paras[0]
+PASS setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 1 paras[0].firstChild
+PASS setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 2 paras[1].firstChild
+PASS setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 3 foreignPara1
+PASS setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 5 detachedPara1
+PASS setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 10 foreignPara2
+FAIL setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 12 xmlElement
+FAIL setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 14 foreignTextNode
+PASS setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 15 processingInstruction
+FAIL setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 17 comment
+FAIL setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 20 doctype
+PASS setStartBefore() with range 22 [testDiv, 2, paras[4], 1], node 21 foreignDoctype
+PASS setStartBefore() with range 23 [document, 0, document, 1], node 0 paras[0]
+PASS setStartBefore() with range 23 [document, 0, document, 1], node 1 paras[0].firstChild
+PASS setStartBefore() with range 23 [document, 0, document, 1], node 2 paras[1].firstChild
+PASS setStartBefore() with range 23 [document, 0, document, 1], node 3 foreignPara1
+PASS setStartBefore() with range 23 [document, 0, document, 1], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 23 [document, 0, document, 1], node 5 detachedPara1
+PASS setStartBefore() with range 23 [document, 0, document, 1], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 23 [document, 0, document, 1], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 23 [document, 0, document, 1], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 23 [document, 0, document, 1], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 23 [document, 0, document, 1], node 10 foreignPara2
+FAIL setStartBefore() with range 23 [document, 0, document, 1], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 23 [document, 0, document, 1], node 12 xmlElement
+FAIL setStartBefore() with range 23 [document, 0, document, 1], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 23 [document, 0, document, 1], node 14 foreignTextNode
+PASS setStartBefore() with range 23 [document, 0, document, 1], node 15 processingInstruction
+FAIL setStartBefore() with range 23 [document, 0, document, 1], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 23 [document, 0, document, 1], node 17 comment
+FAIL setStartBefore() with range 23 [document, 0, document, 1], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 23 [document, 0, document, 1], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 23 [document, 0, document, 1], node 20 doctype
+PASS setStartBefore() with range 23 [document, 0, document, 1], node 21 foreignDoctype
+PASS setStartBefore() with range 24 [document, 0, document, 2], node 0 paras[0]
+PASS setStartBefore() with range 24 [document, 0, document, 2], node 1 paras[0].firstChild
+PASS setStartBefore() with range 24 [document, 0, document, 2], node 2 paras[1].firstChild
+PASS setStartBefore() with range 24 [document, 0, document, 2], node 3 foreignPara1
+PASS setStartBefore() with range 24 [document, 0, document, 2], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 24 [document, 0, document, 2], node 5 detachedPara1
+PASS setStartBefore() with range 24 [document, 0, document, 2], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 24 [document, 0, document, 2], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 24 [document, 0, document, 2], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 24 [document, 0, document, 2], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 24 [document, 0, document, 2], node 10 foreignPara2
+FAIL setStartBefore() with range 24 [document, 0, document, 2], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 24 [document, 0, document, 2], node 12 xmlElement
+FAIL setStartBefore() with range 24 [document, 0, document, 2], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 24 [document, 0, document, 2], node 14 foreignTextNode
+PASS setStartBefore() with range 24 [document, 0, document, 2], node 15 processingInstruction
+FAIL setStartBefore() with range 24 [document, 0, document, 2], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 24 [document, 0, document, 2], node 17 comment
+FAIL setStartBefore() with range 24 [document, 0, document, 2], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 24 [document, 0, document, 2], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 24 [document, 0, document, 2], node 20 doctype
+PASS setStartBefore() with range 24 [document, 0, document, 2], node 21 foreignDoctype
+PASS setStartBefore() with range 25 [comment, 2, comment, 3], node 0 paras[0]
+PASS setStartBefore() with range 25 [comment, 2, comment, 3], node 1 paras[0].firstChild
+PASS setStartBefore() with range 25 [comment, 2, comment, 3], node 2 paras[1].firstChild
+PASS setStartBefore() with range 25 [comment, 2, comment, 3], node 3 foreignPara1
+PASS setStartBefore() with range 25 [comment, 2, comment, 3], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 25 [comment, 2, comment, 3], node 5 detachedPara1
+PASS setStartBefore() with range 25 [comment, 2, comment, 3], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 25 [comment, 2, comment, 3], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 25 [comment, 2, comment, 3], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 25 [comment, 2, comment, 3], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 25 [comment, 2, comment, 3], node 10 foreignPara2
+FAIL setStartBefore() with range 25 [comment, 2, comment, 3], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 25 [comment, 2, comment, 3], node 12 xmlElement
+FAIL setStartBefore() with range 25 [comment, 2, comment, 3], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 25 [comment, 2, comment, 3], node 14 foreignTextNode
+PASS setStartBefore() with range 25 [comment, 2, comment, 3], node 15 processingInstruction
+FAIL setStartBefore() with range 25 [comment, 2, comment, 3], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 25 [comment, 2, comment, 3], node 17 comment
+FAIL setStartBefore() with range 25 [comment, 2, comment, 3], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 25 [comment, 2, comment, 3], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 25 [comment, 2, comment, 3], node 20 doctype
+PASS setStartBefore() with range 25 [comment, 2, comment, 3], node 21 foreignDoctype
+PASS setStartBefore() with range 26 [testDiv, 0, comment, 5], node 0 paras[0]
+PASS setStartBefore() with range 26 [testDiv, 0, comment, 5], node 1 paras[0].firstChild
+PASS setStartBefore() with range 26 [testDiv, 0, comment, 5], node 2 paras[1].firstChild
+PASS setStartBefore() with range 26 [testDiv, 0, comment, 5], node 3 foreignPara1
+PASS setStartBefore() with range 26 [testDiv, 0, comment, 5], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 26 [testDiv, 0, comment, 5], node 5 detachedPara1
+PASS setStartBefore() with range 26 [testDiv, 0, comment, 5], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 26 [testDiv, 0, comment, 5], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 26 [testDiv, 0, comment, 5], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 26 [testDiv, 0, comment, 5], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 26 [testDiv, 0, comment, 5], node 10 foreignPara2
+FAIL setStartBefore() with range 26 [testDiv, 0, comment, 5], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 26 [testDiv, 0, comment, 5], node 12 xmlElement
+FAIL setStartBefore() with range 26 [testDiv, 0, comment, 5], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 26 [testDiv, 0, comment, 5], node 14 foreignTextNode
+PASS setStartBefore() with range 26 [testDiv, 0, comment, 5], node 15 processingInstruction
+FAIL setStartBefore() with range 26 [testDiv, 0, comment, 5], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 26 [testDiv, 0, comment, 5], node 17 comment
+FAIL setStartBefore() with range 26 [testDiv, 0, comment, 5], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 26 [testDiv, 0, comment, 5], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 26 [testDiv, 0, comment, 5], node 20 doctype
+PASS setStartBefore() with range 26 [testDiv, 0, comment, 5], node 21 foreignDoctype
+PASS setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 0 paras[0]
+PASS setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 1 paras[0].firstChild
+PASS setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 2 paras[1].firstChild
+PASS setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 3 foreignPara1
+PASS setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 5 detachedPara1
+PASS setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 10 foreignPara2
+FAIL setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 12 xmlElement
+FAIL setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 14 foreignTextNode
+PASS setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 15 processingInstruction
+FAIL setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 17 comment
+FAIL setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 20 doctype
+PASS setStartBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 21 foreignDoctype
+PASS setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 0 paras[0]
+PASS setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 1 paras[0].firstChild
+PASS setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 2 paras[1].firstChild
+PASS setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 3 foreignPara1
+PASS setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 5 detachedPara1
+PASS setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 10 foreignPara2
+FAIL setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 12 xmlElement
+FAIL setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 14 foreignTextNode
+PASS setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 15 processingInstruction
+FAIL setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 17 comment
+FAIL setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 20 doctype
+PASS setStartBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 21 foreignDoctype
+PASS setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 0 paras[0]
+PASS setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 1 paras[0].firstChild
+PASS setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 2 paras[1].firstChild
+PASS setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 3 foreignPara1
+PASS setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 5 detachedPara1
+PASS setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 10 foreignPara2
+FAIL setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 12 xmlElement
+FAIL setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 14 foreignTextNode
+PASS setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 15 processingInstruction
+FAIL setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 17 comment
+FAIL setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 20 doctype
+PASS setStartBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 21 foreignDoctype
+PASS setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 0 paras[0]
+PASS setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 1 paras[0].firstChild
+PASS setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 2 paras[1].firstChild
+PASS setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 3 foreignPara1
+PASS setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 5 detachedPara1
+PASS setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 10 foreignPara2
+FAIL setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 12 xmlElement
+FAIL setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 14 foreignTextNode
+PASS setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 15 processingInstruction
+FAIL setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 17 comment
+FAIL setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 20 doctype
+PASS setStartBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 21 foreignDoctype
+PASS setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 0 paras[0]
+PASS setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 1 paras[0].firstChild
+PASS setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 2 paras[1].firstChild
+PASS setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 3 foreignPara1
+PASS setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 5 detachedPara1
+PASS setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 10 foreignPara2
+FAIL setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 12 xmlElement
+FAIL setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 14 foreignTextNode
+PASS setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 15 processingInstruction
+FAIL setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 17 comment
+FAIL setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 20 doctype
+PASS setStartBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 21 foreignDoctype
+PASS setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 0 paras[0]
+PASS setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 1 paras[0].firstChild
+PASS setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 2 paras[1].firstChild
+PASS setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 3 foreignPara1
+PASS setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 5 detachedPara1
+PASS setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 10 foreignPara2
+FAIL setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 12 xmlElement
+FAIL setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 14 foreignTextNode
+PASS setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 15 processingInstruction
+FAIL setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 17 comment
+FAIL setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 20 doctype
+PASS setStartBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 21 foreignDoctype
+PASS setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 0 paras[0]
+PASS setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 1 paras[0].firstChild
+PASS setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 2 paras[1].firstChild
+PASS setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 3 foreignPara1
+PASS setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 5 detachedPara1
+PASS setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 10 foreignPara2
+FAIL setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 12 xmlElement
+FAIL setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 14 foreignTextNode
+PASS setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 15 processingInstruction
+FAIL setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 17 comment
+FAIL setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 20 doctype
+PASS setStartBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 21 foreignDoctype
+PASS setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 0 paras[0]
+PASS setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 1 paras[0].firstChild
+PASS setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 2 paras[1].firstChild
+PASS setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 3 foreignPara1
+PASS setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 5 detachedPara1
+PASS setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 10 foreignPara2
+FAIL setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 12 xmlElement
+FAIL setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 14 foreignTextNode
+PASS setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 15 processingInstruction
+FAIL setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 17 comment
+FAIL setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 20 doctype
+PASS setStartBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 21 foreignDoctype
+PASS setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 0 paras[0]
+PASS setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 1 paras[0].firstChild
+PASS setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 2 paras[1].firstChild
+PASS setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 3 foreignPara1
+PASS setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 5 detachedPara1
+PASS setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 10 foreignPara2
+FAIL setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 12 xmlElement
+FAIL setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 14 foreignTextNode
+PASS setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 15 processingInstruction
+FAIL setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 17 comment
+FAIL setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 20 doctype
+PASS setStartBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 21 foreignDoctype
+PASS setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 0 paras[0]
+PASS setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 1 paras[0].firstChild
+PASS setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 2 paras[1].firstChild
+PASS setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 3 foreignPara1
+PASS setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 5 detachedPara1
+PASS setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 10 foreignPara2
+FAIL setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 12 xmlElement
+FAIL setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 14 foreignTextNode
+PASS setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 15 processingInstruction
+FAIL setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 17 comment
+FAIL setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 20 doctype
+PASS setStartBefore() with range 36 [docfrag, 0, docfrag, 0], node 21 foreignDoctype
+PASS setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 0 paras[0]
+PASS setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 1 paras[0].firstChild
+PASS setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 2 paras[1].firstChild
+PASS setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 3 foreignPara1
+PASS setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 4 foreignPara1.firstChild
+PASS setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 5 detachedPara1
+PASS setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 6 detachedPara1.firstChild
+FAIL setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 7 document assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 8 detachedDiv assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 9 foreignDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 10 foreignPara2
+FAIL setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 11 xmlDoc assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 12 xmlElement
+FAIL setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 13 detachedTextNode assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 14 foreignTextNode
+PASS setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 15 processingInstruction
+FAIL setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 16 detachedProcessingInstruction assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 17 comment
+FAIL setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 18 detachedComment assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 19 docfrag assert_throws: setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 20 doctype
+PASS setStartBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 21 foreignDoctype
+PASS setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 0 paras[0]
+PASS setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 1 paras[0].firstChild
+PASS setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 2 paras[1].firstChild
+PASS setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 3 foreignPara1
+PASS setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 5 detachedPara1
+PASS setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 10 foreignPara2
+FAIL setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 12 xmlElement
+FAIL setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 14 foreignTextNode
+PASS setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 15 processingInstruction
+FAIL setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 17 comment
+FAIL setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 20 doctype
+PASS setStartAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 21 foreignDoctype
+PASS setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 0 paras[0]
+PASS setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 1 paras[0].firstChild
+PASS setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 2 paras[1].firstChild
+PASS setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 3 foreignPara1
+PASS setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 5 detachedPara1
+PASS setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 10 foreignPara2
+FAIL setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 12 xmlElement
+FAIL setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 14 foreignTextNode
+PASS setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 15 processingInstruction
+FAIL setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 17 comment
+FAIL setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 20 doctype
+PASS setStartAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 21 foreignDoctype
+PASS setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 0 paras[0]
+PASS setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 1 paras[0].firstChild
+PASS setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 2 paras[1].firstChild
+PASS setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 3 foreignPara1
+PASS setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 5 detachedPara1
+PASS setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 10 foreignPara2
+FAIL setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 12 xmlElement
+FAIL setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 14 foreignTextNode
+PASS setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 15 processingInstruction
+FAIL setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 17 comment
+FAIL setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 20 doctype
+PASS setStartAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 21 foreignDoctype
+PASS setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 0 paras[0]
+PASS setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 1 paras[0].firstChild
+PASS setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 2 paras[1].firstChild
+PASS setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 3 foreignPara1
+PASS setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 5 detachedPara1
+PASS setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 10 foreignPara2
+FAIL setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 12 xmlElement
+FAIL setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 14 foreignTextNode
+PASS setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 15 processingInstruction
+FAIL setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 17 comment
+FAIL setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 20 doctype
+PASS setStartAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 21 foreignDoctype
+PASS setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 0 paras[0]
+PASS setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 1 paras[0].firstChild
+PASS setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 2 paras[1].firstChild
+PASS setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 3 foreignPara1
+PASS setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 5 detachedPara1
+PASS setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 10 foreignPara2
+FAIL setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 12 xmlElement
+FAIL setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 14 foreignTextNode
+PASS setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 15 processingInstruction
+FAIL setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 17 comment
+FAIL setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 20 doctype
+PASS setStartAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 21 foreignDoctype
+PASS setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 0 paras[0]
+PASS setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 1 paras[0].firstChild
+PASS setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 2 paras[1].firstChild
+PASS setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 3 foreignPara1
+PASS setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 5 detachedPara1
+PASS setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 10 foreignPara2
+FAIL setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 12 xmlElement
+FAIL setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 14 foreignTextNode
+PASS setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 15 processingInstruction
+FAIL setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 17 comment
+FAIL setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 20 doctype
+PASS setStartAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 21 foreignDoctype
+PASS setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 0 paras[0]
+PASS setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 1 paras[0].firstChild
+PASS setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 2 paras[1].firstChild
+PASS setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 3 foreignPara1
+PASS setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 5 detachedPara1
+PASS setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 10 foreignPara2
+FAIL setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 12 xmlElement
+FAIL setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 14 foreignTextNode
+PASS setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 15 processingInstruction
+FAIL setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 17 comment
+FAIL setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 20 doctype
+PASS setStartAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 21 foreignDoctype
+PASS setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 0 paras[0]
+PASS setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 1 paras[0].firstChild
+PASS setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 2 paras[1].firstChild
+PASS setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 3 foreignPara1
+PASS setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 5 detachedPara1
+PASS setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 10 foreignPara2
+FAIL setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 12 xmlElement
+FAIL setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 14 foreignTextNode
+PASS setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 15 processingInstruction
+FAIL setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 17 comment
+FAIL setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 20 doctype
+PASS setStartAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 21 foreignDoctype
+PASS setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 0 paras[0]
+PASS setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 1 paras[0].firstChild
+PASS setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 2 paras[1].firstChild
+PASS setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 3 foreignPara1
+PASS setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 5 detachedPara1
+PASS setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 10 foreignPara2
+FAIL setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 12 xmlElement
+FAIL setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 14 foreignTextNode
+PASS setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 15 processingInstruction
+FAIL setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 17 comment
+FAIL setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 20 doctype
+PASS setStartAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 21 foreignDoctype
+PASS setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 0 paras[0]
+PASS setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 1 paras[0].firstChild
+PASS setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 2 paras[1].firstChild
+PASS setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 3 foreignPara1
+PASS setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 5 detachedPara1
+PASS setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 10 foreignPara2
+FAIL setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 12 xmlElement
+FAIL setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 14 foreignTextNode
+PASS setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 15 processingInstruction
+FAIL setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 17 comment
+FAIL setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 20 doctype
+PASS setStartAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 21 foreignDoctype
+PASS setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 0 paras[0]
+PASS setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 1 paras[0].firstChild
+PASS setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 2 paras[1].firstChild
+PASS setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 3 foreignPara1
+PASS setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 5 detachedPara1
+PASS setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 10 foreignPara2
+FAIL setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 12 xmlElement
+FAIL setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 14 foreignTextNode
+PASS setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 15 processingInstruction
+FAIL setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 17 comment
+FAIL setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 20 doctype
+PASS setStartAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 21 foreignDoctype
+PASS setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 0 paras[0]
+PASS setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 1 paras[0].firstChild
+PASS setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 2 paras[1].firstChild
+PASS setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 3 foreignPara1
+PASS setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 5 detachedPara1
+PASS setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 10 foreignPara2
+FAIL setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 12 xmlElement
+FAIL setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 14 foreignTextNode
+PASS setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 15 processingInstruction
+FAIL setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 17 comment
+FAIL setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 20 doctype
+PASS setStartAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 21 foreignDoctype
+PASS setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 0 paras[0]
+PASS setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 1 paras[0].firstChild
+PASS setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 2 paras[1].firstChild
+PASS setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 3 foreignPara1
+PASS setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 5 detachedPara1
+PASS setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 10 foreignPara2
+FAIL setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 12 xmlElement
+FAIL setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 14 foreignTextNode
+PASS setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 15 processingInstruction
+FAIL setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 17 comment
+FAIL setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 20 doctype
+PASS setStartAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 21 foreignDoctype
+PASS setStartAfter() with range 13 [document.head, 1, document.head, 1], node 0 paras[0]
+PASS setStartAfter() with range 13 [document.head, 1, document.head, 1], node 1 paras[0].firstChild
+PASS setStartAfter() with range 13 [document.head, 1, document.head, 1], node 2 paras[1].firstChild
+PASS setStartAfter() with range 13 [document.head, 1, document.head, 1], node 3 foreignPara1
+PASS setStartAfter() with range 13 [document.head, 1, document.head, 1], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 13 [document.head, 1, document.head, 1], node 5 detachedPara1
+PASS setStartAfter() with range 13 [document.head, 1, document.head, 1], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 13 [document.head, 1, document.head, 1], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 13 [document.head, 1, document.head, 1], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 13 [document.head, 1, document.head, 1], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 13 [document.head, 1, document.head, 1], node 10 foreignPara2
+FAIL setStartAfter() with range 13 [document.head, 1, document.head, 1], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 13 [document.head, 1, document.head, 1], node 12 xmlElement
+FAIL setStartAfter() with range 13 [document.head, 1, document.head, 1], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 13 [document.head, 1, document.head, 1], node 14 foreignTextNode
+PASS setStartAfter() with range 13 [document.head, 1, document.head, 1], node 15 processingInstruction
+FAIL setStartAfter() with range 13 [document.head, 1, document.head, 1], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 13 [document.head, 1, document.head, 1], node 17 comment
+FAIL setStartAfter() with range 13 [document.head, 1, document.head, 1], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 13 [document.head, 1, document.head, 1], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 13 [document.head, 1, document.head, 1], node 20 doctype
+PASS setStartAfter() with range 13 [document.head, 1, document.head, 1], node 21 foreignDoctype
+PASS setStartAfter() with range 14 [document.body, 4, document.body, 5], node 0 paras[0]
+PASS setStartAfter() with range 14 [document.body, 4, document.body, 5], node 1 paras[0].firstChild
+PASS setStartAfter() with range 14 [document.body, 4, document.body, 5], node 2 paras[1].firstChild
+PASS setStartAfter() with range 14 [document.body, 4, document.body, 5], node 3 foreignPara1
+PASS setStartAfter() with range 14 [document.body, 4, document.body, 5], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 14 [document.body, 4, document.body, 5], node 5 detachedPara1
+PASS setStartAfter() with range 14 [document.body, 4, document.body, 5], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 14 [document.body, 4, document.body, 5], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 14 [document.body, 4, document.body, 5], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 14 [document.body, 4, document.body, 5], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 14 [document.body, 4, document.body, 5], node 10 foreignPara2
+FAIL setStartAfter() with range 14 [document.body, 4, document.body, 5], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 14 [document.body, 4, document.body, 5], node 12 xmlElement
+FAIL setStartAfter() with range 14 [document.body, 4, document.body, 5], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 14 [document.body, 4, document.body, 5], node 14 foreignTextNode
+PASS setStartAfter() with range 14 [document.body, 4, document.body, 5], node 15 processingInstruction
+FAIL setStartAfter() with range 14 [document.body, 4, document.body, 5], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 14 [document.body, 4, document.body, 5], node 17 comment
+FAIL setStartAfter() with range 14 [document.body, 4, document.body, 5], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 14 [document.body, 4, document.body, 5], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 14 [document.body, 4, document.body, 5], node 20 doctype
+PASS setStartAfter() with range 14 [document.body, 4, document.body, 5], node 21 foreignDoctype
+PASS setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 0 paras[0]
+PASS setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 1 paras[0].firstChild
+PASS setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 2 paras[1].firstChild
+PASS setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 3 foreignPara1
+PASS setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 5 detachedPara1
+PASS setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 10 foreignPara2
+FAIL setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 12 xmlElement
+FAIL setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 14 foreignTextNode
+PASS setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 15 processingInstruction
+FAIL setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 17 comment
+FAIL setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 20 doctype
+PASS setStartAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 21 foreignDoctype
+PASS setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 0 paras[0]
+PASS setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 1 paras[0].firstChild
+PASS setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 2 paras[1].firstChild
+PASS setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 3 foreignPara1
+PASS setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 5 detachedPara1
+PASS setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 10 foreignPara2
+FAIL setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 12 xmlElement
+FAIL setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 14 foreignTextNode
+PASS setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 15 processingInstruction
+FAIL setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 17 comment
+FAIL setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 20 doctype
+PASS setStartAfter() with range 16 [paras[0], 0, paras[0], 1], node 21 foreignDoctype
+PASS setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 0 paras[0]
+PASS setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 1 paras[0].firstChild
+PASS setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 2 paras[1].firstChild
+PASS setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 3 foreignPara1
+PASS setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 5 detachedPara1
+PASS setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 10 foreignPara2
+FAIL setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 12 xmlElement
+FAIL setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 14 foreignTextNode
+PASS setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 15 processingInstruction
+FAIL setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 17 comment
+FAIL setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 20 doctype
+PASS setStartAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 21 foreignDoctype
+PASS setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 0 paras[0]
+PASS setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 1 paras[0].firstChild
+PASS setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 2 paras[1].firstChild
+PASS setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 3 foreignPara1
+PASS setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 5 detachedPara1
+PASS setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 10 foreignPara2
+FAIL setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 12 xmlElement
+FAIL setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 14 foreignTextNode
+PASS setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 15 processingInstruction
+FAIL setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 17 comment
+FAIL setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 20 doctype
+PASS setStartAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 21 foreignDoctype
+PASS setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 0 paras[0]
+PASS setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 1 paras[0].firstChild
+PASS setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 2 paras[1].firstChild
+PASS setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 3 foreignPara1
+PASS setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 5 detachedPara1
+PASS setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 10 foreignPara2
+FAIL setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 12 xmlElement
+FAIL setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 14 foreignTextNode
+PASS setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 15 processingInstruction
+FAIL setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 17 comment
+FAIL setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 20 doctype
+PASS setStartAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 21 foreignDoctype
+PASS setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 0 paras[0]
+PASS setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 1 paras[0].firstChild
+PASS setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 2 paras[1].firstChild
+PASS setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 3 foreignPara1
+PASS setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 5 detachedPara1
+PASS setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 10 foreignPara2
+FAIL setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 12 xmlElement
+FAIL setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 14 foreignTextNode
+PASS setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 15 processingInstruction
+FAIL setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 17 comment
+FAIL setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 20 doctype
+PASS setStartAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 21 foreignDoctype
+PASS setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 0 paras[0]
+PASS setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 1 paras[0].firstChild
+PASS setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 2 paras[1].firstChild
+PASS setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 3 foreignPara1
+PASS setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 5 detachedPara1
+PASS setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 10 foreignPara2
+FAIL setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 12 xmlElement
+FAIL setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 14 foreignTextNode
+PASS setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 15 processingInstruction
+FAIL setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 17 comment
+FAIL setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 20 doctype
+PASS setStartAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 21 foreignDoctype
+PASS setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 0 paras[0]
+PASS setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 1 paras[0].firstChild
+PASS setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 2 paras[1].firstChild
+PASS setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 3 foreignPara1
+PASS setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 5 detachedPara1
+PASS setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 10 foreignPara2
+FAIL setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 12 xmlElement
+FAIL setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 14 foreignTextNode
+PASS setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 15 processingInstruction
+FAIL setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 17 comment
+FAIL setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 20 doctype
+PASS setStartAfter() with range 22 [testDiv, 2, paras[4], 1], node 21 foreignDoctype
+PASS setStartAfter() with range 23 [document, 0, document, 1], node 0 paras[0]
+PASS setStartAfter() with range 23 [document, 0, document, 1], node 1 paras[0].firstChild
+PASS setStartAfter() with range 23 [document, 0, document, 1], node 2 paras[1].firstChild
+PASS setStartAfter() with range 23 [document, 0, document, 1], node 3 foreignPara1
+PASS setStartAfter() with range 23 [document, 0, document, 1], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 23 [document, 0, document, 1], node 5 detachedPara1
+PASS setStartAfter() with range 23 [document, 0, document, 1], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 23 [document, 0, document, 1], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 23 [document, 0, document, 1], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 23 [document, 0, document, 1], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 23 [document, 0, document, 1], node 10 foreignPara2
+FAIL setStartAfter() with range 23 [document, 0, document, 1], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 23 [document, 0, document, 1], node 12 xmlElement
+FAIL setStartAfter() with range 23 [document, 0, document, 1], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 23 [document, 0, document, 1], node 14 foreignTextNode
+PASS setStartAfter() with range 23 [document, 0, document, 1], node 15 processingInstruction
+FAIL setStartAfter() with range 23 [document, 0, document, 1], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 23 [document, 0, document, 1], node 17 comment
+FAIL setStartAfter() with range 23 [document, 0, document, 1], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 23 [document, 0, document, 1], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 23 [document, 0, document, 1], node 20 doctype
+PASS setStartAfter() with range 23 [document, 0, document, 1], node 21 foreignDoctype
+PASS setStartAfter() with range 24 [document, 0, document, 2], node 0 paras[0]
+PASS setStartAfter() with range 24 [document, 0, document, 2], node 1 paras[0].firstChild
+PASS setStartAfter() with range 24 [document, 0, document, 2], node 2 paras[1].firstChild
+PASS setStartAfter() with range 24 [document, 0, document, 2], node 3 foreignPara1
+PASS setStartAfter() with range 24 [document, 0, document, 2], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 24 [document, 0, document, 2], node 5 detachedPara1
+PASS setStartAfter() with range 24 [document, 0, document, 2], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 24 [document, 0, document, 2], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 24 [document, 0, document, 2], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 24 [document, 0, document, 2], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 24 [document, 0, document, 2], node 10 foreignPara2
+FAIL setStartAfter() with range 24 [document, 0, document, 2], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 24 [document, 0, document, 2], node 12 xmlElement
+FAIL setStartAfter() with range 24 [document, 0, document, 2], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 24 [document, 0, document, 2], node 14 foreignTextNode
+PASS setStartAfter() with range 24 [document, 0, document, 2], node 15 processingInstruction
+FAIL setStartAfter() with range 24 [document, 0, document, 2], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 24 [document, 0, document, 2], node 17 comment
+FAIL setStartAfter() with range 24 [document, 0, document, 2], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 24 [document, 0, document, 2], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 24 [document, 0, document, 2], node 20 doctype
+PASS setStartAfter() with range 24 [document, 0, document, 2], node 21 foreignDoctype
+PASS setStartAfter() with range 25 [comment, 2, comment, 3], node 0 paras[0]
+PASS setStartAfter() with range 25 [comment, 2, comment, 3], node 1 paras[0].firstChild
+PASS setStartAfter() with range 25 [comment, 2, comment, 3], node 2 paras[1].firstChild
+PASS setStartAfter() with range 25 [comment, 2, comment, 3], node 3 foreignPara1
+PASS setStartAfter() with range 25 [comment, 2, comment, 3], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 25 [comment, 2, comment, 3], node 5 detachedPara1
+PASS setStartAfter() with range 25 [comment, 2, comment, 3], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 25 [comment, 2, comment, 3], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 25 [comment, 2, comment, 3], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 25 [comment, 2, comment, 3], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 25 [comment, 2, comment, 3], node 10 foreignPara2
+FAIL setStartAfter() with range 25 [comment, 2, comment, 3], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 25 [comment, 2, comment, 3], node 12 xmlElement
+FAIL setStartAfter() with range 25 [comment, 2, comment, 3], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 25 [comment, 2, comment, 3], node 14 foreignTextNode
+PASS setStartAfter() with range 25 [comment, 2, comment, 3], node 15 processingInstruction
+FAIL setStartAfter() with range 25 [comment, 2, comment, 3], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 25 [comment, 2, comment, 3], node 17 comment
+FAIL setStartAfter() with range 25 [comment, 2, comment, 3], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 25 [comment, 2, comment, 3], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 25 [comment, 2, comment, 3], node 20 doctype
+PASS setStartAfter() with range 25 [comment, 2, comment, 3], node 21 foreignDoctype
+PASS setStartAfter() with range 26 [testDiv, 0, comment, 5], node 0 paras[0]
+PASS setStartAfter() with range 26 [testDiv, 0, comment, 5], node 1 paras[0].firstChild
+PASS setStartAfter() with range 26 [testDiv, 0, comment, 5], node 2 paras[1].firstChild
+PASS setStartAfter() with range 26 [testDiv, 0, comment, 5], node 3 foreignPara1
+PASS setStartAfter() with range 26 [testDiv, 0, comment, 5], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 26 [testDiv, 0, comment, 5], node 5 detachedPara1
+PASS setStartAfter() with range 26 [testDiv, 0, comment, 5], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 26 [testDiv, 0, comment, 5], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 26 [testDiv, 0, comment, 5], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 26 [testDiv, 0, comment, 5], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 26 [testDiv, 0, comment, 5], node 10 foreignPara2
+FAIL setStartAfter() with range 26 [testDiv, 0, comment, 5], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 26 [testDiv, 0, comment, 5], node 12 xmlElement
+FAIL setStartAfter() with range 26 [testDiv, 0, comment, 5], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 26 [testDiv, 0, comment, 5], node 14 foreignTextNode
+PASS setStartAfter() with range 26 [testDiv, 0, comment, 5], node 15 processingInstruction
+FAIL setStartAfter() with range 26 [testDiv, 0, comment, 5], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 26 [testDiv, 0, comment, 5], node 17 comment
+FAIL setStartAfter() with range 26 [testDiv, 0, comment, 5], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 26 [testDiv, 0, comment, 5], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 26 [testDiv, 0, comment, 5], node 20 doctype
+PASS setStartAfter() with range 26 [testDiv, 0, comment, 5], node 21 foreignDoctype
+PASS setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 0 paras[0]
+PASS setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 1 paras[0].firstChild
+PASS setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 2 paras[1].firstChild
+PASS setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 3 foreignPara1
+PASS setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 5 detachedPara1
+PASS setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 10 foreignPara2
+FAIL setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 12 xmlElement
+FAIL setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 14 foreignTextNode
+PASS setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 15 processingInstruction
+FAIL setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 17 comment
+FAIL setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 20 doctype
+PASS setStartAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 21 foreignDoctype
+PASS setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 0 paras[0]
+PASS setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 1 paras[0].firstChild
+PASS setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 2 paras[1].firstChild
+PASS setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 3 foreignPara1
+PASS setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 5 detachedPara1
+PASS setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 10 foreignPara2
+FAIL setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 12 xmlElement
+FAIL setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 14 foreignTextNode
+PASS setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 15 processingInstruction
+FAIL setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 17 comment
+FAIL setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 20 doctype
+PASS setStartAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 21 foreignDoctype
+PASS setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 0 paras[0]
+PASS setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 1 paras[0].firstChild
+PASS setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 2 paras[1].firstChild
+PASS setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 3 foreignPara1
+PASS setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 5 detachedPara1
+PASS setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 10 foreignPara2
+FAIL setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 12 xmlElement
+FAIL setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 14 foreignTextNode
+PASS setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 15 processingInstruction
+FAIL setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 17 comment
+FAIL setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 20 doctype
+PASS setStartAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 21 foreignDoctype
+PASS setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 0 paras[0]
+PASS setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 1 paras[0].firstChild
+PASS setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 2 paras[1].firstChild
+PASS setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 3 foreignPara1
+PASS setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 5 detachedPara1
+PASS setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 10 foreignPara2
+FAIL setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 12 xmlElement
+FAIL setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 14 foreignTextNode
+PASS setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 15 processingInstruction
+FAIL setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 17 comment
+FAIL setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 20 doctype
+PASS setStartAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 21 foreignDoctype
+PASS setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 0 paras[0]
+PASS setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 1 paras[0].firstChild
+PASS setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 2 paras[1].firstChild
+PASS setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 3 foreignPara1
+PASS setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 5 detachedPara1
+PASS setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 10 foreignPara2
+FAIL setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 12 xmlElement
+FAIL setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 14 foreignTextNode
+PASS setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 15 processingInstruction
+FAIL setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 17 comment
+FAIL setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 20 doctype
+PASS setStartAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 21 foreignDoctype
+PASS setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 0 paras[0]
+PASS setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 1 paras[0].firstChild
+PASS setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 2 paras[1].firstChild
+PASS setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 3 foreignPara1
+PASS setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 5 detachedPara1
+PASS setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 10 foreignPara2
+FAIL setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 12 xmlElement
+FAIL setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 14 foreignTextNode
+PASS setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 15 processingInstruction
+FAIL setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 17 comment
+FAIL setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 20 doctype
+PASS setStartAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 21 foreignDoctype
+PASS setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 0 paras[0]
+PASS setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 1 paras[0].firstChild
+PASS setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 2 paras[1].firstChild
+PASS setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 3 foreignPara1
+PASS setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 5 detachedPara1
+PASS setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 10 foreignPara2
+FAIL setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 12 xmlElement
+FAIL setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 14 foreignTextNode
+PASS setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 15 processingInstruction
+FAIL setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 17 comment
+FAIL setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 20 doctype
+PASS setStartAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 21 foreignDoctype
+PASS setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 0 paras[0]
+PASS setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 1 paras[0].firstChild
+PASS setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 2 paras[1].firstChild
+PASS setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 3 foreignPara1
+PASS setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 5 detachedPara1
+PASS setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 10 foreignPara2
+FAIL setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 12 xmlElement
+FAIL setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 14 foreignTextNode
+PASS setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 15 processingInstruction
+FAIL setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 17 comment
+FAIL setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 20 doctype
+PASS setStartAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 21 foreignDoctype
+PASS setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 0 paras[0]
+PASS setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 1 paras[0].firstChild
+PASS setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 2 paras[1].firstChild
+PASS setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 3 foreignPara1
+PASS setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 5 detachedPara1
+PASS setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 10 foreignPara2
+FAIL setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 12 xmlElement
+FAIL setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 14 foreignTextNode
+PASS setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 15 processingInstruction
+FAIL setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 17 comment
+FAIL setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 20 doctype
+PASS setStartAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 21 foreignDoctype
+PASS setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 0 paras[0]
+PASS setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 1 paras[0].firstChild
+PASS setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 2 paras[1].firstChild
+PASS setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 3 foreignPara1
+PASS setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 5 detachedPara1
+PASS setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 10 foreignPara2
+FAIL setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 12 xmlElement
+FAIL setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 14 foreignTextNode
+PASS setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 15 processingInstruction
+FAIL setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 17 comment
+FAIL setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 20 doctype
+PASS setStartAfter() with range 36 [docfrag, 0, docfrag, 0], node 21 foreignDoctype
+PASS setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 0 paras[0]
+PASS setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 1 paras[0].firstChild
+PASS setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 2 paras[1].firstChild
+PASS setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 3 foreignPara1
+PASS setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 4 foreignPara1.firstChild
+PASS setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 5 detachedPara1
+PASS setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 6 detachedPara1.firstChild
+FAIL setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 7 document assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 8 detachedDiv assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 9 foreignDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 10 foreignPara2
+FAIL setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 11 xmlDoc assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 12 xmlElement
+FAIL setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 13 detachedTextNode assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 14 foreignTextNode
+PASS setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 15 processingInstruction
+FAIL setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 16 detachedProcessingInstruction assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 17 comment
+FAIL setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 18 detachedComment assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 19 docfrag assert_throws: setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setStartAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 20 doctype
+PASS setStartAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 21 foreignDoctype
+PASS setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 0 paras[0]
+PASS setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 1 paras[0].firstChild
+PASS setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 2 paras[1].firstChild
+PASS setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 3 foreignPara1
+PASS setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 5 detachedPara1
+PASS setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 10 foreignPara2
+FAIL setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 12 xmlElement
+FAIL setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 14 foreignTextNode
+PASS setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 15 processingInstruction
+FAIL setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 17 comment
+FAIL setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 20 doctype
+PASS setEndBefore() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 21 foreignDoctype
+PASS setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 0 paras[0]
+PASS setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 1 paras[0].firstChild
+PASS setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 2 paras[1].firstChild
+PASS setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 3 foreignPara1
+PASS setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 5 detachedPara1
+PASS setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 10 foreignPara2
+FAIL setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 12 xmlElement
+FAIL setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 14 foreignTextNode
+PASS setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 15 processingInstruction
+FAIL setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 17 comment
+FAIL setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 20 doctype
+PASS setEndBefore() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 21 foreignDoctype
+PASS setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 0 paras[0]
+PASS setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 1 paras[0].firstChild
+PASS setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 2 paras[1].firstChild
+PASS setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 3 foreignPara1
+PASS setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 5 detachedPara1
+PASS setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 10 foreignPara2
+FAIL setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 12 xmlElement
+FAIL setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 14 foreignTextNode
+PASS setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 15 processingInstruction
+FAIL setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 17 comment
+FAIL setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 20 doctype
+PASS setEndBefore() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 21 foreignDoctype
+PASS setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 0 paras[0]
+PASS setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 1 paras[0].firstChild
+PASS setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 2 paras[1].firstChild
+PASS setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 3 foreignPara1
+PASS setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 5 detachedPara1
+PASS setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 10 foreignPara2
+FAIL setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 12 xmlElement
+FAIL setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 14 foreignTextNode
+PASS setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 15 processingInstruction
+FAIL setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 17 comment
+FAIL setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 20 doctype
+PASS setEndBefore() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 21 foreignDoctype
+PASS setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 0 paras[0]
+PASS setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 1 paras[0].firstChild
+PASS setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 2 paras[1].firstChild
+PASS setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 3 foreignPara1
+PASS setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 5 detachedPara1
+PASS setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 10 foreignPara2
+FAIL setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 12 xmlElement
+FAIL setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 14 foreignTextNode
+PASS setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 15 processingInstruction
+FAIL setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 17 comment
+FAIL setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 20 doctype
+PASS setEndBefore() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 21 foreignDoctype
+PASS setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 0 paras[0]
+PASS setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 1 paras[0].firstChild
+PASS setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 2 paras[1].firstChild
+PASS setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 3 foreignPara1
+PASS setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 5 detachedPara1
+PASS setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 10 foreignPara2
+FAIL setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 12 xmlElement
+FAIL setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 14 foreignTextNode
+PASS setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 15 processingInstruction
+FAIL setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 17 comment
+FAIL setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 20 doctype
+PASS setEndBefore() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 21 foreignDoctype
+PASS setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 0 paras[0]
+PASS setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 1 paras[0].firstChild
+PASS setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 2 paras[1].firstChild
+PASS setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 3 foreignPara1
+PASS setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 5 detachedPara1
+PASS setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 10 foreignPara2
+FAIL setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 12 xmlElement
+FAIL setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 14 foreignTextNode
+PASS setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 15 processingInstruction
+FAIL setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 17 comment
+FAIL setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 20 doctype
+PASS setEndBefore() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 21 foreignDoctype
+PASS setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 0 paras[0]
+PASS setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 1 paras[0].firstChild
+PASS setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 2 paras[1].firstChild
+PASS setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 3 foreignPara1
+PASS setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 5 detachedPara1
+PASS setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 10 foreignPara2
+FAIL setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 12 xmlElement
+FAIL setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 14 foreignTextNode
+PASS setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 15 processingInstruction
+FAIL setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 17 comment
+FAIL setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 20 doctype
+PASS setEndBefore() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 21 foreignDoctype
+PASS setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 0 paras[0]
+PASS setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 1 paras[0].firstChild
+PASS setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 2 paras[1].firstChild
+PASS setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 3 foreignPara1
+PASS setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 5 detachedPara1
+PASS setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 10 foreignPara2
+FAIL setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 12 xmlElement
+FAIL setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 14 foreignTextNode
+PASS setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 15 processingInstruction
+FAIL setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 17 comment
+FAIL setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 20 doctype
+PASS setEndBefore() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 21 foreignDoctype
+PASS setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 0 paras[0]
+PASS setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 1 paras[0].firstChild
+PASS setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 2 paras[1].firstChild
+PASS setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 3 foreignPara1
+PASS setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 5 detachedPara1
+PASS setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 10 foreignPara2
+FAIL setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 12 xmlElement
+FAIL setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 14 foreignTextNode
+PASS setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 15 processingInstruction
+FAIL setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 17 comment
+FAIL setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 20 doctype
+PASS setEndBefore() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 21 foreignDoctype
+PASS setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 0 paras[0]
+PASS setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 1 paras[0].firstChild
+PASS setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 2 paras[1].firstChild
+PASS setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 3 foreignPara1
+PASS setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 5 detachedPara1
+PASS setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 10 foreignPara2
+FAIL setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 12 xmlElement
+FAIL setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 14 foreignTextNode
+PASS setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 15 processingInstruction
+FAIL setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 17 comment
+FAIL setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 20 doctype
+PASS setEndBefore() with range 10 [document.documentElement, 0, document.documentElement, 1], node 21 foreignDoctype
+PASS setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 0 paras[0]
+PASS setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 1 paras[0].firstChild
+PASS setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 2 paras[1].firstChild
+PASS setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 3 foreignPara1
+PASS setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 5 detachedPara1
+PASS setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 10 foreignPara2
+FAIL setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 12 xmlElement
+FAIL setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 14 foreignTextNode
+PASS setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 15 processingInstruction
+FAIL setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 17 comment
+FAIL setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 20 doctype
+PASS setEndBefore() with range 11 [document.documentElement, 0, document.documentElement, 2], node 21 foreignDoctype
+PASS setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 0 paras[0]
+PASS setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 1 paras[0].firstChild
+PASS setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 2 paras[1].firstChild
+PASS setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 3 foreignPara1
+PASS setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 5 detachedPara1
+PASS setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 10 foreignPara2
+FAIL setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 12 xmlElement
+FAIL setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 14 foreignTextNode
+PASS setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 15 processingInstruction
+FAIL setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 17 comment
+FAIL setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 20 doctype
+PASS setEndBefore() with range 12 [document.documentElement, 1, document.documentElement, 2], node 21 foreignDoctype
+PASS setEndBefore() with range 13 [document.head, 1, document.head, 1], node 0 paras[0]
+PASS setEndBefore() with range 13 [document.head, 1, document.head, 1], node 1 paras[0].firstChild
+PASS setEndBefore() with range 13 [document.head, 1, document.head, 1], node 2 paras[1].firstChild
+PASS setEndBefore() with range 13 [document.head, 1, document.head, 1], node 3 foreignPara1
+PASS setEndBefore() with range 13 [document.head, 1, document.head, 1], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 13 [document.head, 1, document.head, 1], node 5 detachedPara1
+PASS setEndBefore() with range 13 [document.head, 1, document.head, 1], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 13 [document.head, 1, document.head, 1], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 13 [document.head, 1, document.head, 1], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 13 [document.head, 1, document.head, 1], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 13 [document.head, 1, document.head, 1], node 10 foreignPara2
+FAIL setEndBefore() with range 13 [document.head, 1, document.head, 1], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 13 [document.head, 1, document.head, 1], node 12 xmlElement
+FAIL setEndBefore() with range 13 [document.head, 1, document.head, 1], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 13 [document.head, 1, document.head, 1], node 14 foreignTextNode
+PASS setEndBefore() with range 13 [document.head, 1, document.head, 1], node 15 processingInstruction
+FAIL setEndBefore() with range 13 [document.head, 1, document.head, 1], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 13 [document.head, 1, document.head, 1], node 17 comment
+FAIL setEndBefore() with range 13 [document.head, 1, document.head, 1], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 13 [document.head, 1, document.head, 1], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 13 [document.head, 1, document.head, 1], node 20 doctype
+PASS setEndBefore() with range 13 [document.head, 1, document.head, 1], node 21 foreignDoctype
+PASS setEndBefore() with range 14 [document.body, 4, document.body, 5], node 0 paras[0]
+PASS setEndBefore() with range 14 [document.body, 4, document.body, 5], node 1 paras[0].firstChild
+PASS setEndBefore() with range 14 [document.body, 4, document.body, 5], node 2 paras[1].firstChild
+PASS setEndBefore() with range 14 [document.body, 4, document.body, 5], node 3 foreignPara1
+PASS setEndBefore() with range 14 [document.body, 4, document.body, 5], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 14 [document.body, 4, document.body, 5], node 5 detachedPara1
+PASS setEndBefore() with range 14 [document.body, 4, document.body, 5], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 14 [document.body, 4, document.body, 5], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 14 [document.body, 4, document.body, 5], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 14 [document.body, 4, document.body, 5], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 14 [document.body, 4, document.body, 5], node 10 foreignPara2
+FAIL setEndBefore() with range 14 [document.body, 4, document.body, 5], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 14 [document.body, 4, document.body, 5], node 12 xmlElement
+FAIL setEndBefore() with range 14 [document.body, 4, document.body, 5], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 14 [document.body, 4, document.body, 5], node 14 foreignTextNode
+PASS setEndBefore() with range 14 [document.body, 4, document.body, 5], node 15 processingInstruction
+FAIL setEndBefore() with range 14 [document.body, 4, document.body, 5], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 14 [document.body, 4, document.body, 5], node 17 comment
+FAIL setEndBefore() with range 14 [document.body, 4, document.body, 5], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 14 [document.body, 4, document.body, 5], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 14 [document.body, 4, document.body, 5], node 20 doctype
+PASS setEndBefore() with range 14 [document.body, 4, document.body, 5], node 21 foreignDoctype
+PASS setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 0 paras[0]
+PASS setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 1 paras[0].firstChild
+PASS setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 2 paras[1].firstChild
+PASS setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 3 foreignPara1
+PASS setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 5 detachedPara1
+PASS setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 10 foreignPara2
+FAIL setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 12 xmlElement
+FAIL setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 14 foreignTextNode
+PASS setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 15 processingInstruction
+FAIL setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 17 comment
+FAIL setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 20 doctype
+PASS setEndBefore() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 21 foreignDoctype
+PASS setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 0 paras[0]
+PASS setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 1 paras[0].firstChild
+PASS setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 2 paras[1].firstChild
+PASS setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 3 foreignPara1
+PASS setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 5 detachedPara1
+PASS setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 10 foreignPara2
+FAIL setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 12 xmlElement
+FAIL setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 14 foreignTextNode
+PASS setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 15 processingInstruction
+FAIL setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 17 comment
+FAIL setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 20 doctype
+PASS setEndBefore() with range 16 [paras[0], 0, paras[0], 1], node 21 foreignDoctype
+PASS setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 0 paras[0]
+PASS setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 1 paras[0].firstChild
+PASS setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 2 paras[1].firstChild
+PASS setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 3 foreignPara1
+PASS setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 5 detachedPara1
+PASS setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 10 foreignPara2
+FAIL setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 12 xmlElement
+FAIL setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 14 foreignTextNode
+PASS setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 15 processingInstruction
+FAIL setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 17 comment
+FAIL setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 20 doctype
+PASS setEndBefore() with range 17 [detachedPara1, 0, detachedPara1, 1], node 21 foreignDoctype
+PASS setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 0 paras[0]
+PASS setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 1 paras[0].firstChild
+PASS setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 2 paras[1].firstChild
+PASS setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 3 foreignPara1
+PASS setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 5 detachedPara1
+PASS setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 10 foreignPara2
+FAIL setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 12 xmlElement
+FAIL setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 14 foreignTextNode
+PASS setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 15 processingInstruction
+FAIL setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 17 comment
+FAIL setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 20 doctype
+PASS setEndBefore() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 21 foreignDoctype
+PASS setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 0 paras[0]
+PASS setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 1 paras[0].firstChild
+PASS setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 2 paras[1].firstChild
+PASS setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 3 foreignPara1
+PASS setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 5 detachedPara1
+PASS setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 10 foreignPara2
+FAIL setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 12 xmlElement
+FAIL setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 14 foreignTextNode
+PASS setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 15 processingInstruction
+FAIL setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 17 comment
+FAIL setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 20 doctype
+PASS setEndBefore() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 21 foreignDoctype
+PASS setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 0 paras[0]
+PASS setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 1 paras[0].firstChild
+PASS setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 2 paras[1].firstChild
+PASS setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 3 foreignPara1
+PASS setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 5 detachedPara1
+PASS setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 10 foreignPara2
+FAIL setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 12 xmlElement
+FAIL setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 14 foreignTextNode
+PASS setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 15 processingInstruction
+FAIL setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 17 comment
+FAIL setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 20 doctype
+PASS setEndBefore() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 21 foreignDoctype
+PASS setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 0 paras[0]
+PASS setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 1 paras[0].firstChild
+PASS setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 2 paras[1].firstChild
+PASS setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 3 foreignPara1
+PASS setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 5 detachedPara1
+PASS setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 10 foreignPara2
+FAIL setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 12 xmlElement
+FAIL setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 14 foreignTextNode
+PASS setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 15 processingInstruction
+FAIL setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 17 comment
+FAIL setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 20 doctype
+PASS setEndBefore() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 21 foreignDoctype
+PASS setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 0 paras[0]
+PASS setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 1 paras[0].firstChild
+PASS setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 2 paras[1].firstChild
+PASS setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 3 foreignPara1
+PASS setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 5 detachedPara1
+PASS setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 10 foreignPara2
+FAIL setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 12 xmlElement
+FAIL setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 14 foreignTextNode
+PASS setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 15 processingInstruction
+FAIL setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 17 comment
+FAIL setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 20 doctype
+PASS setEndBefore() with range 22 [testDiv, 2, paras[4], 1], node 21 foreignDoctype
+PASS setEndBefore() with range 23 [document, 0, document, 1], node 0 paras[0]
+PASS setEndBefore() with range 23 [document, 0, document, 1], node 1 paras[0].firstChild
+PASS setEndBefore() with range 23 [document, 0, document, 1], node 2 paras[1].firstChild
+PASS setEndBefore() with range 23 [document, 0, document, 1], node 3 foreignPara1
+PASS setEndBefore() with range 23 [document, 0, document, 1], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 23 [document, 0, document, 1], node 5 detachedPara1
+PASS setEndBefore() with range 23 [document, 0, document, 1], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 23 [document, 0, document, 1], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 23 [document, 0, document, 1], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 23 [document, 0, document, 1], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 23 [document, 0, document, 1], node 10 foreignPara2
+FAIL setEndBefore() with range 23 [document, 0, document, 1], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 23 [document, 0, document, 1], node 12 xmlElement
+FAIL setEndBefore() with range 23 [document, 0, document, 1], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 23 [document, 0, document, 1], node 14 foreignTextNode
+PASS setEndBefore() with range 23 [document, 0, document, 1], node 15 processingInstruction
+FAIL setEndBefore() with range 23 [document, 0, document, 1], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 23 [document, 0, document, 1], node 17 comment
+FAIL setEndBefore() with range 23 [document, 0, document, 1], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 23 [document, 0, document, 1], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 23 [document, 0, document, 1], node 20 doctype
+PASS setEndBefore() with range 23 [document, 0, document, 1], node 21 foreignDoctype
+PASS setEndBefore() with range 24 [document, 0, document, 2], node 0 paras[0]
+PASS setEndBefore() with range 24 [document, 0, document, 2], node 1 paras[0].firstChild
+PASS setEndBefore() with range 24 [document, 0, document, 2], node 2 paras[1].firstChild
+PASS setEndBefore() with range 24 [document, 0, document, 2], node 3 foreignPara1
+PASS setEndBefore() with range 24 [document, 0, document, 2], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 24 [document, 0, document, 2], node 5 detachedPara1
+PASS setEndBefore() with range 24 [document, 0, document, 2], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 24 [document, 0, document, 2], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 24 [document, 0, document, 2], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 24 [document, 0, document, 2], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 24 [document, 0, document, 2], node 10 foreignPara2
+FAIL setEndBefore() with range 24 [document, 0, document, 2], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 24 [document, 0, document, 2], node 12 xmlElement
+FAIL setEndBefore() with range 24 [document, 0, document, 2], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 24 [document, 0, document, 2], node 14 foreignTextNode
+PASS setEndBefore() with range 24 [document, 0, document, 2], node 15 processingInstruction
+FAIL setEndBefore() with range 24 [document, 0, document, 2], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 24 [document, 0, document, 2], node 17 comment
+FAIL setEndBefore() with range 24 [document, 0, document, 2], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 24 [document, 0, document, 2], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 24 [document, 0, document, 2], node 20 doctype
+PASS setEndBefore() with range 24 [document, 0, document, 2], node 21 foreignDoctype
+PASS setEndBefore() with range 25 [comment, 2, comment, 3], node 0 paras[0]
+PASS setEndBefore() with range 25 [comment, 2, comment, 3], node 1 paras[0].firstChild
+PASS setEndBefore() with range 25 [comment, 2, comment, 3], node 2 paras[1].firstChild
+PASS setEndBefore() with range 25 [comment, 2, comment, 3], node 3 foreignPara1
+PASS setEndBefore() with range 25 [comment, 2, comment, 3], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 25 [comment, 2, comment, 3], node 5 detachedPara1
+PASS setEndBefore() with range 25 [comment, 2, comment, 3], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 25 [comment, 2, comment, 3], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 25 [comment, 2, comment, 3], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 25 [comment, 2, comment, 3], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 25 [comment, 2, comment, 3], node 10 foreignPara2
+FAIL setEndBefore() with range 25 [comment, 2, comment, 3], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 25 [comment, 2, comment, 3], node 12 xmlElement
+FAIL setEndBefore() with range 25 [comment, 2, comment, 3], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 25 [comment, 2, comment, 3], node 14 foreignTextNode
+PASS setEndBefore() with range 25 [comment, 2, comment, 3], node 15 processingInstruction
+FAIL setEndBefore() with range 25 [comment, 2, comment, 3], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 25 [comment, 2, comment, 3], node 17 comment
+FAIL setEndBefore() with range 25 [comment, 2, comment, 3], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 25 [comment, 2, comment, 3], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 25 [comment, 2, comment, 3], node 20 doctype
+PASS setEndBefore() with range 25 [comment, 2, comment, 3], node 21 foreignDoctype
+PASS setEndBefore() with range 26 [testDiv, 0, comment, 5], node 0 paras[0]
+PASS setEndBefore() with range 26 [testDiv, 0, comment, 5], node 1 paras[0].firstChild
+PASS setEndBefore() with range 26 [testDiv, 0, comment, 5], node 2 paras[1].firstChild
+PASS setEndBefore() with range 26 [testDiv, 0, comment, 5], node 3 foreignPara1
+PASS setEndBefore() with range 26 [testDiv, 0, comment, 5], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 26 [testDiv, 0, comment, 5], node 5 detachedPara1
+PASS setEndBefore() with range 26 [testDiv, 0, comment, 5], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 26 [testDiv, 0, comment, 5], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 26 [testDiv, 0, comment, 5], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 26 [testDiv, 0, comment, 5], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 26 [testDiv, 0, comment, 5], node 10 foreignPara2
+FAIL setEndBefore() with range 26 [testDiv, 0, comment, 5], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 26 [testDiv, 0, comment, 5], node 12 xmlElement
+FAIL setEndBefore() with range 26 [testDiv, 0, comment, 5], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 26 [testDiv, 0, comment, 5], node 14 foreignTextNode
+PASS setEndBefore() with range 26 [testDiv, 0, comment, 5], node 15 processingInstruction
+FAIL setEndBefore() with range 26 [testDiv, 0, comment, 5], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 26 [testDiv, 0, comment, 5], node 17 comment
+FAIL setEndBefore() with range 26 [testDiv, 0, comment, 5], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 26 [testDiv, 0, comment, 5], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 26 [testDiv, 0, comment, 5], node 20 doctype
+PASS setEndBefore() with range 26 [testDiv, 0, comment, 5], node 21 foreignDoctype
+PASS setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 0 paras[0]
+PASS setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 1 paras[0].firstChild
+PASS setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 2 paras[1].firstChild
+PASS setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 3 foreignPara1
+PASS setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 5 detachedPara1
+PASS setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 10 foreignPara2
+FAIL setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 12 xmlElement
+FAIL setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 14 foreignTextNode
+PASS setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 15 processingInstruction
+FAIL setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 17 comment
+FAIL setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 20 doctype
+PASS setEndBefore() with range 27 [foreignDoc, 1, foreignComment, 2], node 21 foreignDoctype
+PASS setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 0 paras[0]
+PASS setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 1 paras[0].firstChild
+PASS setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 2 paras[1].firstChild
+PASS setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 3 foreignPara1
+PASS setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 5 detachedPara1
+PASS setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 10 foreignPara2
+FAIL setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 12 xmlElement
+FAIL setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 14 foreignTextNode
+PASS setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 15 processingInstruction
+FAIL setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 17 comment
+FAIL setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 20 doctype
+PASS setEndBefore() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 21 foreignDoctype
+PASS setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 0 paras[0]
+PASS setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 1 paras[0].firstChild
+PASS setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 2 paras[1].firstChild
+PASS setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 3 foreignPara1
+PASS setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 5 detachedPara1
+PASS setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 10 foreignPara2
+FAIL setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 12 xmlElement
+FAIL setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 14 foreignTextNode
+PASS setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 15 processingInstruction
+FAIL setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 17 comment
+FAIL setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 20 doctype
+PASS setEndBefore() with range 29 [xmlDoc, 1, xmlComment, 0], node 21 foreignDoctype
+PASS setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 0 paras[0]
+PASS setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 1 paras[0].firstChild
+PASS setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 2 paras[1].firstChild
+PASS setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 3 foreignPara1
+PASS setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 5 detachedPara1
+PASS setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 10 foreignPara2
+FAIL setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 12 xmlElement
+FAIL setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 14 foreignTextNode
+PASS setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 15 processingInstruction
+FAIL setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 17 comment
+FAIL setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 20 doctype
+PASS setEndBefore() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 21 foreignDoctype
+PASS setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 0 paras[0]
+PASS setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 1 paras[0].firstChild
+PASS setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 2 paras[1].firstChild
+PASS setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 3 foreignPara1
+PASS setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 5 detachedPara1
+PASS setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 10 foreignPara2
+FAIL setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 12 xmlElement
+FAIL setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 14 foreignTextNode
+PASS setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 15 processingInstruction
+FAIL setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 17 comment
+FAIL setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 20 doctype
+PASS setEndBefore() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 21 foreignDoctype
+PASS setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 0 paras[0]
+PASS setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 1 paras[0].firstChild
+PASS setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 2 paras[1].firstChild
+PASS setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 3 foreignPara1
+PASS setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 5 detachedPara1
+PASS setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 10 foreignPara2
+FAIL setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 12 xmlElement
+FAIL setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 14 foreignTextNode
+PASS setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 15 processingInstruction
+FAIL setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 17 comment
+FAIL setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 20 doctype
+PASS setEndBefore() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 21 foreignDoctype
+PASS setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 0 paras[0]
+PASS setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 1 paras[0].firstChild
+PASS setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 2 paras[1].firstChild
+PASS setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 3 foreignPara1
+PASS setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 5 detachedPara1
+PASS setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 10 foreignPara2
+FAIL setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 12 xmlElement
+FAIL setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 14 foreignTextNode
+PASS setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 15 processingInstruction
+FAIL setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 17 comment
+FAIL setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 20 doctype
+PASS setEndBefore() with range 33 [detachedComment, 3, detachedComment, 4], node 21 foreignDoctype
+PASS setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 0 paras[0]
+PASS setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 1 paras[0].firstChild
+PASS setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 2 paras[1].firstChild
+PASS setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 3 foreignPara1
+PASS setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 5 detachedPara1
+PASS setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 10 foreignPara2
+FAIL setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 12 xmlElement
+FAIL setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 14 foreignTextNode
+PASS setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 15 processingInstruction
+FAIL setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 17 comment
+FAIL setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 20 doctype
+PASS setEndBefore() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 21 foreignDoctype
+PASS setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 0 paras[0]
+PASS setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 1 paras[0].firstChild
+PASS setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 2 paras[1].firstChild
+PASS setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 3 foreignPara1
+PASS setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 5 detachedPara1
+PASS setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 10 foreignPara2
+FAIL setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 12 xmlElement
+FAIL setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 14 foreignTextNode
+PASS setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 15 processingInstruction
+FAIL setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 17 comment
+FAIL setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 20 doctype
+PASS setEndBefore() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 21 foreignDoctype
+PASS setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 0 paras[0]
+PASS setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 1 paras[0].firstChild
+PASS setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 2 paras[1].firstChild
+PASS setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 3 foreignPara1
+PASS setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 5 detachedPara1
+PASS setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 10 foreignPara2
+FAIL setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 12 xmlElement
+FAIL setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 14 foreignTextNode
+PASS setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 15 processingInstruction
+FAIL setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 17 comment
+FAIL setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 20 doctype
+PASS setEndBefore() with range 36 [docfrag, 0, docfrag, 0], node 21 foreignDoctype
+PASS setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 0 paras[0]
+PASS setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 1 paras[0].firstChild
+PASS setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 2 paras[1].firstChild
+PASS setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 3 foreignPara1
+PASS setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 4 foreignPara1.firstChild
+PASS setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 5 detachedPara1
+PASS setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 6 detachedPara1.firstChild
+FAIL setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 7 document assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 8 detachedDiv assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 9 foreignDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 10 foreignPara2
+FAIL setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 11 xmlDoc assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 12 xmlElement
+FAIL setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 13 detachedTextNode assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 14 foreignTextNode
+PASS setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 15 processingInstruction
+FAIL setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 16 detachedProcessingInstruction assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 17 comment
+FAIL setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 18 detachedComment assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 19 docfrag assert_throws: setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndBefore(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 20 doctype
+PASS setEndBefore() with range 37 [processingInstruction, 0, processingInstruction, 4], node 21 foreignDoctype
+PASS setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 0 paras[0]
+PASS setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 1 paras[0].firstChild
+PASS setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 2 paras[1].firstChild
+PASS setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 3 foreignPara1
+PASS setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 5 detachedPara1
+PASS setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 10 foreignPara2
+FAIL setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 12 xmlElement
+FAIL setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 14 foreignTextNode
+PASS setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 15 processingInstruction
+FAIL setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 17 comment
+FAIL setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 20 doctype
+PASS setEndAfter() with range 0 [paras[0].firstChild, 0, paras[0].firstChild, 0], node 21 foreignDoctype
+PASS setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 0 paras[0]
+PASS setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 1 paras[0].firstChild
+PASS setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 2 paras[1].firstChild
+PASS setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 3 foreignPara1
+PASS setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 5 detachedPara1
+PASS setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 10 foreignPara2
+FAIL setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 12 xmlElement
+FAIL setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 14 foreignTextNode
+PASS setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 15 processingInstruction
+FAIL setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 17 comment
+FAIL setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 20 doctype
+PASS setEndAfter() with range 1 [paras[0].firstChild, 0, paras[0].firstChild, 1], node 21 foreignDoctype
+PASS setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 0 paras[0]
+PASS setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 1 paras[0].firstChild
+PASS setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 2 paras[1].firstChild
+PASS setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 3 foreignPara1
+PASS setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 5 detachedPara1
+PASS setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 10 foreignPara2
+FAIL setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 12 xmlElement
+FAIL setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 14 foreignTextNode
+PASS setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 15 processingInstruction
+FAIL setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 17 comment
+FAIL setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 20 doctype
+PASS setEndAfter() with range 2 [paras[0].firstChild, 2, paras[0].firstChild, 8], node 21 foreignDoctype
+PASS setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 0 paras[0]
+PASS setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 1 paras[0].firstChild
+PASS setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 2 paras[1].firstChild
+PASS setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 3 foreignPara1
+PASS setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 5 detachedPara1
+PASS setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 10 foreignPara2
+FAIL setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 12 xmlElement
+FAIL setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 14 foreignTextNode
+PASS setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 15 processingInstruction
+FAIL setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 17 comment
+FAIL setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 20 doctype
+PASS setEndAfter() with range 3 [paras[0].firstChild, 2, paras[0].firstChild, 9], node 21 foreignDoctype
+PASS setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 0 paras[0]
+PASS setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 1 paras[0].firstChild
+PASS setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 2 paras[1].firstChild
+PASS setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 3 foreignPara1
+PASS setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 5 detachedPara1
+PASS setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 10 foreignPara2
+FAIL setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 12 xmlElement
+FAIL setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 14 foreignTextNode
+PASS setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 15 processingInstruction
+FAIL setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 17 comment
+FAIL setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 20 doctype
+PASS setEndAfter() with range 4 [paras[1].firstChild, 0, paras[1].firstChild, 0], node 21 foreignDoctype
+PASS setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 0 paras[0]
+PASS setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 1 paras[0].firstChild
+PASS setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 2 paras[1].firstChild
+PASS setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 3 foreignPara1
+PASS setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 5 detachedPara1
+PASS setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 10 foreignPara2
+FAIL setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 12 xmlElement
+FAIL setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 14 foreignTextNode
+PASS setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 15 processingInstruction
+FAIL setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 17 comment
+FAIL setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 20 doctype
+PASS setEndAfter() with range 5 [paras[1].firstChild, 2, paras[1].firstChild, 9], node 21 foreignDoctype
+PASS setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 0 paras[0]
+PASS setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 1 paras[0].firstChild
+PASS setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 2 paras[1].firstChild
+PASS setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 3 foreignPara1
+PASS setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 5 detachedPara1
+PASS setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 10 foreignPara2
+FAIL setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 12 xmlElement
+FAIL setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 14 foreignTextNode
+PASS setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 15 processingInstruction
+FAIL setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 17 comment
+FAIL setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 20 doctype
+PASS setEndAfter() with range 6 [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node 21 foreignDoctype
+PASS setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 0 paras[0]
+PASS setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 1 paras[0].firstChild
+PASS setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 2 paras[1].firstChild
+PASS setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 3 foreignPara1
+PASS setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 5 detachedPara1
+PASS setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 10 foreignPara2
+FAIL setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 12 xmlElement
+FAIL setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 14 foreignTextNode
+PASS setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 15 processingInstruction
+FAIL setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 17 comment
+FAIL setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 20 doctype
+PASS setEndAfter() with range 7 [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node 21 foreignDoctype
+PASS setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 0 paras[0]
+PASS setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 1 paras[0].firstChild
+PASS setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 2 paras[1].firstChild
+PASS setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 3 foreignPara1
+PASS setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 5 detachedPara1
+PASS setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 10 foreignPara2
+FAIL setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 12 xmlElement
+FAIL setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 14 foreignTextNode
+PASS setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 15 processingInstruction
+FAIL setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 17 comment
+FAIL setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 20 doctype
+PASS setEndAfter() with range 8 [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node 21 foreignDoctype
+PASS setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 0 paras[0]
+PASS setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 1 paras[0].firstChild
+PASS setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 2 paras[1].firstChild
+PASS setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 3 foreignPara1
+PASS setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 5 detachedPara1
+PASS setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 10 foreignPara2
+FAIL setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 12 xmlElement
+FAIL setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 14 foreignTextNode
+PASS setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 15 processingInstruction
+FAIL setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 17 comment
+FAIL setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 20 doctype
+PASS setEndAfter() with range 9 [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node 21 foreignDoctype
+PASS setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 0 paras[0]
+PASS setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 1 paras[0].firstChild
+PASS setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 2 paras[1].firstChild
+PASS setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 3 foreignPara1
+PASS setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 5 detachedPara1
+PASS setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 10 foreignPara2
+FAIL setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 12 xmlElement
+FAIL setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 14 foreignTextNode
+PASS setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 15 processingInstruction
+FAIL setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 17 comment
+FAIL setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 20 doctype
+PASS setEndAfter() with range 10 [document.documentElement, 0, document.documentElement, 1], node 21 foreignDoctype
+PASS setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 0 paras[0]
+PASS setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 1 paras[0].firstChild
+PASS setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 2 paras[1].firstChild
+PASS setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 3 foreignPara1
+PASS setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 5 detachedPara1
+PASS setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 10 foreignPara2
+FAIL setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 12 xmlElement
+FAIL setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 14 foreignTextNode
+PASS setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 15 processingInstruction
+FAIL setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 17 comment
+FAIL setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 20 doctype
+PASS setEndAfter() with range 11 [document.documentElement, 0, document.documentElement, 2], node 21 foreignDoctype
+PASS setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 0 paras[0]
+PASS setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 1 paras[0].firstChild
+PASS setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 2 paras[1].firstChild
+PASS setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 3 foreignPara1
+PASS setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 5 detachedPara1
+PASS setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 10 foreignPara2
+FAIL setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 12 xmlElement
+FAIL setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 14 foreignTextNode
+PASS setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 15 processingInstruction
+FAIL setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 17 comment
+FAIL setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 20 doctype
+PASS setEndAfter() with range 12 [document.documentElement, 1, document.documentElement, 2], node 21 foreignDoctype
+PASS setEndAfter() with range 13 [document.head, 1, document.head, 1], node 0 paras[0]
+PASS setEndAfter() with range 13 [document.head, 1, document.head, 1], node 1 paras[0].firstChild
+PASS setEndAfter() with range 13 [document.head, 1, document.head, 1], node 2 paras[1].firstChild
+PASS setEndAfter() with range 13 [document.head, 1, document.head, 1], node 3 foreignPara1
+PASS setEndAfter() with range 13 [document.head, 1, document.head, 1], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 13 [document.head, 1, document.head, 1], node 5 detachedPara1
+PASS setEndAfter() with range 13 [document.head, 1, document.head, 1], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 13 [document.head, 1, document.head, 1], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 13 [document.head, 1, document.head, 1], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 13 [document.head, 1, document.head, 1], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 13 [document.head, 1, document.head, 1], node 10 foreignPara2
+FAIL setEndAfter() with range 13 [document.head, 1, document.head, 1], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 13 [document.head, 1, document.head, 1], node 12 xmlElement
+FAIL setEndAfter() with range 13 [document.head, 1, document.head, 1], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 13 [document.head, 1, document.head, 1], node 14 foreignTextNode
+PASS setEndAfter() with range 13 [document.head, 1, document.head, 1], node 15 processingInstruction
+FAIL setEndAfter() with range 13 [document.head, 1, document.head, 1], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 13 [document.head, 1, document.head, 1], node 17 comment
+FAIL setEndAfter() with range 13 [document.head, 1, document.head, 1], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 13 [document.head, 1, document.head, 1], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 13 [document.head, 1, document.head, 1], node 20 doctype
+PASS setEndAfter() with range 13 [document.head, 1, document.head, 1], node 21 foreignDoctype
+PASS setEndAfter() with range 14 [document.body, 4, document.body, 5], node 0 paras[0]
+PASS setEndAfter() with range 14 [document.body, 4, document.body, 5], node 1 paras[0].firstChild
+PASS setEndAfter() with range 14 [document.body, 4, document.body, 5], node 2 paras[1].firstChild
+PASS setEndAfter() with range 14 [document.body, 4, document.body, 5], node 3 foreignPara1
+PASS setEndAfter() with range 14 [document.body, 4, document.body, 5], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 14 [document.body, 4, document.body, 5], node 5 detachedPara1
+PASS setEndAfter() with range 14 [document.body, 4, document.body, 5], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 14 [document.body, 4, document.body, 5], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 14 [document.body, 4, document.body, 5], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 14 [document.body, 4, document.body, 5], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 14 [document.body, 4, document.body, 5], node 10 foreignPara2
+FAIL setEndAfter() with range 14 [document.body, 4, document.body, 5], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 14 [document.body, 4, document.body, 5], node 12 xmlElement
+FAIL setEndAfter() with range 14 [document.body, 4, document.body, 5], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 14 [document.body, 4, document.body, 5], node 14 foreignTextNode
+PASS setEndAfter() with range 14 [document.body, 4, document.body, 5], node 15 processingInstruction
+FAIL setEndAfter() with range 14 [document.body, 4, document.body, 5], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 14 [document.body, 4, document.body, 5], node 17 comment
+FAIL setEndAfter() with range 14 [document.body, 4, document.body, 5], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 14 [document.body, 4, document.body, 5], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 14 [document.body, 4, document.body, 5], node 20 doctype
+PASS setEndAfter() with range 14 [document.body, 4, document.body, 5], node 21 foreignDoctype
+PASS setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 0 paras[0]
+PASS setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 1 paras[0].firstChild
+PASS setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 2 paras[1].firstChild
+PASS setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 3 foreignPara1
+PASS setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 5 detachedPara1
+PASS setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 10 foreignPara2
+FAIL setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 12 xmlElement
+FAIL setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 14 foreignTextNode
+PASS setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 15 processingInstruction
+FAIL setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 17 comment
+FAIL setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 20 doctype
+PASS setEndAfter() with range 15 [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node 21 foreignDoctype
+PASS setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 0 paras[0]
+PASS setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 1 paras[0].firstChild
+PASS setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 2 paras[1].firstChild
+PASS setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 3 foreignPara1
+PASS setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 5 detachedPara1
+PASS setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 10 foreignPara2
+FAIL setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 12 xmlElement
+FAIL setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 14 foreignTextNode
+PASS setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 15 processingInstruction
+FAIL setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 17 comment
+FAIL setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 20 doctype
+PASS setEndAfter() with range 16 [paras[0], 0, paras[0], 1], node 21 foreignDoctype
+PASS setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 0 paras[0]
+PASS setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 1 paras[0].firstChild
+PASS setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 2 paras[1].firstChild
+PASS setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 3 foreignPara1
+PASS setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 5 detachedPara1
+PASS setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 10 foreignPara2
+FAIL setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 12 xmlElement
+FAIL setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 14 foreignTextNode
+PASS setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 15 processingInstruction
+FAIL setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 17 comment
+FAIL setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 20 doctype
+PASS setEndAfter() with range 17 [detachedPara1, 0, detachedPara1, 1], node 21 foreignDoctype
+PASS setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 0 paras[0]
+PASS setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 1 paras[0].firstChild
+PASS setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 2 paras[1].firstChild
+PASS setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 3 foreignPara1
+PASS setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 5 detachedPara1
+PASS setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 10 foreignPara2
+FAIL setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 12 xmlElement
+FAIL setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 14 foreignTextNode
+PASS setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 15 processingInstruction
+FAIL setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 17 comment
+FAIL setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 20 doctype
+PASS setEndAfter() with range 18 [paras[0].firstChild, 0, paras[1].firstChild, 0], node 21 foreignDoctype
+PASS setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 0 paras[0]
+PASS setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 1 paras[0].firstChild
+PASS setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 2 paras[1].firstChild
+PASS setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 3 foreignPara1
+PASS setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 5 detachedPara1
+PASS setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 10 foreignPara2
+FAIL setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 12 xmlElement
+FAIL setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 14 foreignTextNode
+PASS setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 15 processingInstruction
+FAIL setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 17 comment
+FAIL setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 20 doctype
+PASS setEndAfter() with range 19 [paras[0].firstChild, 0, paras[1].firstChild, 8], node 21 foreignDoctype
+PASS setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 0 paras[0]
+PASS setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 1 paras[0].firstChild
+PASS setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 2 paras[1].firstChild
+PASS setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 3 foreignPara1
+PASS setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 5 detachedPara1
+PASS setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 10 foreignPara2
+FAIL setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 12 xmlElement
+FAIL setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 14 foreignTextNode
+PASS setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 15 processingInstruction
+FAIL setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 17 comment
+FAIL setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 20 doctype
+PASS setEndAfter() with range 20 [paras[0].firstChild, 3, paras[3], 1], node 21 foreignDoctype
+PASS setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 0 paras[0]
+PASS setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 1 paras[0].firstChild
+PASS setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 2 paras[1].firstChild
+PASS setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 3 foreignPara1
+PASS setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 5 detachedPara1
+PASS setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 10 foreignPara2
+FAIL setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 12 xmlElement
+FAIL setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 14 foreignTextNode
+PASS setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 15 processingInstruction
+FAIL setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 17 comment
+FAIL setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 20 doctype
+PASS setEndAfter() with range 21 [paras[0], 0, paras[0].firstChild, 7], node 21 foreignDoctype
+PASS setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 0 paras[0]
+PASS setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 1 paras[0].firstChild
+PASS setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 2 paras[1].firstChild
+PASS setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 3 foreignPara1
+PASS setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 5 detachedPara1
+PASS setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 10 foreignPara2
+FAIL setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 12 xmlElement
+FAIL setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 14 foreignTextNode
+PASS setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 15 processingInstruction
+FAIL setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 17 comment
+FAIL setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 20 doctype
+PASS setEndAfter() with range 22 [testDiv, 2, paras[4], 1], node 21 foreignDoctype
+PASS setEndAfter() with range 23 [document, 0, document, 1], node 0 paras[0]
+PASS setEndAfter() with range 23 [document, 0, document, 1], node 1 paras[0].firstChild
+PASS setEndAfter() with range 23 [document, 0, document, 1], node 2 paras[1].firstChild
+PASS setEndAfter() with range 23 [document, 0, document, 1], node 3 foreignPara1
+PASS setEndAfter() with range 23 [document, 0, document, 1], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 23 [document, 0, document, 1], node 5 detachedPara1
+PASS setEndAfter() with range 23 [document, 0, document, 1], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 23 [document, 0, document, 1], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 23 [document, 0, document, 1], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 23 [document, 0, document, 1], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 23 [document, 0, document, 1], node 10 foreignPara2
+FAIL setEndAfter() with range 23 [document, 0, document, 1], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 23 [document, 0, document, 1], node 12 xmlElement
+FAIL setEndAfter() with range 23 [document, 0, document, 1], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 23 [document, 0, document, 1], node 14 foreignTextNode
+PASS setEndAfter() with range 23 [document, 0, document, 1], node 15 processingInstruction
+FAIL setEndAfter() with range 23 [document, 0, document, 1], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 23 [document, 0, document, 1], node 17 comment
+FAIL setEndAfter() with range 23 [document, 0, document, 1], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 23 [document, 0, document, 1], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 23 [document, 0, document, 1], node 20 doctype
+PASS setEndAfter() with range 23 [document, 0, document, 1], node 21 foreignDoctype
+PASS setEndAfter() with range 24 [document, 0, document, 2], node 0 paras[0]
+PASS setEndAfter() with range 24 [document, 0, document, 2], node 1 paras[0].firstChild
+PASS setEndAfter() with range 24 [document, 0, document, 2], node 2 paras[1].firstChild
+PASS setEndAfter() with range 24 [document, 0, document, 2], node 3 foreignPara1
+PASS setEndAfter() with range 24 [document, 0, document, 2], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 24 [document, 0, document, 2], node 5 detachedPara1
+PASS setEndAfter() with range 24 [document, 0, document, 2], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 24 [document, 0, document, 2], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 24 [document, 0, document, 2], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 24 [document, 0, document, 2], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 24 [document, 0, document, 2], node 10 foreignPara2
+FAIL setEndAfter() with range 24 [document, 0, document, 2], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 24 [document, 0, document, 2], node 12 xmlElement
+FAIL setEndAfter() with range 24 [document, 0, document, 2], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 24 [document, 0, document, 2], node 14 foreignTextNode
+PASS setEndAfter() with range 24 [document, 0, document, 2], node 15 processingInstruction
+FAIL setEndAfter() with range 24 [document, 0, document, 2], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 24 [document, 0, document, 2], node 17 comment
+FAIL setEndAfter() with range 24 [document, 0, document, 2], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 24 [document, 0, document, 2], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 24 [document, 0, document, 2], node 20 doctype
+PASS setEndAfter() with range 24 [document, 0, document, 2], node 21 foreignDoctype
+PASS setEndAfter() with range 25 [comment, 2, comment, 3], node 0 paras[0]
+PASS setEndAfter() with range 25 [comment, 2, comment, 3], node 1 paras[0].firstChild
+PASS setEndAfter() with range 25 [comment, 2, comment, 3], node 2 paras[1].firstChild
+PASS setEndAfter() with range 25 [comment, 2, comment, 3], node 3 foreignPara1
+PASS setEndAfter() with range 25 [comment, 2, comment, 3], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 25 [comment, 2, comment, 3], node 5 detachedPara1
+PASS setEndAfter() with range 25 [comment, 2, comment, 3], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 25 [comment, 2, comment, 3], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 25 [comment, 2, comment, 3], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 25 [comment, 2, comment, 3], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 25 [comment, 2, comment, 3], node 10 foreignPara2
+FAIL setEndAfter() with range 25 [comment, 2, comment, 3], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 25 [comment, 2, comment, 3], node 12 xmlElement
+FAIL setEndAfter() with range 25 [comment, 2, comment, 3], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 25 [comment, 2, comment, 3], node 14 foreignTextNode
+PASS setEndAfter() with range 25 [comment, 2, comment, 3], node 15 processingInstruction
+FAIL setEndAfter() with range 25 [comment, 2, comment, 3], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 25 [comment, 2, comment, 3], node 17 comment
+FAIL setEndAfter() with range 25 [comment, 2, comment, 3], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 25 [comment, 2, comment, 3], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 25 [comment, 2, comment, 3], node 20 doctype
+PASS setEndAfter() with range 25 [comment, 2, comment, 3], node 21 foreignDoctype
+PASS setEndAfter() with range 26 [testDiv, 0, comment, 5], node 0 paras[0]
+PASS setEndAfter() with range 26 [testDiv, 0, comment, 5], node 1 paras[0].firstChild
+PASS setEndAfter() with range 26 [testDiv, 0, comment, 5], node 2 paras[1].firstChild
+PASS setEndAfter() with range 26 [testDiv, 0, comment, 5], node 3 foreignPara1
+PASS setEndAfter() with range 26 [testDiv, 0, comment, 5], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 26 [testDiv, 0, comment, 5], node 5 detachedPara1
+PASS setEndAfter() with range 26 [testDiv, 0, comment, 5], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 26 [testDiv, 0, comment, 5], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 26 [testDiv, 0, comment, 5], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 26 [testDiv, 0, comment, 5], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 26 [testDiv, 0, comment, 5], node 10 foreignPara2
+FAIL setEndAfter() with range 26 [testDiv, 0, comment, 5], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 26 [testDiv, 0, comment, 5], node 12 xmlElement
+FAIL setEndAfter() with range 26 [testDiv, 0, comment, 5], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 26 [testDiv, 0, comment, 5], node 14 foreignTextNode
+PASS setEndAfter() with range 26 [testDiv, 0, comment, 5], node 15 processingInstruction
+FAIL setEndAfter() with range 26 [testDiv, 0, comment, 5], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 26 [testDiv, 0, comment, 5], node 17 comment
+FAIL setEndAfter() with range 26 [testDiv, 0, comment, 5], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 26 [testDiv, 0, comment, 5], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 26 [testDiv, 0, comment, 5], node 20 doctype
+PASS setEndAfter() with range 26 [testDiv, 0, comment, 5], node 21 foreignDoctype
+PASS setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 0 paras[0]
+PASS setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 1 paras[0].firstChild
+PASS setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 2 paras[1].firstChild
+PASS setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 3 foreignPara1
+PASS setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 5 detachedPara1
+PASS setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 10 foreignPara2
+FAIL setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 12 xmlElement
+FAIL setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 14 foreignTextNode
+PASS setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 15 processingInstruction
+FAIL setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 17 comment
+FAIL setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 20 doctype
+PASS setEndAfter() with range 27 [foreignDoc, 1, foreignComment, 2], node 21 foreignDoctype
+PASS setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 0 paras[0]
+PASS setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 1 paras[0].firstChild
+PASS setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 2 paras[1].firstChild
+PASS setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 3 foreignPara1
+PASS setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 5 detachedPara1
+PASS setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 10 foreignPara2
+FAIL setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 12 xmlElement
+FAIL setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 14 foreignTextNode
+PASS setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 15 processingInstruction
+FAIL setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 17 comment
+FAIL setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 20 doctype
+PASS setEndAfter() with range 28 [foreignDoc.body, 0, foreignTextNode, 36], node 21 foreignDoctype
+PASS setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 0 paras[0]
+PASS setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 1 paras[0].firstChild
+PASS setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 2 paras[1].firstChild
+PASS setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 3 foreignPara1
+PASS setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 5 detachedPara1
+PASS setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 10 foreignPara2
+FAIL setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 12 xmlElement
+FAIL setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 14 foreignTextNode
+PASS setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 15 processingInstruction
+FAIL setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 17 comment
+FAIL setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 20 doctype
+PASS setEndAfter() with range 29 [xmlDoc, 1, xmlComment, 0], node 21 foreignDoctype
+PASS setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 0 paras[0]
+PASS setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 1 paras[0].firstChild
+PASS setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 2 paras[1].firstChild
+PASS setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 3 foreignPara1
+PASS setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 5 detachedPara1
+PASS setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 10 foreignPara2
+FAIL setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 12 xmlElement
+FAIL setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 14 foreignTextNode
+PASS setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 15 processingInstruction
+FAIL setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 17 comment
+FAIL setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 20 doctype
+PASS setEndAfter() with range 30 [detachedTextNode, 0, detachedTextNode, 8], node 21 foreignDoctype
+PASS setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 0 paras[0]
+PASS setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 1 paras[0].firstChild
+PASS setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 2 paras[1].firstChild
+PASS setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 3 foreignPara1
+PASS setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 5 detachedPara1
+PASS setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 10 foreignPara2
+FAIL setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 12 xmlElement
+FAIL setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 14 foreignTextNode
+PASS setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 15 processingInstruction
+FAIL setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 17 comment
+FAIL setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 20 doctype
+PASS setEndAfter() with range 31 [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node 21 foreignDoctype
+PASS setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 0 paras[0]
+PASS setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 1 paras[0].firstChild
+PASS setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 2 paras[1].firstChild
+PASS setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 3 foreignPara1
+PASS setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 5 detachedPara1
+PASS setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 10 foreignPara2
+FAIL setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 12 xmlElement
+FAIL setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 14 foreignTextNode
+PASS setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 15 processingInstruction
+FAIL setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 17 comment
+FAIL setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 20 doctype
+PASS setEndAfter() with range 32 [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node 21 foreignDoctype
+PASS setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 0 paras[0]
+PASS setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 1 paras[0].firstChild
+PASS setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 2 paras[1].firstChild
+PASS setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 3 foreignPara1
+PASS setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 5 detachedPara1
+PASS setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 10 foreignPara2
+FAIL setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 12 xmlElement
+FAIL setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 14 foreignTextNode
+PASS setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 15 processingInstruction
+FAIL setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 17 comment
+FAIL setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 20 doctype
+PASS setEndAfter() with range 33 [detachedComment, 3, detachedComment, 4], node 21 foreignDoctype
+PASS setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 0 paras[0]
+PASS setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 1 paras[0].firstChild
+PASS setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 2 paras[1].firstChild
+PASS setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 3 foreignPara1
+PASS setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 5 detachedPara1
+PASS setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 10 foreignPara2
+FAIL setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 12 xmlElement
+FAIL setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 14 foreignTextNode
+PASS setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 15 processingInstruction
+FAIL setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 17 comment
+FAIL setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 20 doctype
+PASS setEndAfter() with range 34 [detachedForeignComment, 0, detachedForeignComment, 1], node 21 foreignDoctype
+PASS setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 0 paras[0]
+PASS setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 1 paras[0].firstChild
+PASS setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 2 paras[1].firstChild
+PASS setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 3 foreignPara1
+PASS setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 5 detachedPara1
+PASS setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 10 foreignPara2
+FAIL setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 12 xmlElement
+FAIL setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 14 foreignTextNode
+PASS setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 15 processingInstruction
+FAIL setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 17 comment
+FAIL setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 20 doctype
+PASS setEndAfter() with range 35 [detachedXmlComment, 2, detachedXmlComment, 6], node 21 foreignDoctype
+PASS setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 0 paras[0]
+PASS setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 1 paras[0].firstChild
+PASS setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 2 paras[1].firstChild
+PASS setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 3 foreignPara1
+PASS setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 5 detachedPara1
+PASS setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 10 foreignPara2
+FAIL setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 12 xmlElement
+FAIL setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 14 foreignTextNode
+PASS setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 15 processingInstruction
+FAIL setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 17 comment
+FAIL setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 20 doctype
+PASS setEndAfter() with range 36 [docfrag, 0, docfrag, 0], node 21 foreignDoctype
+PASS setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 0 paras[0]
+PASS setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 1 paras[0].firstChild
+PASS setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 2 paras[1].firstChild
+PASS setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 3 foreignPara1
+PASS setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 4 foreignPara1.firstChild
+PASS setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 5 detachedPara1
+PASS setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 6 detachedPara1.firstChild
+FAIL setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 7 document assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 8 detachedDiv assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 9 foreignDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 10 foreignPara2
+FAIL setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 11 xmlDoc assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 12 xmlElement
+FAIL setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 13 detachedTextNode assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 14 foreignTextNode
+PASS setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 15 processingInstruction
+FAIL setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 16 detachedProcessingInstruction assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 17 comment
+FAIL setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 18 detachedComment assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+FAIL setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 19 docfrag assert_throws: setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR function "function () {
+ range.setEndAfter(node);
+ }" threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 20 doctype
+PASS setEndAfter() with range 37 [processingInstruction, 0, processingInstruction, 4], node 21 foreignDoctype
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangesethtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-set.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-set.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-set.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,221 @@
</span><ins>+<!doctype html>
+<title>Range setting tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+function testSetStart(range, node, offset) {
+ if (node.nodeType == Node.DOCUMENT_TYPE_NODE) {
+ assert_throws("INVALID_NODE_TYPE_ERR", function() {
+ range.setStart(node, offset);
+ }, "setStart() to a doctype must throw INVALID_NODE_TYPE_ERR");
+ return;
+ }
+
+ if (offset < 0 || offset > nodeLength(node)) {
+ assert_throws("INDEX_SIZE_ERR", function() {
+ range.setStart(node, offset);
+ }, "setStart() to a too-large offset must throw INDEX_SIZE_ERR");
+ return;
+ }
+
+ var newRange = range.cloneRange();
+ newRange.setStart(node, offset);
+
+ assert_equals(newRange.startContainer, node,
+ "setStart() must change startContainer to the new node");
+ assert_equals(newRange.startOffset, offset,
+ "setStart() must change startOffset to the new offset");
+
+ // FIXME: I'm assuming comparePoint() is correct, but the tests for that
+ // will depend on setStart()/setEnd().
+ if (furthestAncestor(node) != furthestAncestor(range.startContainer)
+ || range.comparePoint(node, offset) > 0) {
+ assert_equals(newRange.endContainer, node,
+ "setStart(node, offset) where node is after current end or in different document must set the end node to node too");
+ assert_equals(newRange.endOffset, offset,
+ "setStart(node, offset) where node is after current end or in different document must set the end offset to offset too");
+ } else {
+ assert_equals(newRange.endContainer, range.endContainer,
+ "setStart() must not change the end node if the new start is before the old end");
+ assert_equals(newRange.endOffset, range.endOffset,
+ "setStart() must not change the end offset if the new start is before the old end");
+ }
+}
+
+function testSetEnd(range, node, offset) {
+ if (node.nodeType == Node.DOCUMENT_TYPE_NODE) {
+ assert_throws("INVALID_NODE_TYPE_ERR", function() {
+ range.setEnd(node, offset);
+ }, "setEnd() to a doctype must throw INVALID_NODE_TYPE_ERR");
+ return;
+ }
+
+ if (offset < 0 || offset > nodeLength(node)) {
+ assert_throws("INDEX_SIZE_ERR", function() {
+ range.setEnd(node, offset);
+ }, "setEnd() to a too-large offset must throw INDEX_SIZE_ERR");
+ return;
+ }
+
+ var newRange = range.cloneRange();
+ newRange.setEnd(node, offset);
+
+ // FIXME: I'm assuming comparePoint() is correct, but the tests for that
+ // will depend on setStart()/setEnd().
+ if (furthestAncestor(node) != furthestAncestor(range.startContainer)
+ || range.comparePoint(node, offset) < 0) {
+ assert_equals(newRange.startContainer, node,
+ "setEnd(node, offset) where node is before current start or in different document must set the end node to node too");
+ assert_equals(newRange.startOffset, offset,
+ "setEnd(node, offset) where node is before current start or in different document must set the end offset to offset too");
+ } else {
+ assert_equals(newRange.startContainer, range.startContainer,
+ "setEnd() must not change the start node if the new end is after the old start");
+ assert_equals(newRange.startOffset, range.startOffset,
+ "setEnd() must not change the start offset if the new end is after the old start");
+ }
+
+ assert_equals(newRange.endContainer, node,
+ "setEnd() must change endContainer to the new node");
+ assert_equals(newRange.endOffset, offset,
+ "setEnd() must change endOffset to the new offset");
+}
+
+function testSetStartBefore(range, node) {
+ var parent = node.parentNode;
+ if (parent === null) {
+ assert_throws("INVALID_NODE_TYPE_ERR", function () {
+ range.setStartBefore(node);
+ }, "setStartBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR");
+ return;
+ }
+
+ var idx = 0;
+ while (node.parentNode.childNodes[idx] != node) {
+ idx++;
+ }
+
+ testSetStart(range, node.parentNode, idx);
+}
+
+function testSetStartAfter(range, node) {
+ var parent = node.parentNode;
+ if (parent === null) {
+ assert_throws("INVALID_NODE_TYPE_ERR", function () {
+ range.setStartAfter(node);
+ }, "setStartAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR");
+ return;
+ }
+
+ var idx = 0;
+ while (node.parentNode.childNodes[idx] != node) {
+ idx++;
+ }
+
+ testSetStart(range, node.parentNode, idx + 1);
+}
+
+function testSetEndBefore(range, node) {
+ var parent = node.parentNode;
+ if (parent === null) {
+ assert_throws("INVALID_NODE_TYPE_ERR", function () {
+ range.setEndBefore(node);
+ }, "setEndBefore() to a node with null parent must throw INVALID_NODE_TYPE_ERR");
+ return;
+ }
+
+ var idx = 0;
+ while (node.parentNode.childNodes[idx] != node) {
+ idx++;
+ }
+
+ testSetEnd(range, node.parentNode, idx);
+}
+
+function testSetEndAfter(range, node) {
+ var parent = node.parentNode;
+ if (parent === null) {
+ assert_throws("INVALID_NODE_TYPE_ERR", function () {
+ range.setEndAfter(node);
+ }, "setEndAfter() to a node with null parent must throw INVALID_NODE_TYPE_ERR");
+ return;
+ }
+
+ var idx = 0;
+ while (node.parentNode.childNodes[idx] != node) {
+ idx++;
+ }
+
+ testSetEnd(range, node.parentNode, idx + 1);
+}
+
+
+var startTests = [];
+var endTests = [];
+var startBeforeTests = [];
+var startAfterTests = [];
+var endBeforeTests = [];
+var endAfterTests = [];
+
+// Don't want to eval() each point a bazillion times
+var testPointsCached = testPoints.map(eval);
+var testNodesCached = testNodesShort.map(eval);
+
+for (var i = 0; i < testRangesShort.length; i++) {
+ var endpoints = eval(testRangesShort[i]);
+ var range;
+ test(function() {
+ range = ownerDocument(endpoints[0]).createRange();
+ range.setStart(endpoints[0], endpoints[1]);
+ range.setEnd(endpoints[2], endpoints[3]);
+ }, "Set up range " + i + " " + testRangesShort[i]);
+
+ for (var j = 0; j < testPoints.length; j++) {
+ startTests.push(["setStart() with range " + i + " " + testRangesShort[i] + ", point " + j + " " + testPoints[j],
+ range,
+ testPointsCached[j][0],
+ testPointsCached[j][1]
+ ]);
+ endTests.push(["setEnd() with range " + i + " " + testRangesShort[i] + ", point " + j + " " + testPoints[j],
+ range,
+ testPointsCached[j][0],
+ testPointsCached[j][1]
+ ]);
+ }
+
+ for (var j = 0; j < testNodesShort.length; j++) {
+ startBeforeTests.push(["setStartBefore() with range " + i + " " + testRangesShort[i] + ", node " + j + " " + testNodesShort[j],
+ range,
+ testNodesCached[j]
+ ]);
+ startAfterTests.push(["setStartAfter() with range " + i + " " + testRangesShort[i] + ", node " + j + " " + testNodesShort[j],
+ range,
+ testNodesCached[j]
+ ]);
+ endBeforeTests.push(["setEndBefore() with range " + i + " " + testRangesShort[i] + ", node " + j + " " + testNodesShort[j],
+ range,
+ testNodesCached[j]
+ ]);
+ endAfterTests.push(["setEndAfter() with range " + i + " " + testRangesShort[i] + ", node " + j + " " + testNodesShort[j],
+ range,
+ testNodesCached[j]
+ ]);
+ }
+}
+
+generate_tests(testSetStart, startTests);
+generate_tests(testSetEnd, endTests);
+generate_tests(testSetStartBefore, startBeforeTests);
+generate_tests(testSetStartAfter, startAfterTests);
+generate_tests(testSetEndBefore, endBeforeTests);
+generate_tests(testSetEndAfter, endAfterTests);
+
+testDiv.style.display = "none";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangesurroundContentsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-surroundContents-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-surroundContents-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-surroundContents-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,2396 @@
</span><ins>+To debug test failures, add a query parameter "subtest" with the test id (like "?subtest=5,16"). Only that test will be run. Then you can look at the resulting iframes in the DOM.
+
+
+FAIL 0,0: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node paras[0] assert_true: First differing node: expected Element node <p id="b" style="display:none">Ijklmnop
+</p>, got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 0,0: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node paras[0] assert_true: First differing node: expected Element node <p id="b" style="display:none">Ijklmnop
+</p>, got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 0,1: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node paras[0].firstChild assert_true: First differing node: expected Text node "", got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 0,1: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node paras[0].firstChild assert_true: First differing node: expected Text node "", got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 0,2: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node paras[1].firstChild
+FAIL 0,2: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node paras[1].firstChild assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 0,3: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignPara1
+PASS 0,3: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignPara1
+PASS 0,4: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignPara1.firstChild
+FAIL 0,4: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignPara1.firstChild assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 0,5: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedPara1
+PASS 0,5: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedPara1
+PASS 0,6: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedPara1.firstChild
+FAIL 0,6: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedPara1.firstChild assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+FAIL 0,7: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 0,7: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node document
+PASS 0,8: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedDiv
+PASS 0,8: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedDiv
+FAIL 0,9: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 0,9: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignDoc
+PASS 0,10: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignPara2
+PASS 0,10: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignPara2
+FAIL 0,11: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 0,11: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node xmlDoc
+PASS 0,12: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node xmlElement
+PASS 0,12: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node xmlElement
+PASS 0,13: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedTextNode
+FAIL 0,13: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedTextNode assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 0,14: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignTextNode
+FAIL 0,14: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignTextNode assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 0,15: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node processingInstruction
+FAIL 0,15: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node processingInstruction assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 0,16: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedProcessingInstruction
+FAIL 0,16: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedProcessingInstruction assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 0,17: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node comment
+FAIL 0,17: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node comment assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 0,18: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedComment
+FAIL 0,18: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node detachedComment assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+FAIL 0,19: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 0,19: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node docfrag
+FAIL 0,20: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 0,20: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node doctype
+FAIL 0,21: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 0,21: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 0], node foreignDoctype
+FAIL 1,0: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node paras[0] assert_true: First differing node: expected Element node <p id="b" style="display:none">Ijklmnop
+</p>, got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 1,0: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node paras[0] assert_true: First differing node: expected Element node <p id="b" style="display:none">Ijklmnop
+</p>, got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 1,1: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node paras[0].firstChild assert_true: First differing node: expected Text node "", got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 1,1: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node paras[0].firstChild assert_true: First differing node: expected Text node "", got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 1,2: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node paras[1].firstChild
+FAIL 1,2: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node paras[1].firstChild assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 1,3: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignPara1
+PASS 1,3: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignPara1
+PASS 1,4: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignPara1.firstChild
+FAIL 1,4: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignPara1.firstChild assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 1,5: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedPara1
+PASS 1,5: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedPara1
+PASS 1,6: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedPara1.firstChild
+FAIL 1,6: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedPara1.firstChild assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+FAIL 1,7: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 1,7: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node document
+PASS 1,8: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedDiv
+PASS 1,8: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedDiv
+FAIL 1,9: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 1,9: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignDoc
+PASS 1,10: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignPara2
+PASS 1,10: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignPara2
+FAIL 1,11: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 1,11: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node xmlDoc
+PASS 1,12: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node xmlElement
+PASS 1,12: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node xmlElement
+PASS 1,13: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedTextNode
+FAIL 1,13: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedTextNode assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 1,14: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignTextNode
+FAIL 1,14: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignTextNode assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 1,15: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node processingInstruction
+FAIL 1,15: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node processingInstruction assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 1,16: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedProcessingInstruction
+FAIL 1,16: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedProcessingInstruction assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 1,17: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node comment
+FAIL 1,17: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node comment assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 1,18: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedComment
+FAIL 1,18: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node detachedComment assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+FAIL 1,19: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 1,19: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node docfrag
+FAIL 1,20: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 1,20: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node doctype
+FAIL 1,21: resulting DOM for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 1,21: resulting range position for range [paras[0].firstChild, 0, paras[0].firstChild, 1], node foreignDoctype
+FAIL 2,0: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node paras[0] assert_true: First differing node: expected Element node <p id="b" style="display:none">Ijklmnop
+</p>, got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 2,0: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node paras[0] assert_true: First differing node: expected Element node <p id="b" style="display:none">Ijklmnop
+</p>, got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 2,1: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node paras[0].firstChild assert_true: First differing node: expected Text node "Ä", got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 2,1: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node paras[0].firstChild assert_true: First differing node: expected Text node "Ä", got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 2,2: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node paras[1].firstChild
+PASS 2,2: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node paras[1].firstChild
+PASS 2,3: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignPara1
+PASS 2,3: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignPara1
+PASS 2,4: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignPara1.firstChild
+PASS 2,4: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignPara1.firstChild
+PASS 2,5: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedPara1
+PASS 2,5: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedPara1
+PASS 2,6: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedPara1.firstChild
+PASS 2,6: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedPara1.firstChild
+FAIL 2,7: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 2,7: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node document
+PASS 2,8: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedDiv
+PASS 2,8: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedDiv
+FAIL 2,9: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 2,9: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignDoc
+PASS 2,10: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignPara2
+PASS 2,10: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignPara2
+FAIL 2,11: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 2,11: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node xmlDoc
+PASS 2,12: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node xmlElement
+PASS 2,12: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node xmlElement
+PASS 2,13: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedTextNode
+PASS 2,13: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedTextNode
+PASS 2,14: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignTextNode
+PASS 2,14: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignTextNode
+PASS 2,15: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node processingInstruction
+PASS 2,15: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node processingInstruction
+PASS 2,16: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedProcessingInstruction
+PASS 2,16: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedProcessingInstruction
+PASS 2,17: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node comment
+PASS 2,17: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node comment
+PASS 2,18: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedComment
+PASS 2,18: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node detachedComment
+FAIL 2,19: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 2,19: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node docfrag
+FAIL 2,20: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 2,20: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node doctype
+FAIL 2,21: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 2,21: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 8], node foreignDoctype
+FAIL 3,0: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node paras[0] assert_true: First differing node: expected Element node <p id="b" style="display:none">Ijklmnop
+</p>, got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 3,0: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node paras[0] assert_true: First differing node: expected Element node <p id="b" style="display:none">Ijklmnop
+</p>, got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 3,1: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node paras[0].firstChild assert_true: First differing node: expected Text node "Ä", got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 3,1: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node paras[0].firstChild assert_true: First differing node: expected Text node "Ä", got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 3,2: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node paras[1].firstChild
+PASS 3,2: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node paras[1].firstChild
+PASS 3,3: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignPara1
+PASS 3,3: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignPara1
+PASS 3,4: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignPara1.firstChild
+PASS 3,4: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignPara1.firstChild
+PASS 3,5: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedPara1
+PASS 3,5: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedPara1
+PASS 3,6: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedPara1.firstChild
+PASS 3,6: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedPara1.firstChild
+FAIL 3,7: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 3,7: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node document
+PASS 3,8: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedDiv
+PASS 3,8: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedDiv
+FAIL 3,9: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 3,9: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignDoc
+PASS 3,10: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignPara2
+PASS 3,10: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignPara2
+FAIL 3,11: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 3,11: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node xmlDoc
+PASS 3,12: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node xmlElement
+PASS 3,12: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node xmlElement
+PASS 3,13: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedTextNode
+PASS 3,13: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedTextNode
+PASS 3,14: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignTextNode
+PASS 3,14: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignTextNode
+PASS 3,15: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node processingInstruction
+PASS 3,15: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node processingInstruction
+PASS 3,16: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedProcessingInstruction
+PASS 3,16: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedProcessingInstruction
+PASS 3,17: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node comment
+PASS 3,17: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node comment
+PASS 3,18: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedComment
+PASS 3,18: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node detachedComment
+FAIL 3,19: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 3,19: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node docfrag
+FAIL 3,20: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 3,20: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node doctype
+FAIL 3,21: resulting DOM for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 3,21: resulting range position for range [paras[0].firstChild, 2, paras[0].firstChild, 9], node foreignDoctype
+PASS 4,0: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node paras[0]
+PASS 4,0: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node paras[0]
+PASS 4,1: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node paras[0].firstChild
+FAIL 4,1: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node paras[0].firstChild assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+FAIL 4,2: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node paras[1].firstChild assert_true: First differing node: expected Text node "", got Text node "Ijklmnop
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 4,2: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node paras[1].firstChild assert_true: First differing node: expected Text node "", got Text node "Ijklmnop
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 4,3: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignPara1
+PASS 4,3: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignPara1
+PASS 4,4: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignPara1.firstChild
+FAIL 4,4: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignPara1.firstChild assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 4,5: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedPara1
+PASS 4,5: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedPara1
+PASS 4,6: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedPara1.firstChild
+FAIL 4,6: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedPara1.firstChild assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+FAIL 4,7: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 4,7: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node document
+PASS 4,8: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedDiv
+PASS 4,8: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedDiv
+FAIL 4,9: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 4,9: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignDoc
+PASS 4,10: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignPara2
+PASS 4,10: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignPara2
+FAIL 4,11: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 4,11: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node xmlDoc
+PASS 4,12: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node xmlElement
+PASS 4,12: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node xmlElement
+PASS 4,13: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedTextNode
+FAIL 4,13: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedTextNode assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 4,14: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignTextNode
+FAIL 4,14: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignTextNode assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 4,15: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node processingInstruction
+FAIL 4,15: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node processingInstruction assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 4,16: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedProcessingInstruction
+FAIL 4,16: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedProcessingInstruction assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 4,17: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node comment
+FAIL 4,17: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node comment assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 4,18: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedComment
+FAIL 4,18: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node detachedComment assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+FAIL 4,19: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 4,19: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node docfrag
+FAIL 4,20: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 4,20: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node doctype
+FAIL 4,21: resulting DOM for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 4,21: resulting range position for range [paras[1].firstChild, 0, paras[1].firstChild, 0], node foreignDoctype
+PASS 5,0: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node paras[0]
+PASS 5,0: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node paras[0]
+PASS 5,1: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node paras[0].firstChild
+PASS 5,1: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node paras[0].firstChild
+FAIL 5,2: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node paras[1].firstChild assert_true: First differing node: expected Text node "Ij", got Text node "Ijklmnop
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 5,2: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node paras[1].firstChild assert_true: First differing node: expected Text node "Ij", got Text node "Ijklmnop
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 5,3: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignPara1
+PASS 5,3: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignPara1
+PASS 5,4: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignPara1.firstChild
+PASS 5,4: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignPara1.firstChild
+PASS 5,5: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedPara1
+PASS 5,5: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedPara1
+PASS 5,6: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedPara1.firstChild
+PASS 5,6: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedPara1.firstChild
+FAIL 5,7: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 5,7: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node document
+PASS 5,8: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedDiv
+PASS 5,8: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedDiv
+FAIL 5,9: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 5,9: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignDoc
+PASS 5,10: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignPara2
+PASS 5,10: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignPara2
+FAIL 5,11: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 5,11: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node xmlDoc
+PASS 5,12: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node xmlElement
+PASS 5,12: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node xmlElement
+PASS 5,13: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedTextNode
+PASS 5,13: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedTextNode
+PASS 5,14: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignTextNode
+PASS 5,14: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignTextNode
+PASS 5,15: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node processingInstruction
+PASS 5,15: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node processingInstruction
+PASS 5,16: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedProcessingInstruction
+PASS 5,16: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedProcessingInstruction
+PASS 5,17: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node comment
+PASS 5,17: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node comment
+PASS 5,18: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedComment
+PASS 5,18: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node detachedComment
+FAIL 5,19: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 5,19: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node docfrag
+FAIL 5,20: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 5,20: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node doctype
+FAIL 5,21: resulting DOM for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 5,21: resulting range position for range [paras[1].firstChild, 2, paras[1].firstChild, 9], node foreignDoctype
+FAIL 6,0: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node paras[0] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL 6,0: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node paras[0] assert_equals: Unexpected startOffset after surroundContents() expected 1 but got 0
+PASS 6,1: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node paras[0].firstChild
+FAIL 6,1: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node paras[0].firstChild assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 6,2: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node paras[1].firstChild
+FAIL 6,2: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node paras[1].firstChild assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+FAIL 6,3: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignPara1 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL 6,3: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignPara1 assert_equals: Unexpected startOffset after surroundContents() expected 1 but got 0
+PASS 6,4: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignPara1.firstChild
+FAIL 6,4: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignPara1.firstChild assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+FAIL 6,5: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedPara1 assert_true: First differing node: expected Element node <p>Wxyzabcd</p>, got Text node "Opqrstuv" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 6,5: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedPara1 assert_true: First differing node: expected Element node <p>Wxyzabcd</p>, got Text node "Opqrstuv" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 6,6: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Opqrstuv" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 6,6: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Opqrstuv" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 6,7: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 6,7: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node document
+FAIL 6,8: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedDiv assert_unreached: DOMs were not equal but we couldn't figure out why Reached unreachable code
+FAIL 6,8: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedDiv assert_unreached: DOMs were not equal but we couldn't figure out why Reached unreachable code
+FAIL 6,9: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 6,9: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignDoc
+FAIL 6,10: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignPara2 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL 6,10: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignPara2 assert_equals: Unexpected startOffset after surroundContents() expected 1 but got 0
+FAIL 6,11: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 6,11: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node xmlDoc
+FAIL 6,12: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node xmlElement INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL 6,12: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node xmlElement assert_equals: Unexpected startOffset after surroundContents() expected 1 but got 0
+PASS 6,13: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedTextNode
+FAIL 6,13: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedTextNode assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 6,14: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignTextNode
+FAIL 6,14: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignTextNode assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 6,15: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node processingInstruction
+FAIL 6,15: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node processingInstruction assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 6,16: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedProcessingInstruction
+FAIL 6,16: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedProcessingInstruction assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 6,17: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node comment
+FAIL 6,17: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node comment assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 6,18: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedComment
+FAIL 6,18: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node detachedComment assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+FAIL 6,19: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 6,19: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node docfrag
+FAIL 6,20: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 6,20: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node doctype
+FAIL 6,21: resulting DOM for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 6,21: resulting range position for range [detachedPara1.firstChild, 0, detachedPara1.firstChild, 0], node foreignDoctype
+FAIL 7,0: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node paras[0] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL 7,0: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node paras[0] assert_equals: Unexpected startOffset after surroundContents() expected 1 but got 2
+PASS 7,1: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node paras[0].firstChild
+PASS 7,1: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node paras[0].firstChild
+PASS 7,2: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node paras[1].firstChild
+PASS 7,2: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node paras[1].firstChild
+FAIL 7,3: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignPara1 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL 7,3: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignPara1 assert_equals: Unexpected startOffset after surroundContents() expected 1 but got 2
+PASS 7,4: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignPara1.firstChild
+PASS 7,4: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignPara1.firstChild
+FAIL 7,5: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedPara1 assert_true: First differing node: expected Element node <p>Wxyzabcd</p>, got Text node "Opqrstuv" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 7,5: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedPara1 assert_true: First differing node: expected Element node <p>Wxyzabcd</p>, got Text node "Opqrstuv" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 7,6: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedPara1.firstChild assert_true: First differing node: expected Text node "Op", got Text node "Opqrstuv" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 7,6: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedPara1.firstChild assert_true: First differing node: expected Text node "Op", got Text node "Opqrstuv" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 7,7: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 7,7: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node document
+FAIL 7,8: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedDiv assert_unreached: DOMs were not equal but we couldn't figure out why Reached unreachable code
+FAIL 7,8: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedDiv assert_unreached: DOMs were not equal but we couldn't figure out why Reached unreachable code
+FAIL 7,9: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 7,9: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignDoc
+FAIL 7,10: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignPara2 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL 7,10: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignPara2 assert_equals: Unexpected startOffset after surroundContents() expected 1 but got 2
+FAIL 7,11: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 7,11: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node xmlDoc
+FAIL 7,12: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node xmlElement INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+FAIL 7,12: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node xmlElement assert_equals: Unexpected startOffset after surroundContents() expected 1 but got 2
+PASS 7,13: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedTextNode
+PASS 7,13: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedTextNode
+PASS 7,14: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignTextNode
+PASS 7,14: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignTextNode
+PASS 7,15: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node processingInstruction
+PASS 7,15: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node processingInstruction
+PASS 7,16: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedProcessingInstruction
+PASS 7,16: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedProcessingInstruction
+PASS 7,17: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node comment
+PASS 7,17: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node comment
+PASS 7,18: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedComment
+PASS 7,18: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node detachedComment
+FAIL 7,19: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 7,19: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node docfrag
+FAIL 7,20: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 7,20: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node doctype
+FAIL 7,21: resulting DOM for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 7,21: resulting range position for range [detachedPara1.firstChild, 2, detachedPara1.firstChild, 8], node foreignDoctype
+PASS 8,0: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node paras[0]
+PASS 8,0: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node paras[0]
+PASS 8,1: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node paras[0].firstChild
+FAIL 8,1: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node paras[0].firstChild assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 8,2: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node paras[1].firstChild
+FAIL 8,2: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node paras[1].firstChild assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+FAIL 8,3: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignPara1 assert_true: First differing node: expected Element node <p>Mnopqrst</p>, got Text node "Efghijkl" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 8,3: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignPara1 assert_true: First differing node: expected Element node <p>Mnopqrst</p>, got Text node "Efghijkl" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 8,4: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Efghijkl" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 8,4: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Efghijkl" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 8,5: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedPara1
+PASS 8,5: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedPara1
+PASS 8,6: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedPara1.firstChild
+FAIL 8,6: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedPara1.firstChild assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+FAIL 8,7: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 8,7: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node document
+PASS 8,8: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedDiv
+PASS 8,8: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedDiv
+FAIL 8,9: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 8,9: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignDoc
+PASS 8,10: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignPara2
+PASS 8,10: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignPara2
+FAIL 8,11: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 8,11: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node xmlDoc
+PASS 8,12: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node xmlElement
+PASS 8,12: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node xmlElement
+PASS 8,13: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedTextNode
+FAIL 8,13: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedTextNode assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 8,14: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignTextNode
+FAIL 8,14: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignTextNode assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 8,15: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node processingInstruction
+FAIL 8,15: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node processingInstruction assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 8,16: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedProcessingInstruction
+FAIL 8,16: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedProcessingInstruction assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 8,17: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node comment
+FAIL 8,17: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node comment assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+PASS 8,18: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedComment
+FAIL 8,18: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node detachedComment assert_equals: Unexpected endOffset after surroundContents() expected 2 but got 0
+FAIL 8,19: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 8,19: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node docfrag
+FAIL 8,20: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 8,20: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node doctype
+FAIL 8,21: resulting DOM for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 8,21: resulting range position for range [foreignPara1.firstChild, 0, foreignPara1.firstChild, 0], node foreignDoctype
+PASS 9,0: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node paras[0]
+PASS 9,0: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node paras[0]
+PASS 9,1: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node paras[0].firstChild
+PASS 9,1: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node paras[0].firstChild
+PASS 9,2: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node paras[1].firstChild
+PASS 9,2: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node paras[1].firstChild
+FAIL 9,3: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignPara1 assert_true: First differing node: expected Element node <p>Mnopqrst</p>, got Text node "Efghijkl" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 9,3: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignPara1 assert_true: First differing node: expected Element node <p>Mnopqrst</p>, got Text node "Efghijkl" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 9,4: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignPara1.firstChild assert_true: First differing node: expected Text node "Ef", got Text node "Efghijkl" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 9,4: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignPara1.firstChild assert_true: First differing node: expected Text node "Ef", got Text node "Efghijkl" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 9,5: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedPara1
+PASS 9,5: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedPara1
+PASS 9,6: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedPara1.firstChild
+PASS 9,6: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedPara1.firstChild
+FAIL 9,7: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 9,7: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node document
+PASS 9,8: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedDiv
+PASS 9,8: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedDiv
+FAIL 9,9: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 9,9: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignDoc
+PASS 9,10: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignPara2
+PASS 9,10: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignPara2
+FAIL 9,11: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 9,11: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node xmlDoc
+PASS 9,12: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node xmlElement
+PASS 9,12: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node xmlElement
+PASS 9,13: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedTextNode
+PASS 9,13: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedTextNode
+PASS 9,14: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignTextNode
+PASS 9,14: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignTextNode
+PASS 9,15: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node processingInstruction
+PASS 9,15: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node processingInstruction
+PASS 9,16: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedProcessingInstruction
+PASS 9,16: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedProcessingInstruction
+PASS 9,17: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node comment
+PASS 9,17: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node comment
+PASS 9,18: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedComment
+PASS 9,18: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node detachedComment
+FAIL 9,19: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 9,19: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node docfrag
+FAIL 9,20: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 9,20: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node doctype
+FAIL 9,21: resulting DOM for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 9,21: resulting range position for range [foreignPara1.firstChild, 2, foreignPara1.firstChild, 8], node foreignDoctype
+PASS 10,0: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node paras[0]
+PASS 10,0: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node paras[0]
+PASS 10,1: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node paras[0].firstChild
+PASS 10,1: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node paras[0].firstChild
+PASS 10,2: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node paras[1].firstChild
+PASS 10,2: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node paras[1].firstChild
+PASS 10,3: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node foreignPara1
+PASS 10,3: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node foreignPara1
+PASS 10,4: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node foreignPara1.firstChild
+PASS 10,4: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node foreignPara1.firstChild
+PASS 10,5: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node detachedPara1
+PASS 10,5: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node detachedPara1
+PASS 10,6: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node detachedPara1.firstChild
+PASS 10,6: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node detachedPara1.firstChild
+FAIL 10,7: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 10,7: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node document
+PASS 10,8: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node detachedDiv
+PASS 10,8: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node detachedDiv
+FAIL 10,9: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 10,9: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node foreignDoc
+PASS 10,10: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node foreignPara2
+PASS 10,10: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node foreignPara2
+FAIL 10,11: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 10,11: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node xmlDoc
+PASS 10,12: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node xmlElement
+PASS 10,12: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node xmlElement
+PASS 10,13: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node detachedTextNode
+PASS 10,13: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node detachedTextNode
+PASS 10,14: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node foreignTextNode
+PASS 10,14: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node foreignTextNode
+PASS 10,15: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node processingInstruction
+PASS 10,15: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node processingInstruction
+PASS 10,16: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node detachedProcessingInstruction
+PASS 10,16: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node detachedProcessingInstruction
+PASS 10,17: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node comment
+PASS 10,17: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node comment
+PASS 10,18: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node detachedComment
+PASS 10,18: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node detachedComment
+FAIL 10,19: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 10,19: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node docfrag
+FAIL 10,20: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 10,20: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node doctype
+FAIL 10,21: resulting DOM for range [document.documentElement, 0, document.documentElement, 1], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 10,21: resulting range position for range [document.documentElement, 0, document.documentElement, 1], node foreignDoctype
+PASS 11,0: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node paras[0]
+PASS 11,0: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node paras[0]
+PASS 11,1: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node paras[0].firstChild
+PASS 11,1: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node paras[0].firstChild
+PASS 11,2: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node paras[1].firstChild
+PASS 11,2: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node paras[1].firstChild
+PASS 11,3: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node foreignPara1
+PASS 11,3: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node foreignPara1
+PASS 11,4: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node foreignPara1.firstChild
+PASS 11,4: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node foreignPara1.firstChild
+PASS 11,5: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node detachedPara1
+PASS 11,5: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node detachedPara1
+PASS 11,6: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node detachedPara1.firstChild
+PASS 11,6: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node detachedPara1.firstChild
+FAIL 11,7: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 11,7: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node document
+PASS 11,8: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node detachedDiv
+PASS 11,8: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node detachedDiv
+FAIL 11,9: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 11,9: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node foreignDoc
+PASS 11,10: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node foreignPara2
+PASS 11,10: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node foreignPara2
+FAIL 11,11: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 11,11: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node xmlDoc
+PASS 11,12: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node xmlElement
+PASS 11,12: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node xmlElement
+PASS 11,13: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node detachedTextNode
+PASS 11,13: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node detachedTextNode
+PASS 11,14: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node foreignTextNode
+PASS 11,14: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node foreignTextNode
+PASS 11,15: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node processingInstruction
+PASS 11,15: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node processingInstruction
+PASS 11,16: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node detachedProcessingInstruction
+PASS 11,16: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node detachedProcessingInstruction
+PASS 11,17: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node comment
+PASS 11,17: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node comment
+PASS 11,18: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node detachedComment
+PASS 11,18: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node detachedComment
+FAIL 11,19: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 11,19: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node docfrag
+FAIL 11,20: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 11,20: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node doctype
+FAIL 11,21: resulting DOM for range [document.documentElement, 0, document.documentElement, 2], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 11,21: resulting range position for range [document.documentElement, 0, document.documentElement, 2], node foreignDoctype
+PASS 12,0: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node paras[0]
+PASS 12,0: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node paras[0]
+PASS 12,1: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node paras[0].firstChild
+PASS 12,1: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node paras[0].firstChild
+PASS 12,2: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node paras[1].firstChild
+PASS 12,2: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node paras[1].firstChild
+PASS 12,3: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node foreignPara1
+PASS 12,3: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node foreignPara1
+PASS 12,4: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node foreignPara1.firstChild
+PASS 12,4: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node foreignPara1.firstChild
+PASS 12,5: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node detachedPara1
+PASS 12,5: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node detachedPara1
+PASS 12,6: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node detachedPara1.firstChild
+PASS 12,6: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node detachedPara1.firstChild
+FAIL 12,7: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 12,7: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node document
+PASS 12,8: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node detachedDiv
+PASS 12,8: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node detachedDiv
+FAIL 12,9: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 12,9: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node foreignDoc
+PASS 12,10: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node foreignPara2
+PASS 12,10: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node foreignPara2
+FAIL 12,11: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 12,11: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node xmlDoc
+PASS 12,12: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node xmlElement
+PASS 12,12: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node xmlElement
+PASS 12,13: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node detachedTextNode
+PASS 12,13: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node detachedTextNode
+PASS 12,14: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node foreignTextNode
+PASS 12,14: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node foreignTextNode
+PASS 12,15: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node processingInstruction
+PASS 12,15: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node processingInstruction
+PASS 12,16: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node detachedProcessingInstruction
+PASS 12,16: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node detachedProcessingInstruction
+PASS 12,17: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node comment
+PASS 12,17: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node comment
+PASS 12,18: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node detachedComment
+PASS 12,18: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node detachedComment
+FAIL 12,19: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 12,19: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node docfrag
+FAIL 12,20: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 12,20: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node doctype
+FAIL 12,21: resulting DOM for range [document.documentElement, 1, document.documentElement, 2], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 12,21: resulting range position for range [document.documentElement, 1, document.documentElement, 2], node foreignDoctype
+PASS 13,0: resulting DOM for range [document.head, 1, document.head, 1], node paras[0]
+PASS 13,0: resulting range position for range [document.head, 1, document.head, 1], node paras[0]
+PASS 13,1: resulting DOM for range [document.head, 1, document.head, 1], node paras[0].firstChild
+PASS 13,1: resulting range position for range [document.head, 1, document.head, 1], node paras[0].firstChild
+PASS 13,2: resulting DOM for range [document.head, 1, document.head, 1], node paras[1].firstChild
+PASS 13,2: resulting range position for range [document.head, 1, document.head, 1], node paras[1].firstChild
+PASS 13,3: resulting DOM for range [document.head, 1, document.head, 1], node foreignPara1
+PASS 13,3: resulting range position for range [document.head, 1, document.head, 1], node foreignPara1
+PASS 13,4: resulting DOM for range [document.head, 1, document.head, 1], node foreignPara1.firstChild
+PASS 13,4: resulting range position for range [document.head, 1, document.head, 1], node foreignPara1.firstChild
+PASS 13,5: resulting DOM for range [document.head, 1, document.head, 1], node detachedPara1
+PASS 13,5: resulting range position for range [document.head, 1, document.head, 1], node detachedPara1
+PASS 13,6: resulting DOM for range [document.head, 1, document.head, 1], node detachedPara1.firstChild
+PASS 13,6: resulting range position for range [document.head, 1, document.head, 1], node detachedPara1.firstChild
+FAIL 13,7: resulting DOM for range [document.head, 1, document.head, 1], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 13,7: resulting range position for range [document.head, 1, document.head, 1], node document
+PASS 13,8: resulting DOM for range [document.head, 1, document.head, 1], node detachedDiv
+PASS 13,8: resulting range position for range [document.head, 1, document.head, 1], node detachedDiv
+FAIL 13,9: resulting DOM for range [document.head, 1, document.head, 1], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 13,9: resulting range position for range [document.head, 1, document.head, 1], node foreignDoc
+PASS 13,10: resulting DOM for range [document.head, 1, document.head, 1], node foreignPara2
+PASS 13,10: resulting range position for range [document.head, 1, document.head, 1], node foreignPara2
+FAIL 13,11: resulting DOM for range [document.head, 1, document.head, 1], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 13,11: resulting range position for range [document.head, 1, document.head, 1], node xmlDoc
+PASS 13,12: resulting DOM for range [document.head, 1, document.head, 1], node xmlElement
+PASS 13,12: resulting range position for range [document.head, 1, document.head, 1], node xmlElement
+PASS 13,13: resulting DOM for range [document.head, 1, document.head, 1], node detachedTextNode
+PASS 13,13: resulting range position for range [document.head, 1, document.head, 1], node detachedTextNode
+PASS 13,14: resulting DOM for range [document.head, 1, document.head, 1], node foreignTextNode
+PASS 13,14: resulting range position for range [document.head, 1, document.head, 1], node foreignTextNode
+PASS 13,15: resulting DOM for range [document.head, 1, document.head, 1], node processingInstruction
+PASS 13,15: resulting range position for range [document.head, 1, document.head, 1], node processingInstruction
+PASS 13,16: resulting DOM for range [document.head, 1, document.head, 1], node detachedProcessingInstruction
+PASS 13,16: resulting range position for range [document.head, 1, document.head, 1], node detachedProcessingInstruction
+PASS 13,17: resulting DOM for range [document.head, 1, document.head, 1], node comment
+PASS 13,17: resulting range position for range [document.head, 1, document.head, 1], node comment
+PASS 13,18: resulting DOM for range [document.head, 1, document.head, 1], node detachedComment
+PASS 13,18: resulting range position for range [document.head, 1, document.head, 1], node detachedComment
+FAIL 13,19: resulting DOM for range [document.head, 1, document.head, 1], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 13,19: resulting range position for range [document.head, 1, document.head, 1], node docfrag
+FAIL 13,20: resulting DOM for range [document.head, 1, document.head, 1], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 13,20: resulting range position for range [document.head, 1, document.head, 1], node doctype
+FAIL 13,21: resulting DOM for range [document.head, 1, document.head, 1], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 13,21: resulting range position for range [document.head, 1, document.head, 1], node foreignDoctype
+PASS 14,0: resulting DOM for range [document.body, 4, document.body, 5], node paras[0]
+PASS 14,0: resulting range position for range [document.body, 4, document.body, 5], node paras[0]
+PASS 14,1: resulting DOM for range [document.body, 4, document.body, 5], node paras[0].firstChild
+PASS 14,1: resulting range position for range [document.body, 4, document.body, 5], node paras[0].firstChild
+PASS 14,2: resulting DOM for range [document.body, 4, document.body, 5], node paras[1].firstChild
+PASS 14,2: resulting range position for range [document.body, 4, document.body, 5], node paras[1].firstChild
+PASS 14,3: resulting DOM for range [document.body, 4, document.body, 5], node foreignPara1
+PASS 14,3: resulting range position for range [document.body, 4, document.body, 5], node foreignPara1
+PASS 14,4: resulting DOM for range [document.body, 4, document.body, 5], node foreignPara1.firstChild
+PASS 14,4: resulting range position for range [document.body, 4, document.body, 5], node foreignPara1.firstChild
+PASS 14,5: resulting DOM for range [document.body, 4, document.body, 5], node detachedPara1
+PASS 14,5: resulting range position for range [document.body, 4, document.body, 5], node detachedPara1
+PASS 14,6: resulting DOM for range [document.body, 4, document.body, 5], node detachedPara1.firstChild
+PASS 14,6: resulting range position for range [document.body, 4, document.body, 5], node detachedPara1.firstChild
+FAIL 14,7: resulting DOM for range [document.body, 4, document.body, 5], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 14,7: resulting range position for range [document.body, 4, document.body, 5], node document
+PASS 14,8: resulting DOM for range [document.body, 4, document.body, 5], node detachedDiv
+PASS 14,8: resulting range position for range [document.body, 4, document.body, 5], node detachedDiv
+FAIL 14,9: resulting DOM for range [document.body, 4, document.body, 5], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 14,9: resulting range position for range [document.body, 4, document.body, 5], node foreignDoc
+PASS 14,10: resulting DOM for range [document.body, 4, document.body, 5], node foreignPara2
+PASS 14,10: resulting range position for range [document.body, 4, document.body, 5], node foreignPara2
+FAIL 14,11: resulting DOM for range [document.body, 4, document.body, 5], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 14,11: resulting range position for range [document.body, 4, document.body, 5], node xmlDoc
+PASS 14,12: resulting DOM for range [document.body, 4, document.body, 5], node xmlElement
+PASS 14,12: resulting range position for range [document.body, 4, document.body, 5], node xmlElement
+PASS 14,13: resulting DOM for range [document.body, 4, document.body, 5], node detachedTextNode
+PASS 14,13: resulting range position for range [document.body, 4, document.body, 5], node detachedTextNode
+PASS 14,14: resulting DOM for range [document.body, 4, document.body, 5], node foreignTextNode
+PASS 14,14: resulting range position for range [document.body, 4, document.body, 5], node foreignTextNode
+PASS 14,15: resulting DOM for range [document.body, 4, document.body, 5], node processingInstruction
+PASS 14,15: resulting range position for range [document.body, 4, document.body, 5], node processingInstruction
+PASS 14,16: resulting DOM for range [document.body, 4, document.body, 5], node detachedProcessingInstruction
+PASS 14,16: resulting range position for range [document.body, 4, document.body, 5], node detachedProcessingInstruction
+PASS 14,17: resulting DOM for range [document.body, 4, document.body, 5], node comment
+PASS 14,17: resulting range position for range [document.body, 4, document.body, 5], node comment
+PASS 14,18: resulting DOM for range [document.body, 4, document.body, 5], node detachedComment
+PASS 14,18: resulting range position for range [document.body, 4, document.body, 5], node detachedComment
+FAIL 14,19: resulting DOM for range [document.body, 4, document.body, 5], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 14,19: resulting range position for range [document.body, 4, document.body, 5], node docfrag
+FAIL 14,20: resulting DOM for range [document.body, 4, document.body, 5], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 14,20: resulting range position for range [document.body, 4, document.body, 5], node doctype
+FAIL 14,21: resulting DOM for range [document.body, 4, document.body, 5], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 14,21: resulting range position for range [document.body, 4, document.body, 5], node foreignDoctype
+PASS 15,0: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node paras[0]
+PASS 15,0: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node paras[0]
+PASS 15,1: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node paras[0].firstChild
+PASS 15,1: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node paras[0].firstChild
+PASS 15,2: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node paras[1].firstChild
+PASS 15,2: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node paras[1].firstChild
+PASS 15,3: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignPara1
+PASS 15,3: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignPara1
+PASS 15,4: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignPara1.firstChild
+PASS 15,4: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignPara1.firstChild
+PASS 15,5: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedPara1
+PASS 15,5: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedPara1
+PASS 15,6: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedPara1.firstChild
+PASS 15,6: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedPara1.firstChild
+FAIL 15,7: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 15,7: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node document
+PASS 15,8: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedDiv
+PASS 15,8: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedDiv
+FAIL 15,9: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 15,9: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignDoc
+PASS 15,10: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignPara2
+PASS 15,10: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignPara2
+FAIL 15,11: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 15,11: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node xmlDoc
+PASS 15,12: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node xmlElement
+PASS 15,12: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node xmlElement
+PASS 15,13: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedTextNode
+PASS 15,13: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedTextNode
+PASS 15,14: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignTextNode
+PASS 15,14: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignTextNode
+PASS 15,15: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node processingInstruction
+PASS 15,15: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node processingInstruction
+PASS 15,16: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedProcessingInstruction
+PASS 15,16: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedProcessingInstruction
+PASS 15,17: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node comment
+PASS 15,17: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node comment
+PASS 15,18: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedComment
+PASS 15,18: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node detachedComment
+FAIL 15,19: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 15,19: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node docfrag
+FAIL 15,20: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 15,20: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node doctype
+FAIL 15,21: resulting DOM for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 15,21: resulting range position for range [foreignDoc.documentElement, 0, foreignDoc.documentElement, 1], node foreignDoctype
+FAIL 16,0: resulting DOM for range [paras[0], 0, paras[0], 1], node paras[0] assert_true: First differing node: expected Element node <p id="b" style="display:none">Ijklmnop
+</p>, got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 16,0: resulting range position for range [paras[0], 0, paras[0], 1], node paras[0] assert_true: First differing node: expected Element node <p id="b" style="display:none">Ijklmnop
+</p>, got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 16,1: resulting DOM for range [paras[0], 0, paras[0], 1], node paras[0].firstChild
+PASS 16,1: resulting range position for range [paras[0], 0, paras[0], 1], node paras[0].firstChild
+PASS 16,2: resulting DOM for range [paras[0], 0, paras[0], 1], node paras[1].firstChild
+PASS 16,2: resulting range position for range [paras[0], 0, paras[0], 1], node paras[1].firstChild
+PASS 16,3: resulting DOM for range [paras[0], 0, paras[0], 1], node foreignPara1
+PASS 16,3: resulting range position for range [paras[0], 0, paras[0], 1], node foreignPara1
+PASS 16,4: resulting DOM for range [paras[0], 0, paras[0], 1], node foreignPara1.firstChild
+PASS 16,4: resulting range position for range [paras[0], 0, paras[0], 1], node foreignPara1.firstChild
+PASS 16,5: resulting DOM for range [paras[0], 0, paras[0], 1], node detachedPara1
+PASS 16,5: resulting range position for range [paras[0], 0, paras[0], 1], node detachedPara1
+PASS 16,6: resulting DOM for range [paras[0], 0, paras[0], 1], node detachedPara1.firstChild
+PASS 16,6: resulting range position for range [paras[0], 0, paras[0], 1], node detachedPara1.firstChild
+FAIL 16,7: resulting DOM for range [paras[0], 0, paras[0], 1], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 16,7: resulting range position for range [paras[0], 0, paras[0], 1], node document
+PASS 16,8: resulting DOM for range [paras[0], 0, paras[0], 1], node detachedDiv
+PASS 16,8: resulting range position for range [paras[0], 0, paras[0], 1], node detachedDiv
+FAIL 16,9: resulting DOM for range [paras[0], 0, paras[0], 1], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 16,9: resulting range position for range [paras[0], 0, paras[0], 1], node foreignDoc
+PASS 16,10: resulting DOM for range [paras[0], 0, paras[0], 1], node foreignPara2
+PASS 16,10: resulting range position for range [paras[0], 0, paras[0], 1], node foreignPara2
+FAIL 16,11: resulting DOM for range [paras[0], 0, paras[0], 1], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 16,11: resulting range position for range [paras[0], 0, paras[0], 1], node xmlDoc
+PASS 16,12: resulting DOM for range [paras[0], 0, paras[0], 1], node xmlElement
+PASS 16,12: resulting range position for range [paras[0], 0, paras[0], 1], node xmlElement
+PASS 16,13: resulting DOM for range [paras[0], 0, paras[0], 1], node detachedTextNode
+PASS 16,13: resulting range position for range [paras[0], 0, paras[0], 1], node detachedTextNode
+PASS 16,14: resulting DOM for range [paras[0], 0, paras[0], 1], node foreignTextNode
+PASS 16,14: resulting range position for range [paras[0], 0, paras[0], 1], node foreignTextNode
+PASS 16,15: resulting DOM for range [paras[0], 0, paras[0], 1], node processingInstruction
+PASS 16,15: resulting range position for range [paras[0], 0, paras[0], 1], node processingInstruction
+PASS 16,16: resulting DOM for range [paras[0], 0, paras[0], 1], node detachedProcessingInstruction
+PASS 16,16: resulting range position for range [paras[0], 0, paras[0], 1], node detachedProcessingInstruction
+PASS 16,17: resulting DOM for range [paras[0], 0, paras[0], 1], node comment
+PASS 16,17: resulting range position for range [paras[0], 0, paras[0], 1], node comment
+PASS 16,18: resulting DOM for range [paras[0], 0, paras[0], 1], node detachedComment
+PASS 16,18: resulting range position for range [paras[0], 0, paras[0], 1], node detachedComment
+FAIL 16,19: resulting DOM for range [paras[0], 0, paras[0], 1], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 16,19: resulting range position for range [paras[0], 0, paras[0], 1], node docfrag
+FAIL 16,20: resulting DOM for range [paras[0], 0, paras[0], 1], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 16,20: resulting range position for range [paras[0], 0, paras[0], 1], node doctype
+FAIL 16,21: resulting DOM for range [paras[0], 0, paras[0], 1], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 16,21: resulting range position for range [paras[0], 0, paras[0], 1], node foreignDoctype
+FAIL 17,0: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node paras[0] INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS 17,0: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node paras[0]
+PASS 17,1: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node paras[0].firstChild
+PASS 17,1: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node paras[0].firstChild
+PASS 17,2: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node paras[1].firstChild
+PASS 17,2: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node paras[1].firstChild
+FAIL 17,3: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node foreignPara1 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS 17,3: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node foreignPara1
+PASS 17,4: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node foreignPara1.firstChild
+PASS 17,4: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node foreignPara1.firstChild
+FAIL 17,5: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node detachedPara1 assert_true: First differing node: expected Element node <p>Wxyzabcd</p>, got Text node "Opqrstuv" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 17,5: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node detachedPara1 assert_true: First differing node: expected Element node <p>Wxyzabcd</p>, got Text node "Opqrstuv" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 17,6: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node detachedPara1.firstChild
+PASS 17,6: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node detachedPara1.firstChild
+FAIL 17,7: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 17,7: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node document
+FAIL 17,8: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node detachedDiv assert_unreached: DOMs were not equal but we couldn't figure out why Reached unreachable code
+FAIL 17,8: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node detachedDiv assert_unreached: DOMs were not equal but we couldn't figure out why Reached unreachable code
+FAIL 17,9: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 17,9: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node foreignDoc
+FAIL 17,10: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node foreignPara2 INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS 17,10: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node foreignPara2
+FAIL 17,11: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 17,11: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node xmlDoc
+FAIL 17,12: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node xmlElement INVALID_NODE_TYPE_ERR: DOM Range Exception 2
+PASS 17,12: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node xmlElement
+PASS 17,13: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node detachedTextNode
+PASS 17,13: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node detachedTextNode
+PASS 17,14: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node foreignTextNode
+PASS 17,14: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node foreignTextNode
+PASS 17,15: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node processingInstruction
+PASS 17,15: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node processingInstruction
+PASS 17,16: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node detachedProcessingInstruction
+PASS 17,16: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node detachedProcessingInstruction
+PASS 17,17: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node comment
+PASS 17,17: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node comment
+PASS 17,18: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node detachedComment
+PASS 17,18: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node detachedComment
+FAIL 17,19: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 17,19: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node docfrag
+FAIL 17,20: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 17,20: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node doctype
+FAIL 17,21: resulting DOM for range [detachedPara1, 0, detachedPara1, 1], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 17,21: resulting range position for range [detachedPara1, 0, detachedPara1, 1], node foreignDoctype
+FAIL 18,0: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node paras[0] assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 18,0: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node paras[0]
+FAIL 18,1: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node paras[0].firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 18,1: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node paras[0].firstChild
+FAIL 18,2: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node paras[1].firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 18,2: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node paras[1].firstChild
+FAIL 18,3: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignPara1 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 18,3: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignPara1
+FAIL 18,4: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignPara1.firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 18,4: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignPara1.firstChild
+FAIL 18,5: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedPara1 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 18,5: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedPara1
+FAIL 18,6: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedPara1.firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 18,6: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedPara1.firstChild
+FAIL 18,7: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node document assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 18,7: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node document
+FAIL 18,8: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedDiv assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 18,8: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedDiv
+FAIL 18,9: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignDoc assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 18,9: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignDoc
+FAIL 18,10: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignPara2 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 18,10: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignPara2
+FAIL 18,11: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node xmlDoc assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 18,11: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node xmlDoc
+FAIL 18,12: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node xmlElement assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 18,12: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node xmlElement
+FAIL 18,13: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedTextNode assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 18,13: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedTextNode
+FAIL 18,14: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignTextNode assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 18,14: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignTextNode
+FAIL 18,15: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node processingInstruction assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 18,15: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node processingInstruction
+FAIL 18,16: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedProcessingInstruction assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 18,16: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedProcessingInstruction
+FAIL 18,17: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node comment assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 18,17: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node comment
+FAIL 18,18: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedComment assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 18,18: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node detachedComment
+FAIL 18,19: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node docfrag assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 18,19: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node docfrag
+FAIL 18,20: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node doctype assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 18,20: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node doctype
+FAIL 18,21: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignDoctype assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 18,21: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 0], node foreignDoctype
+FAIL 19,0: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node paras[0] assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 19,0: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node paras[0]
+FAIL 19,1: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node paras[0].firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 19,1: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node paras[0].firstChild
+FAIL 19,2: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node paras[1].firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 19,2: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node paras[1].firstChild
+FAIL 19,3: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignPara1 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 19,3: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignPara1
+FAIL 19,4: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignPara1.firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 19,4: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignPara1.firstChild
+FAIL 19,5: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedPara1 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 19,5: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedPara1
+FAIL 19,6: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedPara1.firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 19,6: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedPara1.firstChild
+FAIL 19,7: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node document assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 19,7: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node document
+FAIL 19,8: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedDiv assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 19,8: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedDiv
+FAIL 19,9: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignDoc assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 19,9: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignDoc
+FAIL 19,10: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignPara2 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 19,10: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignPara2
+FAIL 19,11: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node xmlDoc assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 19,11: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node xmlDoc
+FAIL 19,12: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node xmlElement assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 19,12: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node xmlElement
+FAIL 19,13: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedTextNode assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 19,13: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedTextNode
+FAIL 19,14: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignTextNode assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 19,14: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignTextNode
+FAIL 19,15: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node processingInstruction assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 19,15: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node processingInstruction
+FAIL 19,16: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedProcessingInstruction assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 19,16: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedProcessingInstruction
+FAIL 19,17: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node comment assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 19,17: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node comment
+FAIL 19,18: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedComment assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 19,18: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node detachedComment
+FAIL 19,19: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node docfrag assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 19,19: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node docfrag
+FAIL 19,20: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node doctype assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 19,20: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node doctype
+FAIL 19,21: resulting DOM for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignDoctype assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 19,21: resulting range position for range [paras[0].firstChild, 0, paras[1].firstChild, 8], node foreignDoctype
+FAIL 20,0: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node paras[0] assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 20,0: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node paras[0]
+FAIL 20,1: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node paras[0].firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 20,1: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node paras[0].firstChild
+FAIL 20,2: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node paras[1].firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 20,2: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node paras[1].firstChild
+FAIL 20,3: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node foreignPara1 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 20,3: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node foreignPara1
+FAIL 20,4: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node foreignPara1.firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 20,4: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node foreignPara1.firstChild
+FAIL 20,5: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node detachedPara1 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 20,5: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node detachedPara1
+FAIL 20,6: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node detachedPara1.firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 20,6: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node detachedPara1.firstChild
+FAIL 20,7: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node document assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 20,7: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node document
+FAIL 20,8: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node detachedDiv assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 20,8: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node detachedDiv
+FAIL 20,9: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node foreignDoc assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 20,9: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node foreignDoc
+FAIL 20,10: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node foreignPara2 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 20,10: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node foreignPara2
+FAIL 20,11: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node xmlDoc assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 20,11: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node xmlDoc
+FAIL 20,12: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node xmlElement assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 20,12: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node xmlElement
+FAIL 20,13: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node detachedTextNode assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 20,13: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node detachedTextNode
+FAIL 20,14: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node foreignTextNode assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 20,14: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node foreignTextNode
+FAIL 20,15: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node processingInstruction assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 20,15: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node processingInstruction
+FAIL 20,16: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node detachedProcessingInstruction assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 20,16: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node detachedProcessingInstruction
+FAIL 20,17: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node comment assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 20,17: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node comment
+FAIL 20,18: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node detachedComment assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 20,18: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node detachedComment
+FAIL 20,19: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node docfrag assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 20,19: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node docfrag
+FAIL 20,20: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node doctype assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 20,20: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node doctype
+FAIL 20,21: resulting DOM for range [paras[0].firstChild, 3, paras[3], 1], node foreignDoctype assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 20,21: resulting range position for range [paras[0].firstChild, 3, paras[3], 1], node foreignDoctype
+FAIL 21,0: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node paras[0] assert_true: First differing node: expected Element node <p id="b" style="display:none">Ijklmnop
+</p>, got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 21,0: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node paras[0] assert_true: First differing node: expected Element node <p id="b" style="display:none">Ijklmnop
+</p>, got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 21,1: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node paras[0].firstChild
+PASS 21,1: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node paras[0].firstChild
+PASS 21,2: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node paras[1].firstChild
+PASS 21,2: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node paras[1].firstChild
+PASS 21,3: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node foreignPara1
+PASS 21,3: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node foreignPara1
+PASS 21,4: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node foreignPara1.firstChild
+PASS 21,4: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node foreignPara1.firstChild
+PASS 21,5: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node detachedPara1
+PASS 21,5: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node detachedPara1
+PASS 21,6: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node detachedPara1.firstChild
+PASS 21,6: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node detachedPara1.firstChild
+FAIL 21,7: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 21,7: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node document
+PASS 21,8: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node detachedDiv
+PASS 21,8: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node detachedDiv
+FAIL 21,9: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 21,9: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node foreignDoc
+PASS 21,10: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node foreignPara2
+PASS 21,10: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node foreignPara2
+FAIL 21,11: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 21,11: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node xmlDoc
+PASS 21,12: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node xmlElement
+PASS 21,12: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node xmlElement
+PASS 21,13: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node detachedTextNode
+PASS 21,13: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node detachedTextNode
+PASS 21,14: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node foreignTextNode
+PASS 21,14: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node foreignTextNode
+PASS 21,15: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node processingInstruction
+PASS 21,15: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node processingInstruction
+PASS 21,16: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node detachedProcessingInstruction
+PASS 21,16: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node detachedProcessingInstruction
+PASS 21,17: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node comment
+PASS 21,17: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node comment
+PASS 21,18: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node detachedComment
+PASS 21,18: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node detachedComment
+FAIL 21,19: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 21,19: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node docfrag
+FAIL 21,20: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 21,20: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node doctype
+FAIL 21,21: resulting DOM for range [paras[0], 0, paras[0].firstChild, 7], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 21,21: resulting range position for range [paras[0], 0, paras[0].firstChild, 7], node foreignDoctype
+FAIL 22,0: resulting DOM for range [testDiv, 2, paras[4], 1], node paras[0] assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 22,0: resulting range position for range [testDiv, 2, paras[4], 1], node paras[0]
+FAIL 22,1: resulting DOM for range [testDiv, 2, paras[4], 1], node paras[0].firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 22,1: resulting range position for range [testDiv, 2, paras[4], 1], node paras[0].firstChild
+FAIL 22,2: resulting DOM for range [testDiv, 2, paras[4], 1], node paras[1].firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 22,2: resulting range position for range [testDiv, 2, paras[4], 1], node paras[1].firstChild
+FAIL 22,3: resulting DOM for range [testDiv, 2, paras[4], 1], node foreignPara1 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 22,3: resulting range position for range [testDiv, 2, paras[4], 1], node foreignPara1
+FAIL 22,4: resulting DOM for range [testDiv, 2, paras[4], 1], node foreignPara1.firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 22,4: resulting range position for range [testDiv, 2, paras[4], 1], node foreignPara1.firstChild
+FAIL 22,5: resulting DOM for range [testDiv, 2, paras[4], 1], node detachedPara1 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 22,5: resulting range position for range [testDiv, 2, paras[4], 1], node detachedPara1
+FAIL 22,6: resulting DOM for range [testDiv, 2, paras[4], 1], node detachedPara1.firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 22,6: resulting range position for range [testDiv, 2, paras[4], 1], node detachedPara1.firstChild
+FAIL 22,7: resulting DOM for range [testDiv, 2, paras[4], 1], node document assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 22,7: resulting range position for range [testDiv, 2, paras[4], 1], node document
+FAIL 22,8: resulting DOM for range [testDiv, 2, paras[4], 1], node detachedDiv assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 22,8: resulting range position for range [testDiv, 2, paras[4], 1], node detachedDiv
+FAIL 22,9: resulting DOM for range [testDiv, 2, paras[4], 1], node foreignDoc assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 22,9: resulting range position for range [testDiv, 2, paras[4], 1], node foreignDoc
+FAIL 22,10: resulting DOM for range [testDiv, 2, paras[4], 1], node foreignPara2 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 22,10: resulting range position for range [testDiv, 2, paras[4], 1], node foreignPara2
+FAIL 22,11: resulting DOM for range [testDiv, 2, paras[4], 1], node xmlDoc assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 22,11: resulting range position for range [testDiv, 2, paras[4], 1], node xmlDoc
+FAIL 22,12: resulting DOM for range [testDiv, 2, paras[4], 1], node xmlElement assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 22,12: resulting range position for range [testDiv, 2, paras[4], 1], node xmlElement
+FAIL 22,13: resulting DOM for range [testDiv, 2, paras[4], 1], node detachedTextNode assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 22,13: resulting range position for range [testDiv, 2, paras[4], 1], node detachedTextNode
+FAIL 22,14: resulting DOM for range [testDiv, 2, paras[4], 1], node foreignTextNode assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 22,14: resulting range position for range [testDiv, 2, paras[4], 1], node foreignTextNode
+FAIL 22,15: resulting DOM for range [testDiv, 2, paras[4], 1], node processingInstruction assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 22,15: resulting range position for range [testDiv, 2, paras[4], 1], node processingInstruction
+FAIL 22,16: resulting DOM for range [testDiv, 2, paras[4], 1], node detachedProcessingInstruction assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 22,16: resulting range position for range [testDiv, 2, paras[4], 1], node detachedProcessingInstruction
+FAIL 22,17: resulting DOM for range [testDiv, 2, paras[4], 1], node comment assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 22,17: resulting range position for range [testDiv, 2, paras[4], 1], node comment
+FAIL 22,18: resulting DOM for range [testDiv, 2, paras[4], 1], node detachedComment assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 22,18: resulting range position for range [testDiv, 2, paras[4], 1], node detachedComment
+FAIL 22,19: resulting DOM for range [testDiv, 2, paras[4], 1], node docfrag assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 22,19: resulting range position for range [testDiv, 2, paras[4], 1], node docfrag
+FAIL 22,20: resulting DOM for range [testDiv, 2, paras[4], 1], node doctype assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 22,20: resulting range position for range [testDiv, 2, paras[4], 1], node doctype
+FAIL 22,21: resulting DOM for range [testDiv, 2, paras[4], 1], node foreignDoctype assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 22,21: resulting range position for range [testDiv, 2, paras[4], 1], node foreignDoctype
+PASS 23,0: resulting DOM for range [document, 0, document, 1], node paras[0]
+PASS 23,0: resulting range position for range [document, 0, document, 1], node paras[0]
+PASS 23,1: resulting DOM for range [document, 0, document, 1], node paras[0].firstChild
+PASS 23,1: resulting range position for range [document, 0, document, 1], node paras[0].firstChild
+PASS 23,2: resulting DOM for range [document, 0, document, 1], node paras[1].firstChild
+PASS 23,2: resulting range position for range [document, 0, document, 1], node paras[1].firstChild
+PASS 23,3: resulting DOM for range [document, 0, document, 1], node foreignPara1
+PASS 23,3: resulting range position for range [document, 0, document, 1], node foreignPara1
+PASS 23,4: resulting DOM for range [document, 0, document, 1], node foreignPara1.firstChild
+PASS 23,4: resulting range position for range [document, 0, document, 1], node foreignPara1.firstChild
+PASS 23,5: resulting DOM for range [document, 0, document, 1], node detachedPara1
+PASS 23,5: resulting range position for range [document, 0, document, 1], node detachedPara1
+PASS 23,6: resulting DOM for range [document, 0, document, 1], node detachedPara1.firstChild
+PASS 23,6: resulting range position for range [document, 0, document, 1], node detachedPara1.firstChild
+FAIL 23,7: resulting DOM for range [document, 0, document, 1], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 23,7: resulting range position for range [document, 0, document, 1], node document
+PASS 23,8: resulting DOM for range [document, 0, document, 1], node detachedDiv
+PASS 23,8: resulting range position for range [document, 0, document, 1], node detachedDiv
+FAIL 23,9: resulting DOM for range [document, 0, document, 1], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 23,9: resulting range position for range [document, 0, document, 1], node foreignDoc
+PASS 23,10: resulting DOM for range [document, 0, document, 1], node foreignPara2
+PASS 23,10: resulting range position for range [document, 0, document, 1], node foreignPara2
+FAIL 23,11: resulting DOM for range [document, 0, document, 1], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 23,11: resulting range position for range [document, 0, document, 1], node xmlDoc
+PASS 23,12: resulting DOM for range [document, 0, document, 1], node xmlElement
+PASS 23,12: resulting range position for range [document, 0, document, 1], node xmlElement
+PASS 23,13: resulting DOM for range [document, 0, document, 1], node detachedTextNode
+PASS 23,13: resulting range position for range [document, 0, document, 1], node detachedTextNode
+PASS 23,14: resulting DOM for range [document, 0, document, 1], node foreignTextNode
+PASS 23,14: resulting range position for range [document, 0, document, 1], node foreignTextNode
+PASS 23,15: resulting DOM for range [document, 0, document, 1], node processingInstruction
+PASS 23,15: resulting range position for range [document, 0, document, 1], node processingInstruction
+PASS 23,16: resulting DOM for range [document, 0, document, 1], node detachedProcessingInstruction
+PASS 23,16: resulting range position for range [document, 0, document, 1], node detachedProcessingInstruction
+PASS 23,17: resulting DOM for range [document, 0, document, 1], node comment
+PASS 23,17: resulting range position for range [document, 0, document, 1], node comment
+PASS 23,18: resulting DOM for range [document, 0, document, 1], node detachedComment
+PASS 23,18: resulting range position for range [document, 0, document, 1], node detachedComment
+FAIL 23,19: resulting DOM for range [document, 0, document, 1], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 23,19: resulting range position for range [document, 0, document, 1], node docfrag
+FAIL 23,20: resulting DOM for range [document, 0, document, 1], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 23,20: resulting range position for range [document, 0, document, 1], node doctype
+FAIL 23,21: resulting DOM for range [document, 0, document, 1], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 23,21: resulting range position for range [document, 0, document, 1], node foreignDoctype
+PASS 24,0: resulting DOM for range [document, 0, document, 2], node paras[0]
+PASS 24,0: resulting range position for range [document, 0, document, 2], node paras[0]
+PASS 24,1: resulting DOM for range [document, 0, document, 2], node paras[0].firstChild
+PASS 24,1: resulting range position for range [document, 0, document, 2], node paras[0].firstChild
+PASS 24,2: resulting DOM for range [document, 0, document, 2], node paras[1].firstChild
+PASS 24,2: resulting range position for range [document, 0, document, 2], node paras[1].firstChild
+PASS 24,3: resulting DOM for range [document, 0, document, 2], node foreignPara1
+PASS 24,3: resulting range position for range [document, 0, document, 2], node foreignPara1
+PASS 24,4: resulting DOM for range [document, 0, document, 2], node foreignPara1.firstChild
+PASS 24,4: resulting range position for range [document, 0, document, 2], node foreignPara1.firstChild
+PASS 24,5: resulting DOM for range [document, 0, document, 2], node detachedPara1
+PASS 24,5: resulting range position for range [document, 0, document, 2], node detachedPara1
+PASS 24,6: resulting DOM for range [document, 0, document, 2], node detachedPara1.firstChild
+PASS 24,6: resulting range position for range [document, 0, document, 2], node detachedPara1.firstChild
+FAIL 24,7: resulting DOM for range [document, 0, document, 2], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 24,7: resulting range position for range [document, 0, document, 2], node document
+PASS 24,8: resulting DOM for range [document, 0, document, 2], node detachedDiv
+PASS 24,8: resulting range position for range [document, 0, document, 2], node detachedDiv
+FAIL 24,9: resulting DOM for range [document, 0, document, 2], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 24,9: resulting range position for range [document, 0, document, 2], node foreignDoc
+PASS 24,10: resulting DOM for range [document, 0, document, 2], node foreignPara2
+PASS 24,10: resulting range position for range [document, 0, document, 2], node foreignPara2
+FAIL 24,11: resulting DOM for range [document, 0, document, 2], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 24,11: resulting range position for range [document, 0, document, 2], node xmlDoc
+PASS 24,12: resulting DOM for range [document, 0, document, 2], node xmlElement
+PASS 24,12: resulting range position for range [document, 0, document, 2], node xmlElement
+PASS 24,13: resulting DOM for range [document, 0, document, 2], node detachedTextNode
+PASS 24,13: resulting range position for range [document, 0, document, 2], node detachedTextNode
+PASS 24,14: resulting DOM for range [document, 0, document, 2], node foreignTextNode
+PASS 24,14: resulting range position for range [document, 0, document, 2], node foreignTextNode
+PASS 24,15: resulting DOM for range [document, 0, document, 2], node processingInstruction
+PASS 24,15: resulting range position for range [document, 0, document, 2], node processingInstruction
+PASS 24,16: resulting DOM for range [document, 0, document, 2], node detachedProcessingInstruction
+PASS 24,16: resulting range position for range [document, 0, document, 2], node detachedProcessingInstruction
+PASS 24,17: resulting DOM for range [document, 0, document, 2], node comment
+PASS 24,17: resulting range position for range [document, 0, document, 2], node comment
+PASS 24,18: resulting DOM for range [document, 0, document, 2], node detachedComment
+PASS 24,18: resulting range position for range [document, 0, document, 2], node detachedComment
+FAIL 24,19: resulting DOM for range [document, 0, document, 2], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 24,19: resulting range position for range [document, 0, document, 2], node docfrag
+FAIL 24,20: resulting DOM for range [document, 0, document, 2], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 24,20: resulting range position for range [document, 0, document, 2], node doctype
+FAIL 24,21: resulting DOM for range [document, 0, document, 2], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 24,21: resulting range position for range [document, 0, document, 2], node foreignDoctype
+PASS 25,0: resulting DOM for range [comment, 2, comment, 3], node paras[0]
+PASS 25,0: resulting range position for range [comment, 2, comment, 3], node paras[0]
+PASS 25,1: resulting DOM for range [comment, 2, comment, 3], node paras[0].firstChild
+PASS 25,1: resulting range position for range [comment, 2, comment, 3], node paras[0].firstChild
+PASS 25,2: resulting DOM for range [comment, 2, comment, 3], node paras[1].firstChild
+PASS 25,2: resulting range position for range [comment, 2, comment, 3], node paras[1].firstChild
+PASS 25,3: resulting DOM for range [comment, 2, comment, 3], node foreignPara1
+PASS 25,3: resulting range position for range [comment, 2, comment, 3], node foreignPara1
+PASS 25,4: resulting DOM for range [comment, 2, comment, 3], node foreignPara1.firstChild
+PASS 25,4: resulting range position for range [comment, 2, comment, 3], node foreignPara1.firstChild
+PASS 25,5: resulting DOM for range [comment, 2, comment, 3], node detachedPara1
+PASS 25,5: resulting range position for range [comment, 2, comment, 3], node detachedPara1
+PASS 25,6: resulting DOM for range [comment, 2, comment, 3], node detachedPara1.firstChild
+PASS 25,6: resulting range position for range [comment, 2, comment, 3], node detachedPara1.firstChild
+FAIL 25,7: resulting DOM for range [comment, 2, comment, 3], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 25,7: resulting range position for range [comment, 2, comment, 3], node document
+PASS 25,8: resulting DOM for range [comment, 2, comment, 3], node detachedDiv
+PASS 25,8: resulting range position for range [comment, 2, comment, 3], node detachedDiv
+FAIL 25,9: resulting DOM for range [comment, 2, comment, 3], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 25,9: resulting range position for range [comment, 2, comment, 3], node foreignDoc
+PASS 25,10: resulting DOM for range [comment, 2, comment, 3], node foreignPara2
+PASS 25,10: resulting range position for range [comment, 2, comment, 3], node foreignPara2
+FAIL 25,11: resulting DOM for range [comment, 2, comment, 3], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 25,11: resulting range position for range [comment, 2, comment, 3], node xmlDoc
+PASS 25,12: resulting DOM for range [comment, 2, comment, 3], node xmlElement
+PASS 25,12: resulting range position for range [comment, 2, comment, 3], node xmlElement
+PASS 25,13: resulting DOM for range [comment, 2, comment, 3], node detachedTextNode
+PASS 25,13: resulting range position for range [comment, 2, comment, 3], node detachedTextNode
+PASS 25,14: resulting DOM for range [comment, 2, comment, 3], node foreignTextNode
+PASS 25,14: resulting range position for range [comment, 2, comment, 3], node foreignTextNode
+PASS 25,15: resulting DOM for range [comment, 2, comment, 3], node processingInstruction
+PASS 25,15: resulting range position for range [comment, 2, comment, 3], node processingInstruction
+PASS 25,16: resulting DOM for range [comment, 2, comment, 3], node detachedProcessingInstruction
+PASS 25,16: resulting range position for range [comment, 2, comment, 3], node detachedProcessingInstruction
+FAIL 25,17: resulting DOM for range [comment, 2, comment, 3], node comment assert_true: First differing node: expected Comment node <!--Alhabet soup?-->, got Comment node <!--Alphabet soup?--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 25,17: resulting range position for range [comment, 2, comment, 3], node comment assert_true: First differing node: expected Comment node <!--Alhabet soup?-->, got Comment node <!--Alphabet soup?--> [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 25,18: resulting DOM for range [comment, 2, comment, 3], node detachedComment
+PASS 25,18: resulting range position for range [comment, 2, comment, 3], node detachedComment
+FAIL 25,19: resulting DOM for range [comment, 2, comment, 3], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 25,19: resulting range position for range [comment, 2, comment, 3], node docfrag
+FAIL 25,20: resulting DOM for range [comment, 2, comment, 3], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 25,20: resulting range position for range [comment, 2, comment, 3], node doctype
+FAIL 25,21: resulting DOM for range [comment, 2, comment, 3], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 25,21: resulting range position for range [comment, 2, comment, 3], node foreignDoctype
+FAIL 26,0: resulting DOM for range [testDiv, 0, comment, 5], node paras[0] assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 26,0: resulting range position for range [testDiv, 0, comment, 5], node paras[0]
+FAIL 26,1: resulting DOM for range [testDiv, 0, comment, 5], node paras[0].firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 26,1: resulting range position for range [testDiv, 0, comment, 5], node paras[0].firstChild
+FAIL 26,2: resulting DOM for range [testDiv, 0, comment, 5], node paras[1].firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 26,2: resulting range position for range [testDiv, 0, comment, 5], node paras[1].firstChild
+FAIL 26,3: resulting DOM for range [testDiv, 0, comment, 5], node foreignPara1 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 26,3: resulting range position for range [testDiv, 0, comment, 5], node foreignPara1
+FAIL 26,4: resulting DOM for range [testDiv, 0, comment, 5], node foreignPara1.firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 26,4: resulting range position for range [testDiv, 0, comment, 5], node foreignPara1.firstChild
+FAIL 26,5: resulting DOM for range [testDiv, 0, comment, 5], node detachedPara1 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 26,5: resulting range position for range [testDiv, 0, comment, 5], node detachedPara1
+FAIL 26,6: resulting DOM for range [testDiv, 0, comment, 5], node detachedPara1.firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 26,6: resulting range position for range [testDiv, 0, comment, 5], node detachedPara1.firstChild
+FAIL 26,7: resulting DOM for range [testDiv, 0, comment, 5], node document assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 26,7: resulting range position for range [testDiv, 0, comment, 5], node document
+FAIL 26,8: resulting DOM for range [testDiv, 0, comment, 5], node detachedDiv assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 26,8: resulting range position for range [testDiv, 0, comment, 5], node detachedDiv
+FAIL 26,9: resulting DOM for range [testDiv, 0, comment, 5], node foreignDoc assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 26,9: resulting range position for range [testDiv, 0, comment, 5], node foreignDoc
+FAIL 26,10: resulting DOM for range [testDiv, 0, comment, 5], node foreignPara2 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 26,10: resulting range position for range [testDiv, 0, comment, 5], node foreignPara2
+FAIL 26,11: resulting DOM for range [testDiv, 0, comment, 5], node xmlDoc assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 26,11: resulting range position for range [testDiv, 0, comment, 5], node xmlDoc
+FAIL 26,12: resulting DOM for range [testDiv, 0, comment, 5], node xmlElement assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 26,12: resulting range position for range [testDiv, 0, comment, 5], node xmlElement
+FAIL 26,13: resulting DOM for range [testDiv, 0, comment, 5], node detachedTextNode assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 26,13: resulting range position for range [testDiv, 0, comment, 5], node detachedTextNode
+FAIL 26,14: resulting DOM for range [testDiv, 0, comment, 5], node foreignTextNode assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 26,14: resulting range position for range [testDiv, 0, comment, 5], node foreignTextNode
+FAIL 26,15: resulting DOM for range [testDiv, 0, comment, 5], node processingInstruction assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 26,15: resulting range position for range [testDiv, 0, comment, 5], node processingInstruction
+FAIL 26,16: resulting DOM for range [testDiv, 0, comment, 5], node detachedProcessingInstruction assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 26,16: resulting range position for range [testDiv, 0, comment, 5], node detachedProcessingInstruction
+FAIL 26,17: resulting DOM for range [testDiv, 0, comment, 5], node comment assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 26,17: resulting range position for range [testDiv, 0, comment, 5], node comment
+FAIL 26,18: resulting DOM for range [testDiv, 0, comment, 5], node detachedComment assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 26,18: resulting range position for range [testDiv, 0, comment, 5], node detachedComment
+FAIL 26,19: resulting DOM for range [testDiv, 0, comment, 5], node docfrag assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 26,19: resulting range position for range [testDiv, 0, comment, 5], node docfrag
+FAIL 26,20: resulting DOM for range [testDiv, 0, comment, 5], node doctype assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 26,20: resulting range position for range [testDiv, 0, comment, 5], node doctype
+FAIL 26,21: resulting DOM for range [testDiv, 0, comment, 5], node foreignDoctype assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 26,21: resulting range position for range [testDiv, 0, comment, 5], node foreignDoctype
+FAIL 27,0: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node paras[0] assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 27,0: resulting range position for range [foreignDoc, 1, foreignComment, 2], node paras[0]
+FAIL 27,1: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node paras[0].firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 27,1: resulting range position for range [foreignDoc, 1, foreignComment, 2], node paras[0].firstChild
+FAIL 27,2: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node paras[1].firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 27,2: resulting range position for range [foreignDoc, 1, foreignComment, 2], node paras[1].firstChild
+FAIL 27,3: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node foreignPara1 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 27,3: resulting range position for range [foreignDoc, 1, foreignComment, 2], node foreignPara1
+FAIL 27,4: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node foreignPara1.firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 27,4: resulting range position for range [foreignDoc, 1, foreignComment, 2], node foreignPara1.firstChild
+FAIL 27,5: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node detachedPara1 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 27,5: resulting range position for range [foreignDoc, 1, foreignComment, 2], node detachedPara1
+FAIL 27,6: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node detachedPara1.firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 27,6: resulting range position for range [foreignDoc, 1, foreignComment, 2], node detachedPara1.firstChild
+FAIL 27,7: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node document assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 27,7: resulting range position for range [foreignDoc, 1, foreignComment, 2], node document
+FAIL 27,8: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node detachedDiv assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 27,8: resulting range position for range [foreignDoc, 1, foreignComment, 2], node detachedDiv
+FAIL 27,9: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node foreignDoc assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 27,9: resulting range position for range [foreignDoc, 1, foreignComment, 2], node foreignDoc
+FAIL 27,10: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node foreignPara2 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 27,10: resulting range position for range [foreignDoc, 1, foreignComment, 2], node foreignPara2
+FAIL 27,11: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node xmlDoc assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 27,11: resulting range position for range [foreignDoc, 1, foreignComment, 2], node xmlDoc
+FAIL 27,12: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node xmlElement assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 27,12: resulting range position for range [foreignDoc, 1, foreignComment, 2], node xmlElement
+FAIL 27,13: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node detachedTextNode assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 27,13: resulting range position for range [foreignDoc, 1, foreignComment, 2], node detachedTextNode
+FAIL 27,14: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node foreignTextNode assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 27,14: resulting range position for range [foreignDoc, 1, foreignComment, 2], node foreignTextNode
+FAIL 27,15: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node processingInstruction assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 27,15: resulting range position for range [foreignDoc, 1, foreignComment, 2], node processingInstruction
+FAIL 27,16: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node detachedProcessingInstruction assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 27,16: resulting range position for range [foreignDoc, 1, foreignComment, 2], node detachedProcessingInstruction
+FAIL 27,17: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node comment assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 27,17: resulting range position for range [foreignDoc, 1, foreignComment, 2], node comment
+FAIL 27,18: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node detachedComment assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 27,18: resulting range position for range [foreignDoc, 1, foreignComment, 2], node detachedComment
+FAIL 27,19: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node docfrag assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 27,19: resulting range position for range [foreignDoc, 1, foreignComment, 2], node docfrag
+FAIL 27,20: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node doctype assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 27,20: resulting range position for range [foreignDoc, 1, foreignComment, 2], node doctype
+FAIL 27,21: resulting DOM for range [foreignDoc, 1, foreignComment, 2], node foreignDoctype assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 27,21: resulting range position for range [foreignDoc, 1, foreignComment, 2], node foreignDoctype
+PASS 28,0: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node paras[0]
+PASS 28,0: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node paras[0]
+PASS 28,1: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node paras[0].firstChild
+PASS 28,1: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node paras[0].firstChild
+PASS 28,2: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node paras[1].firstChild
+PASS 28,2: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node paras[1].firstChild
+PASS 28,3: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignPara1
+PASS 28,3: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignPara1
+PASS 28,4: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignPara1.firstChild
+PASS 28,4: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignPara1.firstChild
+PASS 28,5: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedPara1
+PASS 28,5: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedPara1
+PASS 28,6: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedPara1.firstChild
+PASS 28,6: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedPara1.firstChild
+FAIL 28,7: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 28,7: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node document
+PASS 28,8: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedDiv
+PASS 28,8: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedDiv
+FAIL 28,9: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 28,9: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignDoc
+PASS 28,10: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignPara2
+PASS 28,10: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignPara2
+FAIL 28,11: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 28,11: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node xmlDoc
+PASS 28,12: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node xmlElement
+PASS 28,12: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node xmlElement
+PASS 28,13: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedTextNode
+PASS 28,13: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedTextNode
+PASS 28,14: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignTextNode
+PASS 28,14: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignTextNode
+PASS 28,15: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node processingInstruction
+PASS 28,15: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node processingInstruction
+PASS 28,16: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedProcessingInstruction
+PASS 28,16: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedProcessingInstruction
+PASS 28,17: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node comment
+PASS 28,17: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node comment
+PASS 28,18: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedComment
+PASS 28,18: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node detachedComment
+FAIL 28,19: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 28,19: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node docfrag
+FAIL 28,20: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 28,20: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node doctype
+FAIL 28,21: resulting DOM for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 28,21: resulting range position for range [foreignDoc.body, 0, foreignTextNode, 36], node foreignDoctype
+FAIL 29,0: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node paras[0] assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 29,0: resulting range position for range [xmlDoc, 1, xmlComment, 0], node paras[0]
+FAIL 29,1: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node paras[0].firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 29,1: resulting range position for range [xmlDoc, 1, xmlComment, 0], node paras[0].firstChild
+FAIL 29,2: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node paras[1].firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 29,2: resulting range position for range [xmlDoc, 1, xmlComment, 0], node paras[1].firstChild
+FAIL 29,3: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node foreignPara1 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 29,3: resulting range position for range [xmlDoc, 1, xmlComment, 0], node foreignPara1
+FAIL 29,4: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node foreignPara1.firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 29,4: resulting range position for range [xmlDoc, 1, xmlComment, 0], node foreignPara1.firstChild
+FAIL 29,5: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node detachedPara1 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 29,5: resulting range position for range [xmlDoc, 1, xmlComment, 0], node detachedPara1
+FAIL 29,6: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node detachedPara1.firstChild assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 29,6: resulting range position for range [xmlDoc, 1, xmlComment, 0], node detachedPara1.firstChild
+FAIL 29,7: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node document assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 29,7: resulting range position for range [xmlDoc, 1, xmlComment, 0], node document
+FAIL 29,8: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node detachedDiv assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 29,8: resulting range position for range [xmlDoc, 1, xmlComment, 0], node detachedDiv
+FAIL 29,9: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node foreignDoc assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 29,9: resulting range position for range [xmlDoc, 1, xmlComment, 0], node foreignDoc
+FAIL 29,10: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node foreignPara2 assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 29,10: resulting range position for range [xmlDoc, 1, xmlComment, 0], node foreignPara2
+FAIL 29,11: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node xmlDoc assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 29,11: resulting range position for range [xmlDoc, 1, xmlComment, 0], node xmlDoc
+FAIL 29,12: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node xmlElement assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 29,12: resulting range position for range [xmlDoc, 1, xmlComment, 0], node xmlElement
+FAIL 29,13: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node detachedTextNode assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 29,13: resulting range position for range [xmlDoc, 1, xmlComment, 0], node detachedTextNode
+FAIL 29,14: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node foreignTextNode assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: HierarchyRequestError: DOM Exception 3" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 3, expected 11
+PASS 29,14: resulting range position for range [xmlDoc, 1, xmlComment, 0], node foreignTextNode
+FAIL 29,15: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node processingInstruction assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 29,15: resulting range position for range [xmlDoc, 1, xmlComment, 0], node processingInstruction
+FAIL 29,16: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node detachedProcessingInstruction assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 29,16: resulting range position for range [xmlDoc, 1, xmlComment, 0], node detachedProcessingInstruction
+FAIL 29,17: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node comment assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 29,17: resulting range position for range [xmlDoc, 1, xmlComment, 0], node comment
+FAIL 29,18: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node detachedComment assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: BAD_BOUNDARYPOINTS_ERR: DOM Range Exception 1" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 1, expected 11
+PASS 29,18: resulting range position for range [xmlDoc, 1, xmlComment, 0], node detachedComment
+FAIL 29,19: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node docfrag assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 29,19: resulting range position for range [xmlDoc, 1, xmlComment, 0], node docfrag
+FAIL 29,20: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node doctype assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 29,20: resulting range position for range [xmlDoc, 1, xmlComment, 0], node doctype
+FAIL 29,21: resulting DOM for range [xmlDoc, 1, xmlComment, 0], node foreignDoctype assert_throws: A INVALID_STATE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_STATE_ERR: property "code" is equal to 2, expected 11
+PASS 29,21: resulting range position for range [xmlDoc, 1, xmlComment, 0], node foreignDoctype
+FAIL 30,0: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node paras[0] assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,0: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node paras[0] assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,1: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node paras[0].firstChild assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,1: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node paras[0].firstChild assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,2: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node paras[1].firstChild assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,2: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node paras[1].firstChild assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,3: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node foreignPara1 assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,3: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node foreignPara1 assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,4: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node foreignPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,4: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node foreignPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,5: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node detachedPara1 assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,5: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node detachedPara1 assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,6: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node detachedPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,6: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node detachedPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,7: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 30,7: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node document
+FAIL 30,8: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node detachedDiv assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,8: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node detachedDiv assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,9: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 30,9: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node foreignDoc
+FAIL 30,10: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node foreignPara2 assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,10: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node foreignPara2 assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,11: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 30,11: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node xmlDoc
+FAIL 30,12: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node xmlElement assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,12: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node xmlElement assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,13: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node detachedTextNode assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,13: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node detachedTextNode assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,14: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node foreignTextNode assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,14: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node foreignTextNode assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,15: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node processingInstruction assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,15: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node processingInstruction assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,16: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node detachedProcessingInstruction assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,16: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node detachedProcessingInstruction assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,17: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node comment assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,17: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node comment assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,18: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node detachedComment assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,18: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node detachedComment assert_true: First differing node: expected Text node "", got Text node "Uvwxyzab" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 30,19: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 30,19: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node docfrag
+FAIL 30,20: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 30,20: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node doctype
+FAIL 30,21: resulting DOM for range [detachedTextNode, 0, detachedTextNode, 8], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 30,21: resulting range position for range [detachedTextNode, 0, detachedTextNode, 8], node foreignDoctype
+FAIL 31,0: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node paras[0] assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,0: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node paras[0] assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,1: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node paras[0].firstChild assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,1: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node paras[0].firstChild assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,2: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node paras[1].firstChild assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,2: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node paras[1].firstChild assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,3: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignPara1 assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,3: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignPara1 assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,4: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,4: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,5: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedPara1 assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,5: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedPara1 assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,6: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,6: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,7: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 31,7: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node document
+FAIL 31,8: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedDiv assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,8: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedDiv assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,9: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 31,9: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignDoc
+FAIL 31,10: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignPara2 assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,10: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignPara2 assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,11: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 31,11: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node xmlDoc
+FAIL 31,12: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node xmlElement assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,12: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node xmlElement assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,13: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedTextNode assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,13: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedTextNode assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,14: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignTextNode assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,14: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignTextNode assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,15: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node processingInstruction assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,15: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node processingInstruction assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,16: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedProcessingInstruction assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,16: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedProcessingInstruction assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,17: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node comment assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,17: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node comment assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,18: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedComment assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,18: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node detachedComment assert_true: First differing node: expected Text node "", got Text node "Cdefghij" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 31,19: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 31,19: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node docfrag
+FAIL 31,20: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 31,20: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node doctype
+FAIL 31,21: resulting DOM for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 31,21: resulting range position for range [detachedForeignTextNode, 0, detachedForeignTextNode, 8], node foreignDoctype
+FAIL 32,0: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node paras[0] assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,0: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node paras[0] assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,1: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node paras[0].firstChild assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,1: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node paras[0].firstChild assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,2: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node paras[1].firstChild assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,2: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node paras[1].firstChild assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,3: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignPara1 assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,3: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignPara1 assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,4: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,4: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,5: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedPara1 assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,5: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedPara1 assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,6: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,6: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedPara1.firstChild assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,7: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 32,7: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node document
+FAIL 32,8: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedDiv assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,8: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedDiv assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,9: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 32,9: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignDoc
+FAIL 32,10: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignPara2 assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,10: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignPara2 assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,11: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 32,11: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node xmlDoc
+FAIL 32,12: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node xmlElement assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,12: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node xmlElement assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,13: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedTextNode assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,13: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedTextNode assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,14: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignTextNode assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,14: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignTextNode assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,15: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node processingInstruction assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,15: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node processingInstruction assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,16: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedProcessingInstruction assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,16: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedProcessingInstruction assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,17: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node comment assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,17: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node comment assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,18: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedComment assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,18: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node detachedComment assert_true: First differing node: expected Text node "", got Text node "Klmnopqr" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 32,19: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 32,19: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node docfrag
+FAIL 32,20: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 32,20: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node doctype
+FAIL 32,21: resulting DOM for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 32,21: resulting range position for range [detachedXmlTextNode, 0, detachedXmlTextNode, 8], node foreignDoctype
+FAIL 33,0: resulting DOM for range [detachedComment, 3, detachedComment, 4], node paras[0] assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,0: resulting range position for range [detachedComment, 3, detachedComment, 4], node paras[0] assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,1: resulting DOM for range [detachedComment, 3, detachedComment, 4], node paras[0].firstChild assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,1: resulting range position for range [detachedComment, 3, detachedComment, 4], node paras[0].firstChild assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,2: resulting DOM for range [detachedComment, 3, detachedComment, 4], node paras[1].firstChild assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,2: resulting range position for range [detachedComment, 3, detachedComment, 4], node paras[1].firstChild assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,3: resulting DOM for range [detachedComment, 3, detachedComment, 4], node foreignPara1 assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,3: resulting range position for range [detachedComment, 3, detachedComment, 4], node foreignPara1 assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,4: resulting DOM for range [detachedComment, 3, detachedComment, 4], node foreignPara1.firstChild assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,4: resulting range position for range [detachedComment, 3, detachedComment, 4], node foreignPara1.firstChild assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,5: resulting DOM for range [detachedComment, 3, detachedComment, 4], node detachedPara1 assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,5: resulting range position for range [detachedComment, 3, detachedComment, 4], node detachedPara1 assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,6: resulting DOM for range [detachedComment, 3, detachedComment, 4], node detachedPara1.firstChild assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,6: resulting range position for range [detachedComment, 3, detachedComment, 4], node detachedPara1.firstChild assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,7: resulting DOM for range [detachedComment, 3, detachedComment, 4], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 33,7: resulting range position for range [detachedComment, 3, detachedComment, 4], node document
+FAIL 33,8: resulting DOM for range [detachedComment, 3, detachedComment, 4], node detachedDiv assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,8: resulting range position for range [detachedComment, 3, detachedComment, 4], node detachedDiv assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,9: resulting DOM for range [detachedComment, 3, detachedComment, 4], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 33,9: resulting range position for range [detachedComment, 3, detachedComment, 4], node foreignDoc
+FAIL 33,10: resulting DOM for range [detachedComment, 3, detachedComment, 4], node foreignPara2 assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,10: resulting range position for range [detachedComment, 3, detachedComment, 4], node foreignPara2 assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,11: resulting DOM for range [detachedComment, 3, detachedComment, 4], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 33,11: resulting range position for range [detachedComment, 3, detachedComment, 4], node xmlDoc
+FAIL 33,12: resulting DOM for range [detachedComment, 3, detachedComment, 4], node xmlElement assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,12: resulting range position for range [detachedComment, 3, detachedComment, 4], node xmlElement assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,13: resulting DOM for range [detachedComment, 3, detachedComment, 4], node detachedTextNode assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,13: resulting range position for range [detachedComment, 3, detachedComment, 4], node detachedTextNode assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,14: resulting DOM for range [detachedComment, 3, detachedComment, 4], node foreignTextNode assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,14: resulting range position for range [detachedComment, 3, detachedComment, 4], node foreignTextNode assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,15: resulting DOM for range [detachedComment, 3, detachedComment, 4], node processingInstruction assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,15: resulting range position for range [detachedComment, 3, detachedComment, 4], node processingInstruction assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,16: resulting DOM for range [detachedComment, 3, detachedComment, 4], node detachedProcessingInstruction assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,16: resulting range position for range [detachedComment, 3, detachedComment, 4], node detachedProcessingInstruction assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,17: resulting DOM for range [detachedComment, 3, detachedComment, 4], node comment assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,17: resulting range position for range [detachedComment, 3, detachedComment, 4], node comment assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,18: resulting DOM for range [detachedComment, 3, detachedComment, 4], node detachedComment assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,18: resulting range position for range [detachedComment, 3, detachedComment, 4], node detachedComment assert_true: First differing node: expected Comment node <!--Stuwxyz-->, got Comment node <!--Stuvwxyz--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 33,19: resulting DOM for range [detachedComment, 3, detachedComment, 4], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 33,19: resulting range position for range [detachedComment, 3, detachedComment, 4], node docfrag
+FAIL 33,20: resulting DOM for range [detachedComment, 3, detachedComment, 4], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 33,20: resulting range position for range [detachedComment, 3, detachedComment, 4], node doctype
+FAIL 33,21: resulting DOM for range [detachedComment, 3, detachedComment, 4], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 33,21: resulting range position for range [detachedComment, 3, detachedComment, 4], node foreignDoctype
+FAIL 34,0: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node paras[0] assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,0: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node paras[0] assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,1: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node paras[0].firstChild assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,1: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node paras[0].firstChild assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,2: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node paras[1].firstChild assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,2: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node paras[1].firstChild assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,3: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignPara1 assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,3: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignPara1 assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,4: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignPara1.firstChild assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,4: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignPara1.firstChild assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,5: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedPara1 assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,5: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedPara1 assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,6: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedPara1.firstChild assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,6: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedPara1.firstChild assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,7: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 34,7: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node document
+FAIL 34,8: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedDiv assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,8: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedDiv assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,9: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 34,9: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignDoc
+FAIL 34,10: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignPara2 assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,10: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignPara2 assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,11: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 34,11: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node xmlDoc
+FAIL 34,12: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node xmlElement assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,12: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node xmlElement assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,13: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedTextNode assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,13: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedTextNode assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,14: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignTextNode assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,14: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignTextNode assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,15: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node processingInstruction assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,15: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node processingInstruction assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,16: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedProcessingInstruction assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,16: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedProcessingInstruction assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,17: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node comment assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,17: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node comment assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,18: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedComment assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,18: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node detachedComment assert_true: First differing node: expected Comment node <!--ריה יהודה-->, got Comment node <!--×ריה יהודה--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 34,19: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 34,19: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node docfrag
+FAIL 34,20: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 34,20: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node doctype
+FAIL 34,21: resulting DOM for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 34,21: resulting range position for range [detachedForeignComment, 0, detachedForeignComment, 1], node foreignDoctype
+FAIL 35,0: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node paras[0] assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,0: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node paras[0] assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,1: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node paras[0].firstChild assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,1: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node paras[0].firstChild assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,2: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node paras[1].firstChild assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,2: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node paras[1].firstChild assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,3: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignPara1 assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,3: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignPara1 assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,4: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignPara1.firstChild assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,4: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignPara1.firstChild assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,5: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedPara1 assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,5: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedPara1 assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,6: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedPara1.firstChild assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,6: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedPara1.firstChild assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,7: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 35,7: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node document
+FAIL 35,8: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedDiv assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,8: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedDiv assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,9: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 35,9: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignDoc
+FAIL 35,10: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignPara2 assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,10: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignPara2 assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,11: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 35,11: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node xmlDoc
+FAIL 35,12: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node xmlElement assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,12: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node xmlElement assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,13: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedTextNode assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,13: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedTextNode assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,14: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignTextNode assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,14: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignTextNode assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,15: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node processingInstruction assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,15: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node processingInstruction assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,16: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedProcessingInstruction assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,16: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedProcessingInstruction assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,17: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node comment assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,17: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node comment assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,18: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedComment assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,18: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node detachedComment assert_true: First differing node: expected Comment node <!--ב—×™×™× ×ליעזר-->, got Comment node <!--בן ×—×™×™× ×ליעזר--> [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 35,19: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 35,19: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node docfrag
+FAIL 35,20: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 35,20: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node doctype
+FAIL 35,21: resulting DOM for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 35,21: resulting range position for range [detachedXmlComment, 2, detachedXmlComment, 6], node foreignDoctype
+PASS 36,0: resulting DOM for range [docfrag, 0, docfrag, 0], node paras[0]
+PASS 36,0: resulting range position for range [docfrag, 0, docfrag, 0], node paras[0]
+PASS 36,1: resulting DOM for range [docfrag, 0, docfrag, 0], node paras[0].firstChild
+PASS 36,1: resulting range position for range [docfrag, 0, docfrag, 0], node paras[0].firstChild
+PASS 36,2: resulting DOM for range [docfrag, 0, docfrag, 0], node paras[1].firstChild
+PASS 36,2: resulting range position for range [docfrag, 0, docfrag, 0], node paras[1].firstChild
+PASS 36,3: resulting DOM for range [docfrag, 0, docfrag, 0], node foreignPara1
+PASS 36,3: resulting range position for range [docfrag, 0, docfrag, 0], node foreignPara1
+PASS 36,4: resulting DOM for range [docfrag, 0, docfrag, 0], node foreignPara1.firstChild
+PASS 36,4: resulting range position for range [docfrag, 0, docfrag, 0], node foreignPara1.firstChild
+PASS 36,5: resulting DOM for range [docfrag, 0, docfrag, 0], node detachedPara1
+PASS 36,5: resulting range position for range [docfrag, 0, docfrag, 0], node detachedPara1
+PASS 36,6: resulting DOM for range [docfrag, 0, docfrag, 0], node detachedPara1.firstChild
+PASS 36,6: resulting range position for range [docfrag, 0, docfrag, 0], node detachedPara1.firstChild
+FAIL 36,7: resulting DOM for range [docfrag, 0, docfrag, 0], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 36,7: resulting range position for range [docfrag, 0, docfrag, 0], node document
+PASS 36,8: resulting DOM for range [docfrag, 0, docfrag, 0], node detachedDiv
+PASS 36,8: resulting range position for range [docfrag, 0, docfrag, 0], node detachedDiv
+FAIL 36,9: resulting DOM for range [docfrag, 0, docfrag, 0], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 36,9: resulting range position for range [docfrag, 0, docfrag, 0], node foreignDoc
+PASS 36,10: resulting DOM for range [docfrag, 0, docfrag, 0], node foreignPara2
+PASS 36,10: resulting range position for range [docfrag, 0, docfrag, 0], node foreignPara2
+FAIL 36,11: resulting DOM for range [docfrag, 0, docfrag, 0], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 36,11: resulting range position for range [docfrag, 0, docfrag, 0], node xmlDoc
+PASS 36,12: resulting DOM for range [docfrag, 0, docfrag, 0], node xmlElement
+PASS 36,12: resulting range position for range [docfrag, 0, docfrag, 0], node xmlElement
+PASS 36,13: resulting DOM for range [docfrag, 0, docfrag, 0], node detachedTextNode
+PASS 36,13: resulting range position for range [docfrag, 0, docfrag, 0], node detachedTextNode
+PASS 36,14: resulting DOM for range [docfrag, 0, docfrag, 0], node foreignTextNode
+PASS 36,14: resulting range position for range [docfrag, 0, docfrag, 0], node foreignTextNode
+PASS 36,15: resulting DOM for range [docfrag, 0, docfrag, 0], node processingInstruction
+PASS 36,15: resulting range position for range [docfrag, 0, docfrag, 0], node processingInstruction
+PASS 36,16: resulting DOM for range [docfrag, 0, docfrag, 0], node detachedProcessingInstruction
+PASS 36,16: resulting range position for range [docfrag, 0, docfrag, 0], node detachedProcessingInstruction
+PASS 36,17: resulting DOM for range [docfrag, 0, docfrag, 0], node comment
+PASS 36,17: resulting range position for range [docfrag, 0, docfrag, 0], node comment
+PASS 36,18: resulting DOM for range [docfrag, 0, docfrag, 0], node detachedComment
+PASS 36,18: resulting range position for range [docfrag, 0, docfrag, 0], node detachedComment
+FAIL 36,19: resulting DOM for range [docfrag, 0, docfrag, 0], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 36,19: resulting range position for range [docfrag, 0, docfrag, 0], node docfrag
+FAIL 36,20: resulting DOM for range [docfrag, 0, docfrag, 0], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 36,20: resulting range position for range [docfrag, 0, docfrag, 0], node doctype
+FAIL 36,21: resulting DOM for range [docfrag, 0, docfrag, 0], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 36,21: resulting range position for range [docfrag, 0, docfrag, 0], node foreignDoctype
+FAIL 37,0: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node paras[0] assert_true: First differing node: expected Element node <p id="b" style="display:none">Ijklmnop
+</p>, got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for moved node's tree root. ] expected true got false
+FAIL 37,0: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node paras[0] assert_true: First differing node: expected Element node <p id="b" style="display:none">Ijklmnop
+</p>, got Text node "Äb̈c̈d̈ëf̈g̈ḧ
+" [Actual and expected mismatch for moved node's tree root. ] expected true got false
+PASS 37,1: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node paras[0].firstChild
+FAIL 37,1: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node paras[0].firstChild assert_equals: Unexpected endOffset after surroundContents() expected 0 but got 4
+PASS 37,2: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node paras[1].firstChild
+FAIL 37,2: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node paras[1].firstChild assert_equals: Unexpected endOffset after surroundContents() expected 0 but got 4
+FAIL 37,3: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node foreignPara1 assert_true: First differing node: expected Element node <p>Mnopqrst</p>, got Text node "Efghijkl" [Actual and expected mismatch for moved node's tree root. ] expected true got false
+FAIL 37,3: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node foreignPara1 assert_true: First differing node: expected Element node <p>Mnopqrst</p>, got Text node "Efghijkl" [Actual and expected mismatch for moved node's tree root. ] expected true got false
+PASS 37,4: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node foreignPara1.firstChild
+FAIL 37,4: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node foreignPara1.firstChild assert_equals: Unexpected endOffset after surroundContents() expected 0 but got 4
+FAIL 37,5: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node detachedPara1 assert_true: First differing node: expected Element node <p>Wxyzabcd</p>, got Text node "Opqrstuv" [Actual and expected mismatch for moved node's tree root. ] expected true got false
+FAIL 37,5: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node detachedPara1 assert_true: First differing node: expected Element node <p>Wxyzabcd</p>, got Text node "Opqrstuv" [Actual and expected mismatch for moved node's tree root. ] expected true got false
+PASS 37,6: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node detachedPara1.firstChild
+FAIL 37,6: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node detachedPara1.firstChild assert_equals: Unexpected endOffset after surroundContents() expected 0 but got 4
+FAIL 37,7: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node document assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 37,7: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node document
+FAIL 37,8: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node detachedDiv assert_unreached: DOMs were not equal but we couldn't figure out why Reached unreachable code
+FAIL 37,8: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node detachedDiv assert_unreached: DOMs were not equal but we couldn't figure out why Reached unreachable code
+FAIL 37,9: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node foreignDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 37,9: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node foreignDoc
+FAIL 37,10: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node foreignPara2 assert_true: First differing node: expected Text node "I admit that I harbor doubts about whether we really need...", got Text node "Mnopqrst" [Actual and expected mismatch for moved node's tree root. ] expected true got false
+FAIL 37,10: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node foreignPara2 assert_true: First differing node: expected Text node "I admit that I harbor doubts about whether we really need...", got Text node "Mnopqrst" [Actual and expected mismatch for moved node's tree root. ] expected true got false
+FAIL 37,11: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node xmlDoc assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 37,11: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node xmlDoc
+FAIL 37,12: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node xmlElement assert_true: First differing node: expected ProcessingInstruction node with target "somePI" and data "Did you know that \":syn sync fromstart\" is very useful wh...", got Text node "do re mi fa so la ti" [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 37,12: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node xmlElement assert_true: First differing node: expected ProcessingInstruction node with target "somePI" and data "Did you know that \":syn sync fromstart\" is very useful wh...", got Text node "do re mi fa so la ti" [Actual and expected mismatch for range's tree root. ] expected true got false
+PASS 37,13: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node detachedTextNode
+FAIL 37,13: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node detachedTextNode assert_equals: Unexpected endOffset after surroundContents() expected 0 but got 4
+PASS 37,14: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node foreignTextNode
+FAIL 37,14: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node foreignTextNode assert_equals: Unexpected endOffset after surroundContents() expected 0 but got 4
+PASS 37,15: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node processingInstruction
+FAIL 37,15: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node processingInstruction assert_equals: Unexpected endOffset after surroundContents() expected 0 but got 4
+FAIL 37,16: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node detachedProcessingInstruction assert_true: First differing node: expected ProcessingInstruction node with target "somePI" and data "Did you know that \":syn sync fromstart\" is very useful wh...", got ProcessingInstruction node with target "somePI" and data "you know that \":syn sync fromstart\" is very useful when u..." [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 37,16: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node detachedProcessingInstruction assert_true: First differing node: expected ProcessingInstruction node with target "somePI" and data "Did you know that \":syn sync fromstart\" is very useful wh...", got ProcessingInstruction node with target "somePI" and data "you know that \":syn sync fromstart\" is very useful when u..." [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 37,17: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node comment assert_true: First differing node: expected ProcessingInstruction node with target "somePI" and data "Did you know that \":syn sync fromstart\" is very useful wh...", got ProcessingInstruction node with target "somePI" and data "you know that \":syn sync fromstart\" is very useful when u..." [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 37,17: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node comment assert_true: First differing node: expected ProcessingInstruction node with target "somePI" and data "Did you know that \":syn sync fromstart\" is very useful wh...", got ProcessingInstruction node with target "somePI" and data "you know that \":syn sync fromstart\" is very useful when u..." [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 37,18: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node detachedComment assert_true: First differing node: expected ProcessingInstruction node with target "somePI" and data "Did you know that \":syn sync fromstart\" is very useful wh...", got ProcessingInstruction node with target "somePI" and data "you know that \":syn sync fromstart\" is very useful when u..." [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 37,18: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node detachedComment assert_true: First differing node: expected ProcessingInstruction node with target "somePI" and data "Did you know that \":syn sync fromstart\" is very useful wh...", got ProcessingInstruction node with target "somePI" and data "you know that \":syn sync fromstart\" is very useful when u..." [Actual and expected mismatch for range's tree root. ] expected true got false
+FAIL 37,19: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node docfrag assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 37,19: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node docfrag
+FAIL 37,20: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node doctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 37,20: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node doctype
+FAIL 37,21: resulting DOM for range [processingInstruction, 0, processingInstruction, 4], node foreignDoctype assert_throws: A INVALID_NODE_TYPE_ERR must be thrown in this case function "function () {
+ try {
+ actualRange.surroun..." threw object "Error: INVALID_NODE_TYPE_ERR: DOM Range Exception 2" that is not a DOMException INVALID_NODE_TYPE_ERR: property "code" is equal to 2, expected 24
+PASS 37,21: resulting range position for range [processingInstruction, 0, processingInstruction, 4], node foreignDoctype
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesRangesurroundContentshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-surroundContents.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-surroundContents.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/Range-surroundContents.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,354 @@
</span><ins>+<!doctype html>
+<meta charset=utf-8>
+<title>Range.surroundContents() tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<p>To debug test failures, add a query parameter "subtest" with the test id (like
+"?subtest=5,16"). Only that test will be run. Then you can look at the resulting
+iframes in the DOM.
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+testDiv.parentNode.removeChild(testDiv);
+
+function mySurroundContents(range, newParent) {
+ try {
+ // "If the detached flag is set, throw an "InvalidStateError" exception
+ // and terminate these steps."
+ try {
+ range.collapsed;
+ } catch (e) {
+ return "INVALID_STATE_ERR";
+ }
+
+ // "If a non-Text node is partially contained in the context object,
+ // throw a "InvalidStateError" exception and terminate these steps."
+ var node = range.commonAncestorContainer;
+ var stop = nextNodeDescendants(node);
+ for (; node != stop; node = nextNode(node)) {
+ if (node.nodeType != Node.TEXT_NODE
+ && isPartiallyContained(node, range)) {
+ return "INVALID_STATE_ERR";
+ }
+ }
+
+ // "If newParent is a Document, DocumentType, or DocumentFragment node,
+ // throw an "InvalidNodeTypeError" exception and terminate these
+ // steps."
+ if (newParent.nodeType == Node.DOCUMENT_NODE
+ || newParent.nodeType == Node.DOCUMENT_TYPE_NODE
+ || newParent.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {
+ return "INVALID_NODE_TYPE_ERR";
+ }
+
+ // "Call extractContents() on the context object, and let fragment be
+ // the result."
+ var fragment = myExtractContents(range);
+ if (typeof fragment == "string") {
+ return fragment;
+ }
+
+ // "While newParent has children, remove its first child."
+ while (newParent.childNodes.length) {
+ newParent.removeChild(newParent.firstChild);
+ }
+
+ // "Call insertNode(newParent) on the context object."
+ var ret = myInsertNode(range, newParent);
+ if (typeof ret == "string") {
+ return ret;
+ }
+
+ // "Call appendChild(fragment) on newParent."
+ newParent.appendChild(fragment);
+
+ // "Call selectNode(newParent) on the context object."
+ //
+ // We just reimplement this in-place.
+ if (!newParent.parentNode) {
+ return "INVALID_NODE_TYPE_ERR";
+ }
+ var index = indexOf(newParent);
+ range.setStart(newParent.parentNode, index);
+ range.setEnd(newParent.parentNode, index + 1);
+ } catch (e) {
+ return getDomExceptionName(e);
+ }
+}
+
+function restoreIframe(iframe, i, j) {
+ // Most of this function is designed to work around the fact that Opera
+ // doesn't let you add a doctype to a document that no longer has one, in
+ // any way I can figure out. I eventually compromised on something that
+ // will still let Opera pass most tests that don't actually involve
+ // doctypes.
+ while (iframe.contentDocument.firstChild
+ && iframe.contentDocument.firstChild.nodeType != Node.DOCUMENT_TYPE_NODE) {
+ iframe.contentDocument.removeChild(iframe.contentDocument.firstChild);
+ }
+
+ while (iframe.contentDocument.lastChild
+ && iframe.contentDocument.lastChild.nodeType != Node.DOCUMENT_TYPE_NODE) {
+ iframe.contentDocument.removeChild(iframe.contentDocument.lastChild);
+ }
+
+ if (!iframe.contentDocument.firstChild) {
+ // This will throw an exception in Opera if we reach here, which is why
+ // I try to avoid it. It will never happen in a browser that obeys the
+ // spec, so it's really just insurance. I don't think it actually gets
+ // hit by anything.
+ iframe.contentDocument.appendChild(iframe.contentDocument.implementation.createDocumentType("html", "", ""));
+ }
+ iframe.contentDocument.appendChild(referenceDoc.documentElement.cloneNode(true));
+ iframe.contentWindow.setupRangeTests();
+ iframe.contentWindow.testRangeInput = testRangesShort[i];
+ iframe.contentWindow.testNodeInput = testNodesShort[j];
+ iframe.contentWindow.run();
+}
+
+function testSurroundContents(i, j) {
+ var actualRange;
+ var expectedRange;
+ var actualNode;
+ var expectedNode;
+ var actualRoots = [];
+ var expectedRoots = [];
+
+ var detached = false;
+
+ domTests[i][j].step(function() {
+ restoreIframe(actualIframe, i, j);
+ restoreIframe(expectedIframe, i, j);
+
+ actualRange = actualIframe.contentWindow.testRange;
+ expectedRange = expectedIframe.contentWindow.testRange;
+ actualNode = actualIframe.contentWindow.testNode;
+ expectedNode = expectedIframe.contentWindow.testNode;
+
+ try {
+ actualRange.collapsed;
+ } catch (e) {
+ detached = true;
+ }
+
+ assert_equals(actualIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for actual surroundContents()");
+ assert_equals(expectedIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for simulated surroundContents()");
+ assert_equals(typeof actualRange, "object",
+ "typeof Range produced in actual iframe");
+ assert_false(actualRange === null,
+ "Range produced in actual iframe was null");
+ assert_equals(typeof expectedRange, "object",
+ "typeof Range produced in expected iframe");
+ assert_false(expectedRange === null,
+ "Range produced in expected iframe was null");
+ assert_equals(typeof actualNode, "object",
+ "typeof Node produced in actual iframe");
+ assert_false(actualNode === null,
+ "Node produced in actual iframe was null");
+ assert_equals(typeof expectedNode, "object",
+ "typeof Node produced in expected iframe");
+ assert_false(expectedNode === null,
+ "Node produced in expected iframe was null");
+
+ // We want to test that the trees containing the ranges are equal, and
+ // also the trees containing the moved nodes. These might not be the
+ // same, if we're inserting a node from a detached tree or a different
+ // document.
+ //
+ // Detached ranges are always in the contentDocument.
+ if (detached) {
+ actualRoots.push(actualIframe.contentDocument);
+ expectedRoots.push(expectedIframe.contentDocument);
+ } else {
+ actualRoots.push(furthestAncestor(actualRange.startContainer));
+ expectedRoots.push(furthestAncestor(expectedRange.startContainer));
+ }
+
+ if (furthestAncestor(actualNode) != actualRoots[0]) {
+ actualRoots.push(furthestAncestor(actualNode));
+ }
+ if (furthestAncestor(expectedNode) != expectedRoots[0]) {
+ expectedRoots.push(furthestAncestor(expectedNode));
+ }
+
+ assert_equals(actualRoots.length, expectedRoots.length,
+ "Either the actual node and actual range are in the same tree but the expected are in different trees, or vice versa");
+
+ // This doctype stuff is to work around the fact that Opera 11.00 will
+ // move around doctypes within a document, even to totally invalid
+ // positions, but it won't allow a new doctype to be added to a
+ // document in any way I can figure out. So if we try moving a doctype
+ // to some invalid place, in Opera it will actually succeed, and then
+ // restoreIframe() will remove the doctype along with the root element,
+ // and then nothing can re-add the doctype. So instead, we catch it
+ // during the test itself and move it back to the right place while we
+ // still can.
+ //
+ // I spent *way* too much time debugging and working around this bug.
+ var actualDoctype = actualIframe.contentDocument.doctype;
+ var expectedDoctype = expectedIframe.contentDocument.doctype;
+
+ var result;
+ try {
+ result = mySurroundContents(expectedRange, expectedNode);
+ } catch (e) {
+ if (expectedDoctype != expectedIframe.contentDocument.firstChild) {
+ expectedIframe.contentDocument.insertBefore(expectedDoctype, expectedIframe.contentDocument.firstChild);
+ }
+ throw e;
+ }
+ if (typeof result == "string") {
+ assert_throws(result, function() {
+ try {
+ actualRange.surroundContents(actualNode);
+ } catch (e) {
+ if (expectedDoctype != expectedIframe.contentDocument.firstChild) {
+ expectedIframe.contentDocument.insertBefore(expectedDoctype, expectedIframe.contentDocument.firstChild);
+ }
+ if (actualDoctype != actualIframe.contentDocument.firstChild) {
+ actualIframe.contentDocument.insertBefore(actualDoctype, actualIframe.contentDocument.firstChild);
+ }
+ throw e;
+ }
+ }, "A " + result + " must be thrown in this case");
+ // Don't return, we still need to test DOM equality
+ } else {
+ try {
+ actualRange.surroundContents(actualNode);
+ } catch (e) {
+ if (expectedDoctype != expectedIframe.contentDocument.firstChild) {
+ expectedIframe.contentDocument.insertBefore(expectedDoctype, expectedIframe.contentDocument.firstChild);
+ }
+ if (actualDoctype != actualIframe.contentDocument.firstChild) {
+ actualIframe.contentDocument.insertBefore(actualDoctype, actualIframe.contentDocument.firstChild);
+ }
+ throw e;
+ }
+ }
+
+ for (var k = 0; k < actualRoots.length; k++) {
+ assertNodesEqual(actualRoots[k], expectedRoots[k], k ? "moved node's tree root" : "range's tree root");
+ }
+ });
+ domTests[i][j].done();
+
+ positionTests[i][j].step(function() {
+ assert_equals(actualIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for actual surroundContents()");
+ assert_equals(expectedIframe.contentWindow.unexpectedException, null,
+ "Unexpected exception thrown when setting up Range for simulated surroundContents()");
+ assert_equals(typeof actualRange, "object",
+ "typeof Range produced in actual iframe");
+ assert_false(actualRange === null,
+ "Range produced in actual iframe was null");
+ assert_equals(typeof expectedRange, "object",
+ "typeof Range produced in expected iframe");
+ assert_false(expectedRange === null,
+ "Range produced in expected iframe was null");
+ assert_equals(typeof actualNode, "object",
+ "typeof Node produced in actual iframe");
+ assert_false(actualNode === null,
+ "Node produced in actual iframe was null");
+ assert_equals(typeof expectedNode, "object",
+ "typeof Node produced in expected iframe");
+ assert_false(expectedNode === null,
+ "Node produced in expected iframe was null");
+
+ for (var k = 0; k < actualRoots.length; k++) {
+ assertNodesEqual(actualRoots[k], expectedRoots[k], k ? "moved node's tree root" : "range's tree root");
+ }
+
+ if (detached) {
+ // No further tests we can do
+ return;
+ }
+
+ assert_equals(actualRange.startOffset, expectedRange.startOffset,
+ "Unexpected startOffset after surroundContents()");
+ assert_equals(actualRange.endOffset, expectedRange.endOffset,
+ "Unexpected endOffset after surroundContents()");
+ // How do we decide that the two nodes are equal, since they're in
+ // different trees? Since the DOMs are the same, it's enough to check
+ // that the index in the parent is the same all the way up the tree.
+ // But we can first cheat by just checking they're actually equal.
+ assert_true(actualRange.startContainer.isEqualNode(expectedRange.startContainer),
+ "Unexpected startContainer after surroundContents(), expected " +
+ expectedRange.startContainer.nodeName.toLowerCase() + " but got " +
+ actualRange.startContainer.nodeName.toLowerCase());
+ var currentActual = actualRange.startContainer;
+ var currentExpected = expectedRange.startContainer;
+ var actual = "";
+ var expected = "";
+ while (currentActual && currentExpected) {
+ actual = indexOf(currentActual) + "-" + actual;
+ expected = indexOf(currentExpected) + "-" + expected;
+
+ currentActual = currentActual.parentNode;
+ currentExpected = currentExpected.parentNode;
+ }
+ actual = actual.substr(0, actual.length - 1);
+ expected = expected.substr(0, expected.length - 1);
+ assert_equals(actual, expected,
+ "startContainer superficially looks right but is actually the wrong node if you trace back its index in all its ancestors (I'm surprised this actually happened");
+ });
+ positionTests[i][j].done();
+}
+
+testRanges.unshift('"detached"');
+
+var iStart = 0;
+var iStop = testRangesShort.length;
+var jStart = 0;
+var jStop = testNodesShort.length;
+
+if (/subtest=[0-9]+,[0-9]+/.test(location.search)) {
+ var matches = /subtest=([0-9]+),([0-9]+)/.exec(location.search);
+ iStart = Number(matches[1]);
+ iStop = Number(matches[1]) + 1;
+ jStart = Number(matches[2]) + 0;
+ jStop = Number(matches[2]) + 1;
+}
+
+var domTests = [];
+var positionTests = [];
+for (var i = iStart; i < iStop; i++) {
+ domTests[i] = [];
+ positionTests[i] = [];
+ for (var j = jStart; j < jStop; j++) {
+ domTests[i][j] = async_test(i + "," + j + ": resulting DOM for range " + testRangesShort[i] + ", node " + testNodesShort[j]);
+ positionTests[i][j] = async_test(i + "," + j + ": resulting range position for range " + testRangesShort[i] + ", node " + testNodesShort[j]);
+ }
+}
+
+var actualIframe = document.createElement("iframe");
+actualIframe.style.display = "none";
+actualIframe.id = "actual";
+document.body.appendChild(actualIframe);
+
+var expectedIframe = document.createElement("iframe");
+expectedIframe.style.display = "none";
+expectedIframe.id = "expected";
+document.body.appendChild(expectedIframe);
+
+var referenceDoc = document.implementation.createHTMLDocument("");
+referenceDoc.removeChild(referenceDoc.documentElement);
+
+actualIframe.onload = function() {
+ expectedIframe.onload = function() {
+ for (var i = iStart; i < iStop; i++) {
+ for (var j = jStart; j < jStop; j++) {
+ testSurroundContents(i, j);
+ }
+ }
+ }
+ expectedIframe.src = "resources/Range-test-iframe.html";
+ referenceDoc.appendChild(actualIframe.contentDocument.documentElement.cloneNode(true));
+}
+actualIframe.src = "resources/Range-test-iframe.html";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesresourcesRangetestiframehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/resources/Range-test-iframe.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/resources/Range-test-iframe.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/resources/Range-test-iframe.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,56 @@
</span><ins>+<!doctype html>
+<title>Range test iframe</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<body onload=run()>
+<script src=../../common.js></script>
+<script>
+"use strict";
+
+// This script only exists because we want to evaluate the range endpoints
+// in each iframe using that iframe's local variables set up by common.js. It
+// just creates the range and does nothing else. The data is returned via
+// window.testRange, and if an exception is thrown, it's put in
+// window.unexpectedException.
+window.unexpectedException = null;
+
+function run() {
+ try {
+ window.unexpectedException = null;
+
+ if (typeof window.testNodeInput != "undefined") {
+ window.testNode = eval(window.testNodeInput);
+ }
+
+ var rangeEndpoints;
+ if (typeof window.testRangeInput == "undefined") {
+ // Use the hash (old way of doing things, bad because it requires
+ // navigation)
+ if (location.hash == "") {
+ return;
+ }
+ rangeEndpoints = eval(location.hash.substr(1));
+ } else {
+ // Get the variable directly off the window, faster and can be done
+ // synchronously
+ rangeEndpoints = eval(window.testRangeInput);
+ }
+
+ var range;
+ if (rangeEndpoints == "detached") {
+ range = document.createRange();
+ range.detach();
+ } else {
+ range = ownerDocument(rangeEndpoints[0]).createRange();
+ range.setStart(rangeEndpoints[0], rangeEndpoints[1]);
+ range.setEnd(rangeEndpoints[2], rangeEndpoints[3]);
+ }
+
+ window.testRange = range;
+ } catch(e) {
+ window.unexpectedException = e;
+ }
+}
+
+testDiv.style.display = "none";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomrangesw3cimportlog"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/ranges/w3c-import.log (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/ranges/w3c-import.log         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/ranges/w3c-import.log        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+The tests in this directory were imported from the W3C repository.
+Do NOT modify these tests directly in Webkit.
+Instead, create a pull request on the W3C CSS or WPT github:
+        https://github.com/w3c/csswg-test
+        https://github.com/w3c/web-platform-tests
+
+Then run the Tools/Scripts/import-w3c-tests in Webkit to reimport
+
+Do NOT modify or remove this file
+
+------------------------------------------------------------------------
+Properties requiring vendor prefixes:
+None
+Property values requiring vendor prefixes:
+None
+------------------------------------------------------------------------
+List of files:
+/LayoutTests/http/tests/w3c/dom/ranges/Range-attributes.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneContents.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-cloneRange.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-collapse.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer-2.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-commonAncestorContainer.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-compareBoundaryPoints.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint-2.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-comparePoint.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-deleteContents.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-detach.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-extractContents.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-insertNode.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode-binding.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-intersectsNode.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-isPointInRange.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-mutations.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-selectNode.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-set.html
+/LayoutTests/http/tests/w3c/dom/ranges/Range-surroundContents.html
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalNodeFilterconstantsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeFilter-constants-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeFilter-constants-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeFilter-constants-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+
+PASS Constants for acceptNode on NodeFilter interface object.
+PASS Constants for whatToShow on NodeFilter interface object.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalNodeFilterconstantshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeFilter-constants.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeFilter-constants.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeFilter-constants.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+<!doctype html>
+<title>NodeFilter constants</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../constants.js"></script>
+<div id="log"></div>
+<script>
+var objects;
+setup(function() {
+ objects = [
+ [NodeFilter, "NodeFilter interface object"],
+ ]
+})
+testConstants(objects, [
+ ["FILTER_ACCEPT", 1],
+ ["FILTER_REJECT", 2],
+ ["FILTER_SKIP", 3]
+], "acceptNode")
+testConstants(objects, [
+ ["SHOW_ALL", 0xFFFFFFFF],
+ ["SHOW_ELEMENT", 0x1],
+ ["SHOW_ATTRIBUTE", 0x2],
+ ["SHOW_TEXT", 0x4],
+ ["SHOW_CDATA_SECTION", 0x8],
+ ["SHOW_ENTITY_REFERENCE", 0x10],
+ ["SHOW_ENTITY", 0x20],
+ ["SHOW_PROCESSING_INSTRUCTION", 0x40],
+ ["SHOW_COMMENT", 0x80],
+ ["SHOW_DOCUMENT", 0x100],
+ ["SHOW_DOCUMENT_TYPE", 0x200],
+ ["SHOW_DOCUMENT_FRAGMENT", 0x400],
+ ["SHOW_NOTATION", 0x800]
+], "whatToShow")
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalNodeIteratorexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,747 @@
</span><ins>+
+PASS detach() should be a no-op
+PASS createNodeIterator() parameter defaults
+PASS createNodeIterator() with null as arguments
+FAIL createNodeIterator() with undefined as arguments assert_equals: whatToShow expected 4294967295 but got 0
+PASS Propagate exception from filter function
+PASS document.createNodeIterator(paras[0], 0, null)
+FAIL document.createNodeIterator(paras[0], 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0], 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0], 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[0], 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(paras[0], 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0], 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0], 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[0], NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(paras[0], NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0], NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0], NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[0], NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(paras[0], NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0], NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0], NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[0], NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(paras[0], NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0], NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0], NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[0].firstChild, 0, null)
+FAIL document.createNodeIterator(paras[0].firstChild, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0].firstChild, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0].firstChild, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[0].firstChild, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(paras[0].firstChild, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0].firstChild, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0].firstChild, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[0].firstChild, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(paras[0].firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0].firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0].firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[0].firstChild, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(paras[0].firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0].firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0].firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[0].firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(paras[0].firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0].firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[0].firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[1].firstChild, 0, null)
+FAIL document.createNodeIterator(paras[1].firstChild, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1].firstChild, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1].firstChild, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[1].firstChild, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(paras[1].firstChild, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1].firstChild, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1].firstChild, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[1].firstChild, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(paras[1].firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1].firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1].firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[1].firstChild, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(paras[1].firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1].firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1].firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[1].firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(paras[1].firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1].firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1].firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignPara1, 0, null)
+FAIL document.createNodeIterator(foreignPara1, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignPara1, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(foreignPara1, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignPara1, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(foreignPara1, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignPara1, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(foreignPara1, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignPara1, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(foreignPara1, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignPara1.firstChild, 0, null)
+FAIL document.createNodeIterator(foreignPara1.firstChild, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1.firstChild, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1.firstChild, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignPara1.firstChild, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(foreignPara1.firstChild, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1.firstChild, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1.firstChild, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignPara1.firstChild, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(foreignPara1.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignPara1.firstChild, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(foreignPara1.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignPara1.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(foreignPara1.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara1.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara1, 0, null)
+FAIL document.createNodeIterator(detachedPara1, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara1, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(detachedPara1, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara1, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(detachedPara1, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara1, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(detachedPara1, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara1, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(detachedPara1, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara1.firstChild, 0, null)
+FAIL document.createNodeIterator(detachedPara1.firstChild, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1.firstChild, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1.firstChild, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara1.firstChild, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(detachedPara1.firstChild, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1.firstChild, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1.firstChild, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara1.firstChild, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(detachedPara1.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara1.firstChild, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(detachedPara1.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara1.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(detachedPara1.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara1.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(document, 0, null)
+FAIL document.createNodeIterator(document, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(document, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(document, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(document, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(document, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(document, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(document, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(document, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(document, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(document, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(document, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(document, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(document, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(document, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(document, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(document, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(document, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(document, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(document, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedDiv, 0, null)
+FAIL document.createNodeIterator(detachedDiv, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedDiv, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedDiv, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedDiv, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(detachedDiv, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedDiv, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedDiv, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedDiv, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(detachedDiv, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedDiv, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedDiv, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedDiv, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(detachedDiv, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedDiv, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedDiv, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedDiv, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(detachedDiv, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedDiv, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedDiv, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignDoc, 0, null)
+FAIL document.createNodeIterator(foreignDoc, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoc, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoc, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignDoc, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(foreignDoc, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoc, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoc, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignDoc, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(foreignDoc, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoc, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoc, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignDoc, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(foreignDoc, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoc, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoc, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignDoc, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(foreignDoc, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoc, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoc, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignPara2, 0, null)
+FAIL document.createNodeIterator(foreignPara2, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara2, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara2, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignPara2, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(foreignPara2, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara2, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara2, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignPara2, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(foreignPara2, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara2, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara2, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignPara2, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(foreignPara2, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara2, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara2, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignPara2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(foreignPara2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignPara2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlDoc, 0, null)
+FAIL document.createNodeIterator(xmlDoc, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoc, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoc, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlDoc, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(xmlDoc, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoc, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoc, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlDoc, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(xmlDoc, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoc, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoc, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlDoc, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(xmlDoc, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoc, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoc, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlDoc, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(xmlDoc, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoc, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoc, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlElement, 0, null)
+FAIL document.createNodeIterator(xmlElement, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlElement, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlElement, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlElement, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(xmlElement, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlElement, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlElement, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlElement, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(xmlElement, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlElement, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlElement, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlElement, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(xmlElement, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlElement, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlElement, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlElement, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(xmlElement, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlElement, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlElement, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedTextNode, 0, null)
+FAIL document.createNodeIterator(detachedTextNode, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedTextNode, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedTextNode, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedTextNode, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(detachedTextNode, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedTextNode, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedTextNode, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedTextNode, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(detachedTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedTextNode, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(detachedTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(detachedTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignTextNode, 0, null)
+FAIL document.createNodeIterator(foreignTextNode, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignTextNode, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignTextNode, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignTextNode, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(foreignTextNode, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignTextNode, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignTextNode, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignTextNode, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(foreignTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignTextNode, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(foreignTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(foreignTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(processingInstruction, 0, null)
+FAIL document.createNodeIterator(processingInstruction, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(processingInstruction, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(processingInstruction, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(processingInstruction, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(processingInstruction, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(processingInstruction, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(processingInstruction, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(processingInstruction, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(processingInstruction, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(processingInstruction, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(processingInstruction, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(processingInstruction, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(processingInstruction, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(processingInstruction, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(processingInstruction, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(processingInstruction, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(processingInstruction, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(processingInstruction, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(processingInstruction, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedProcessingInstruction, 0, null)
+FAIL document.createNodeIterator(detachedProcessingInstruction, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedProcessingInstruction, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedProcessingInstruction, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedProcessingInstruction, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(detachedProcessingInstruction, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedProcessingInstruction, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedProcessingInstruction, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedProcessingInstruction, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(detachedProcessingInstruction, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedProcessingInstruction, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedProcessingInstruction, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedProcessingInstruction, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(detachedProcessingInstruction, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedProcessingInstruction, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedProcessingInstruction, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedProcessingInstruction, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(detachedProcessingInstruction, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedProcessingInstruction, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedProcessingInstruction, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(comment, 0, null)
+FAIL document.createNodeIterator(comment, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(comment, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(comment, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(comment, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(comment, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(comment, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(comment, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(comment, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(comment, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(comment, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(comment, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(comment, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(comment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(comment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(comment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(comment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(comment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(comment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(comment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedComment, 0, null)
+FAIL document.createNodeIterator(detachedComment, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedComment, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedComment, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedComment, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(detachedComment, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedComment, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedComment, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedComment, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(detachedComment, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedComment, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedComment, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedComment, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(detachedComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(detachedComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(docfrag, 0, null)
+FAIL document.createNodeIterator(docfrag, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(docfrag, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(docfrag, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(docfrag, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(docfrag, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(docfrag, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(docfrag, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(docfrag, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(docfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(docfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(docfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(docfrag, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(docfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(docfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(docfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(docfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(docfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(docfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(docfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(doctype, 0, null)
+FAIL document.createNodeIterator(doctype, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(doctype, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(doctype, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(doctype, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(doctype, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(doctype, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(doctype, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(doctype, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(doctype, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(doctype, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(doctype, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(doctype, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(doctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(doctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(doctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(doctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(doctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(doctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(doctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignDoctype, 0, null)
+FAIL document.createNodeIterator(foreignDoctype, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoctype, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoctype, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignDoctype, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(foreignDoctype, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoctype, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoctype, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignDoctype, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(foreignDoctype, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoctype, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoctype, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignDoctype, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(foreignDoctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignDoctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(foreignDoctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDoctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[1], 0, null)
+FAIL document.createNodeIterator(paras[1], 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1], 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1], 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[1], 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(paras[1], 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1], 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1], 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[1], NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(paras[1], NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1], NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1], NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[1], NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(paras[1], NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1], NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1], NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(paras[1], NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(paras[1], NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1], NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(paras[1], NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara2, 0, null)
+FAIL document.createNodeIterator(detachedPara2, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara2, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(detachedPara2, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara2, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(detachedPara2, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara2, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(detachedPara2, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(detachedPara2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara2.firstChild, 0, null)
+FAIL document.createNodeIterator(detachedPara2.firstChild, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2.firstChild, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2.firstChild, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara2.firstChild, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(detachedPara2.firstChild, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2.firstChild, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2.firstChild, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara2.firstChild, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(detachedPara2.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara2.firstChild, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(detachedPara2.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedPara2.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(detachedPara2.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedPara2.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(testDiv, 0, null)
+FAIL document.createNodeIterator(testDiv, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(testDiv, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(testDiv, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(testDiv, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(testDiv, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(testDiv, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(testDiv, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(testDiv, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(testDiv, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(testDiv, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(testDiv, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(testDiv, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(testDiv, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(testDiv, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(testDiv, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(testDiv, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(testDiv, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(testDiv, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(testDiv, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedXmlElement, 0, null)
+FAIL document.createNodeIterator(detachedXmlElement, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlElement, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlElement, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedXmlElement, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(detachedXmlElement, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlElement, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlElement, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedXmlElement, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(detachedXmlElement, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlElement, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlElement, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedXmlElement, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(detachedXmlElement, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlElement, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlElement, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedXmlElement, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(detachedXmlElement, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlElement, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlElement, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedForeignTextNode, 0, null)
+FAIL document.createNodeIterator(detachedForeignTextNode, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignTextNode, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignTextNode, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedForeignTextNode, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(detachedForeignTextNode, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignTextNode, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignTextNode, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedForeignTextNode, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(detachedForeignTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedForeignTextNode, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(detachedForeignTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedForeignTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(detachedForeignTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlTextNode, 0, null)
+FAIL document.createNodeIterator(xmlTextNode, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlTextNode, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlTextNode, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlTextNode, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(xmlTextNode, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlTextNode, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlTextNode, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlTextNode, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(xmlTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlTextNode, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(xmlTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(xmlTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedXmlTextNode, 0, null)
+FAIL document.createNodeIterator(detachedXmlTextNode, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlTextNode, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlTextNode, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedXmlTextNode, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(detachedXmlTextNode, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlTextNode, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlTextNode, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedXmlTextNode, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(detachedXmlTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedXmlTextNode, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(detachedXmlTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedXmlTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(detachedXmlTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlComment, 0, null)
+FAIL document.createNodeIterator(xmlComment, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlComment, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlComment, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlComment, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(xmlComment, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlComment, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlComment, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlComment, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(xmlComment, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlComment, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlComment, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlComment, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(xmlComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(xmlComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignComment, 0, null)
+FAIL document.createNodeIterator(foreignComment, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignComment, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignComment, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignComment, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(foreignComment, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignComment, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignComment, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignComment, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(foreignComment, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignComment, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignComment, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignComment, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(foreignComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(foreignComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedForeignComment, 0, null)
+FAIL document.createNodeIterator(detachedForeignComment, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignComment, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignComment, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedForeignComment, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(detachedForeignComment, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignComment, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignComment, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedForeignComment, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(detachedForeignComment, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignComment, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignComment, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedForeignComment, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(detachedForeignComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedForeignComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(detachedForeignComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedForeignComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedXmlComment, 0, null)
+FAIL document.createNodeIterator(detachedXmlComment, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlComment, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlComment, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedXmlComment, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(detachedXmlComment, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlComment, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlComment, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedXmlComment, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(detachedXmlComment, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlComment, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlComment, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedXmlComment, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(detachedXmlComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(detachedXmlComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(detachedXmlComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(detachedXmlComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignDocfrag, 0, null)
+FAIL document.createNodeIterator(foreignDocfrag, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDocfrag, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDocfrag, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignDocfrag, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(foreignDocfrag, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDocfrag, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDocfrag, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignDocfrag, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(foreignDocfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDocfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDocfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignDocfrag, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(foreignDocfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDocfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDocfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(foreignDocfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(foreignDocfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDocfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(foreignDocfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlDocfrag, 0, null)
+FAIL document.createNodeIterator(xmlDocfrag, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDocfrag, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDocfrag, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlDocfrag, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(xmlDocfrag, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDocfrag, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDocfrag, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlDocfrag, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(xmlDocfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDocfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDocfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlDocfrag, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(xmlDocfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDocfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDocfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlDocfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(xmlDocfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDocfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDocfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlDoctype, 0, null)
+FAIL document.createNodeIterator(xmlDoctype, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoctype, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoctype, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlDoctype, 0xFFFFFFFF, null)
+FAIL document.createNodeIterator(xmlDoctype, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoctype, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoctype, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlDoctype, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createNodeIterator(xmlDoctype, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoctype, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoctype, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlDoctype, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createNodeIterator(xmlDoctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createNodeIterator(xmlDoctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createNodeIterator(xmlDoctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createNodeIterator(xmlDoctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalNodeIteratorremovalexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator-removal-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator-removal-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator-removal-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,24 @@
</span><ins>+
+PASS Test removing node paras[0]
+PASS Test removing node paras[0].firstChild
+PASS Test removing node paras[1].firstChild
+PASS Test removing node foreignPara1
+PASS Test removing node foreignPara1.firstChild
+PASS Test removing node detachedPara1
+PASS Test removing node detachedPara1.firstChild
+PASS Test removing node foreignPara2
+PASS Test removing node xmlElement
+PASS Test removing node foreignTextNode
+PASS Test removing node processingInstruction
+PASS Test removing node comment
+PASS Test removing node doctype
+PASS Test removing node foreignDoctype
+PASS Test removing node paras[1]
+PASS Test removing node detachedPara2
+PASS Test removing node detachedPara2.firstChild
+PASS Test removing node testDiv
+PASS Test removing node xmlTextNode
+PASS Test removing node xmlComment
+PASS Test removing node foreignComment
+PASS Test removing node xmlDoctype
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalNodeIteratorremovalhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator-removal.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator-removal.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator-removal.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,100 @@
</span><ins>+<!doctype html>
+<title>NodeIterator removal tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+for (var i = 0; i < testNodes.length; i++) {
+ var node = eval(testNodes[i]);
+ if (!node.parentNode) {
+ // Nothing to test
+ continue;
+ }
+ test(function() {
+ var iters = [];
+ var descs = [];
+ var expectedReferenceNodes = [];
+ var expectedPointers = [];
+
+ for (var j = 0; j < testNodes.length; j++) {
+ var root = eval(testNodes[j]);
+ // Add all distinct iterators with this root, calling nextNode()
+ // repeatedly until it winds up with the same iterator.
+ for (var k = 0; ; k++) {
+ var iter = document.createNodeIterator(root);
+ for (var l = 0; l < k; l++) {
+ iter.nextNode();
+ }
+ if (k && iter.referenceNode == iters[iters.length - 1].referenceNode
+ && iter.pointerBeforeReferenceNode
+ == iters[iters.length - 1].pointerBeforeReferenceNode) {
+ break;
+ } else {
+ iters.push(iter);
+ descs.push("document.createNodeIterator(" + testNodes[j]
+ + ") advanced " + k + " times");
+ expectedReferenceNodes.push(iter.referenceNode);
+ expectedPointers.push(iter.pointerBeforeReferenceNode);
+
+ var idx = iters.length - 1;
+
+ // "If the node is root or is not an inclusive ancestor of the
+ // referenceNode attribute value, terminate these steps."
+ //
+ // We also have to rule out the case where node is an ancestor of
+ // root, which is implicitly handled by the spec since such a node
+ // was not part of the iterator collection to start with.
+ if (isInclusiveAncestor(node, root)
+ || !isInclusiveAncestor(node, iter.referenceNode)) {
+ continue;
+ }
+
+ // "If the pointerBeforeReferenceNode attribute value is false, set
+ // the referenceNode attribute to the first node preceding the node
+ // that is being removed, and terminate these steps."
+ if (!iter.pointerBeforeReferenceNode) {
+ expectedReferenceNodes[idx] = previousNode(node);
+ continue;
+ }
+
+ // "If there is a node following the last inclusive descendant of the
+ // node that is being removed, set the referenceNode attribute to the
+ // first such node, and terminate these steps."
+ var next = nextNodeDescendants(node);
+ if (next) {
+ expectedReferenceNodes[idx] = next;
+ continue;
+ }
+
+ // "Set the referenceNode attribute to the first node preceding the
+ // node that is being removed and set the pointerBeforeReferenceNode
+ // attribute to false."
+ expectedReferenceNodes[idx] = previousNode(node);
+ expectedPointers[idx] = false;
+ }
+ }
+ }
+
+ var oldParent = node.parentNode;
+ var oldSibling = node.nextSibling;
+ oldParent.removeChild(node);
+
+ for (var j = 0; j < iters.length; j++) {
+ var iter = iters[j];
+ assert_equals(iter.referenceNode, expectedReferenceNodes[j],
+ ".referenceNode of " + descs[j]);
+ assert_equals(iter.pointerBeforeReferenceNode, expectedPointers[j],
+ ".pointerBeforeReferenceNode of " + descs[j]);
+ }
+
+ oldParent.insertBefore(node, oldSibling);
+ }, "Test removing node " + testNodes[i]);
+}
+
+testDiv.style.display = "none";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalNodeIteratorhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,202 @@
</span><ins>+<!doctype html>
+<title>NodeIterator tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+function check_iter(iter, root, whatToShowValue) {
+ whatToShowValue = whatToShowValue === undefined ? 0xFFFFFFFF : whatToShowValue;
+
+ assert_equals(iter.toString(), '[object NodeIterator]', 'toString');
+ assert_equals(iter.root, root, 'root');
+ assert_equals(iter.whatToShow, whatToShowValue, 'whatToShow');
+ assert_equals(iter.filter, null, 'filter');
+ assert_equals(iter.referenceNode, root, 'referenceNode');
+ assert_equals(iter.pointerBeforeReferenceNode, true, 'pointerBeforeReferenceNode');
+ assert_readonly(iter, 'root');
+ assert_readonly(iter, 'whatToShow');
+ assert_readonly(iter, 'filter');
+ assert_readonly(iter, 'referenceNode');
+ assert_readonly(iter, 'pointerBeforeReferenceNode');
+}
+
+test(function() {
+ var iter = document.createNodeIterator(document);
+ iter.detach();
+ iter.detach();
+}, "detach() should be a no-op");
+
+test(function() {
+ var iter = document.createNodeIterator(document);
+ check_iter(iter, document);
+}, "createNodeIterator() parameter defaults");
+
+test(function() {
+ var iter = document.createNodeIterator(document, null, null);
+ check_iter(iter, document, 0);
+}, "createNodeIterator() with null as arguments");
+
+test(function() {
+ var iter = document.createNodeIterator(document, undefined, undefined);
+ check_iter(iter, document);
+}, "createNodeIterator() with undefined as arguments");
+
+test(function() {
+ var iter = document.createNodeIterator(document, NodeFilter.SHOW_ALL,
+ function() { throw {name: "failed"} });
+ assert_throws({name: "failed"}, function() { iter.nextNode() });
+}, "Propagate exception from filter function");
+
+function testIterator(root, whatToShow, filter) {
+ var iter = document.createNodeIterator(root, whatToShow, filter);
+
+ assert_equals(iter.root, root, ".root");
+ assert_equals(iter.referenceNode, root, "Initial .referenceNode");
+ assert_equals(iter.pointerBeforeReferenceNode, true,
+ ".pointerBeforeReferenceNode");
+ assert_equals(iter.whatToShow, whatToShow, ".whatToShow");
+ assert_equals(iter.filter, filter, ".filter");
+
+ var expectedReferenceNode = root;
+ var expectedBeforeNode = true;
+ // "Let node be the value of the referenceNode attribute."
+ var node = root;
+ // "Let before node be the value of the pointerBeforeReferenceNode
+ // attribute."
+ var beforeNode = true;
+ var i = 1;
+ // Each loop iteration runs nextNode() once.
+ while (node) {
+ do {
+ if (!beforeNode) {
+ // "If before node is false, let node be the first node following node
+ // in the iterator collection. If there is no such node return null."
+ node = nextNode(node);
+ if (!isInclusiveDescendant(node, root)) {
+ node = null;
+ break;
+ }
+ } else {
+ // "If before node is true, set it to false."
+ beforeNode = false;
+ }
+ // "Filter node and let result be the return value.
+ //
+ // "If result is FILTER_ACCEPT, go to the next step in the overall set of
+ // steps.
+ //
+ // "Otherwise, run these substeps again."
+ if (!((1 << (node.nodeType - 1)) & whatToShow)
+ || (filter && filter(node) != NodeFilter.FILTER_ACCEPT)) {
+ continue;
+ }
+
+ // "Set the referenceNode attribute to node, set the
+ // pointerBeforeReferenceNode attribute to before node, and return node."
+ expectedReferenceNode = node;
+ expectedBeforeNode = beforeNode;
+
+ break;
+ } while (true);
+
+ assert_equals(iter.nextNode(), node, ".nextNode() " + i + " time(s)");
+ assert_equals(iter.referenceNode, expectedReferenceNode,
+ ".referenceNode after nextNode() " + i + " time(s)");
+ assert_equals(iter.pointerBeforeReferenceNode, expectedBeforeNode,
+ ".pointerBeforeReferenceNode after nextNode() " + i + " time(s)");
+
+ i++;
+ }
+
+ // Same but for previousNode() (mostly copy-pasted, oh well)
+ var iter = document.createNodeIterator(root, whatToShow, filter);
+
+ var expectedReferenceNode = root;
+ var expectedBeforeNode = true;
+ // "Let node be the value of the referenceNode attribute."
+ var node = root;
+ // "Let before node be the value of the pointerBeforeReferenceNode
+ // attribute."
+ var beforeNode = true;
+ var i = 1;
+ // Each loop iteration runs previousNode() once.
+ while (node) {
+ do {
+ if (beforeNode) {
+ // "If before node is true, let node be the first node preceding node
+ // in the iterator collection. If there is no such node return null."
+ node = previousNode(node);
+ if (!isInclusiveDescendant(node, root)) {
+ node = null;
+ break;
+ }
+ } else {
+ // "If before node is false, set it to true."
+ beforeNode = true;
+ }
+ // "Filter node and let result be the return value.
+ //
+ // "If result is FILTER_ACCEPT, go to the next step in the overall set of
+ // steps.
+ //
+ // "Otherwise, run these substeps again."
+ if (!((1 << (node.nodeType - 1)) & whatToShow)
+ || (filter && filter(node) != NodeFilter.FILTER_ACCEPT)) {
+ continue;
+ }
+
+ // "Set the referenceNode attribute to node, set the
+ // pointerBeforeReferenceNode attribute to before node, and return node."
+ expectedReferenceNode = node;
+ expectedBeforeNode = beforeNode;
+
+ break;
+ } while (true);
+
+ assert_equals(iter.previousNode(), node, ".previousNode() " + i + " time(s)");
+ assert_equals(iter.referenceNode, expectedReferenceNode,
+ ".referenceNode after previousNode() " + i + " time(s)");
+ assert_equals(iter.pointerBeforeReferenceNode, expectedBeforeNode,
+ ".pointerBeforeReferenceNode after previousNode() " + i + " time(s)");
+
+ i++;
+ }
+}
+
+var whatToShows = [
+ "0",
+ "0xFFFFFFFF",
+ "NodeFilter.SHOW_ELEMENT",
+ "NodeFilter.SHOW_ATTRIBUTE",
+ "NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT",
+];
+
+var callbacks = [
+ "null",
+ "(function(node) { return true })",
+ "(function(node) { return false })",
+ "(function(node) { return node.nodeName[0] == '#' })",
+];
+
+var tests = [];
+for (var i = 0; i < testNodes.length; i++) {
+ for (var j = 0; j < whatToShows.length; j++) {
+ for (var k = 0; k < callbacks.length; k++) {
+ tests.push([
+ "document.createNodeIterator(" + testNodes[i]
+ + ", " + whatToShows[j] + ", " + callbacks[k] + ")",
+ eval(testNodes[i]), eval(whatToShows[j]), eval(callbacks[k])
+ ]);
+ }
+ }
+}
+
+generate_tests(testIterator, tests);
+
+testDiv.style.display = "none";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkeracceptNodefilterexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-acceptNode-filter-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-acceptNode-filter-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-acceptNode-filter-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+Test JS objects as NodeFilters
+
+
+PASS Testing with raw function filter
+PASS Testing with object filter
+PASS Testing with null filter
+PASS Testing with undefined filter
+PASS Testing with object lacking acceptNode property
+PASS Testing with object with non-function acceptNode property
+PASS Testing with function having acceptNode function
+PASS Testing acceptNode callee
+PASS Testing with filter function that throws
+PASS Testing with filter object that throws
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkeracceptNodefilterhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-acceptNode-filter.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-acceptNode-filter.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-acceptNode-filter.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,156 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<!--
+Test adapted from https://mxr.mozilla.org/chromium/source/src/third_party/WebKit/LayoutTests/fast/dom/TreeWalker/script-tests/acceptNode-filter.js
+ -->
+<head>
+<title>TreeWalker: acceptNode-filter</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="traversal-support.js"></script>
+<link rel="stylesheet" href="/resources/testharness.css">
+<div id=log></div>
+</head>
+<body>
+<p>Test JS objects as NodeFilters</p>
+<script>
+var testElement;
+setup(function() {
+ testElement = document.createElement("div");
+ testElement.id = 'root';
+ //testElement.innerHTML='<div id="A1"><div id="B1"></div><div id="B2"></div></div>';
+
+ // XXX for Servo, build the tree without using innerHTML
+ var a1 = document.createElement("div");
+ a1.id = "A1";
+ var b1 = document.createElement("div");
+ b1.id = "B1";
+ var b2 = document.createElement("div");
+ b2.id = "B2";
+ testElement.appendChild(a1);
+ a1.appendChild(b1);
+ a1.appendChild(b2);
+});
+
+test(function()
+{
+ function filter(node)
+ {
+ if (node.id == "B1")
+ return NodeFilter.FILTER_SKIP;
+ return NodeFilter.FILTER_ACCEPT;
+ }
+
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter);
+ assert_node(walker.currentNode, { type: Element, id: 'root' });
+ assert_node(walker.firstChild(), { type: Element, id: 'A1' });
+ assert_node(walker.currentNode, { type: Element, id: 'A1' });
+ assert_node(walker.nextNode(), { type: Element, id: 'B2' });
+ assert_node(walker.currentNode, { type: Element, id: 'B2' });
+}, 'Testing with raw function filter');
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, {
+ acceptNode : function(node) {
+ if (node.id == "B1")
+ return NodeFilter.FILTER_SKIP;
+ return NodeFilter.FILTER_ACCEPT;
+ }
+ });
+ assert_node(walker.currentNode, { type: Element, id: 'root' });
+ assert_node(walker.firstChild(), { type: Element, id: 'A1' });
+ assert_node(walker.currentNode, { type: Element, id: 'A1' });
+ assert_node(walker.nextNode(), { type: Element, id: 'B2' });
+ assert_node(walker.currentNode, { type: Element, id: 'B2' });
+}, 'Testing with object filter');
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, null);
+ assert_node(walker.currentNode, { type: Element, id: 'root' });
+ assert_node(walker.firstChild(), { type: Element, id: 'A1' });
+ assert_node(walker.currentNode, { type: Element, id: 'A1' });
+ assert_node(walker.nextNode(), { type: Element, id: 'B1' });
+ assert_node(walker.currentNode, { type: Element, id: 'B1' });
+}, 'Testing with null filter');
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, undefined);
+ assert_node(walker.currentNode, { type: Element, id: 'root' });
+ assert_node(walker.firstChild(), { type: Element, id: 'A1' });
+ assert_node(walker.currentNode, { type: Element, id: 'A1' });
+ assert_node(walker.nextNode(), { type: Element, id: 'B1' });
+ assert_node(walker.currentNode, { type: Element, id: 'B1' });
+}, 'Testing with undefined filter');
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, {});
+ assert_throws(new TypeError(), function () { walker.firstChild(); });
+ assert_node(walker.currentNode, { type: Element, id: 'root' });
+ assert_throws(new TypeError(), function () { walker.nextNode(); });
+ assert_node(walker.currentNode, { type: Element, id: 'root' });
+}, 'Testing with object lacking acceptNode property');
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, { acceptNode: "foo" });
+ assert_throws(new TypeError(), function () { walker.firstChild(); });
+ assert_node(walker.currentNode, { type: Element, id: 'root' });
+ assert_throws(new TypeError(), function () { walker.nextNode(); });
+ assert_node(walker.currentNode, { type: Element, id: 'root' });
+}, 'Testing with object with non-function acceptNode property');
+
+test(function()
+{
+ var filter = function() { return NodeFilter.FILTER_ACCEPT; };
+ filter.acceptNode = function(node) { return NodeFilter.FILTER_SKIP; };
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter);
+ assert_node(walker.firstChild(), { type: Element, id: 'A1' });
+ assert_node(walker.nextNode(), { type: Element, id: 'B1' });
+}, 'Testing with function having acceptNode function');
+
+test(function()
+{
+ var filter = {
+ acceptNode: function(node) {
+ return NodeFilter.FILTER_ACCEPT;
+ }
+ };
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter);
+ assert_node(walker.firstChild(), { type: Element, id: 'A1' });
+}, 'Testing acceptNode callee');
+
+test(function()
+{
+ var test_error = { name: "test" };
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT,
+ function(node) {
+ throw test_error;
+ });
+ assert_throws(test_error, function () { walker.firstChild(); });
+ assert_node(walker.currentNode, { type: Element, id: 'root' });
+ assert_throws(test_error, function () { walker.nextNode(); });
+ assert_node(walker.currentNode, { type: Element, id: 'root' });
+}, 'Testing with filter function that throws');
+
+test(function()
+{
+ var test_error = { name: "test" };
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT,
+ {
+ acceptNode : function(node) {
+ throw test_error;
+ }
+ });
+ assert_throws(test_error, function () { walker.firstChild(); });
+ assert_node(walker.currentNode, { type: Element, id: 'root' });
+ assert_throws(test_error, function () { walker.nextNode(); });
+ assert_node(walker.currentNode, { type: Element, id: 'root' });
+}, 'Testing with filter object that throws');
+
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerbasicexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-basic-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-basic-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-basic-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+This test checks the basic functionality of TreeWalker.
+
+
+PASS Construct a TreeWalker by document.createTreeWalker(root).
+PASS Construct a TreeWalker by document.createTreeWalker(root, null, null).
+FAIL Construct a TreeWalker by document.createTreeWalker(root, undefined, undefined). assert_equals: whatToShow expected 4294967295 but got 0
+FAIL Give an invalid root node to document.createTreeWalker(). assert_throws: function "function () { document.createTreeWalker(null); }" did not throw
+PASS Walk over nodes.
+PASS Optional arguments to createTreeWalker should be optional (3 passed, null).
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerbasichtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-basic.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-basic.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-basic.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,155 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<!--
+Test adapted from https://mxr.mozilla.org/chromium/source/src/third_party/WebKit/LayoutTests/fast/dom/TreeWalker/TreeWalker-basic.html
+ -->
+<head>
+<title>TreeWalker: Basic test</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="traversal-support.js"></script>
+<link rel="stylesheet" href="/resources/testharness.css">
+<div id=log></div>
+</head>
+<body>
+<p>This test checks the basic functionality of TreeWalker.</p>
+<script>
+function createSampleDOM()
+{
+ // Tree structure:
+ // #a
+ // |
+ // +----+----+
+ // | |
+ // "b" #c
+ // |
+ // +----+----+
+ // | |
+ // #d <!--j-->
+ // |
+ // +----+----+
+ // | | |
+ // "e" #f "i"
+ // |
+ // +--+--+
+ // | |
+ // "g" <!--h-->
+ var div = document.createElement('div');
+ div.id = 'a';
+ // div.innerHTML = 'b<div id="c"><div id="d">e<span id="f">g<!--h--></span>i</div><!--j--></div>';
+
+ div.appendChild(document.createTextNode("b"));
+
+ var c = document.createElement("div");
+ c.id = 'c';
+ div.appendChild(c);
+
+ var d = document.createElement("div");
+ d.id = 'd';
+ c.appendChild(d);
+
+ var e = document.createTextNode("e");
+ d.appendChild(e);
+
+ var f = document.createElement("span");
+ f.id = 'f';
+ d.appendChild(f);
+
+ var g = document.createTextNode("g");
+ f.appendChild(g);
+
+ var h = document.createComment("h");
+ f.appendChild(h);
+
+ var i = document.createTextNode("i");
+ d.appendChild(i);
+
+ var j = document.createComment("j");
+ c.appendChild(j);
+
+ return div;
+}
+
+function check_walker(walker, root, whatToShowValue)
+{
+ whatToShowValue = whatToShowValue === undefined ? 0xFFFFFFFF : whatToShowValue;
+
+ assert_equals(walker.toString(), '[object TreeWalker]', 'toString');
+ assert_equals(walker.root, root, 'root');
+ assert_equals(walker.whatToShow, whatToShowValue, 'whatToShow');
+ assert_equals(walker.filter, null, 'filter');
+ assert_equals(walker.currentNode, root, 'currentNode');
+ assert_readonly(walker, 'root');
+ assert_readonly(walker, 'whatToShow');
+ assert_readonly(walker, 'filter');
+}
+
+test(function ()
+{
+ var root = createSampleDOM();
+ var walker = document.createTreeWalker(root);
+ check_walker(walker, root);
+}, 'Construct a TreeWalker by document.createTreeWalker(root).');
+
+test(function ()
+{
+ var root = createSampleDOM();
+ var walker = document.createTreeWalker(root, null, null);
+ check_walker(walker, root, 0);
+}, 'Construct a TreeWalker by document.createTreeWalker(root, null, null).');
+
+test(function ()
+{
+ var root = createSampleDOM();
+ var walker = document.createTreeWalker(root, undefined, undefined);
+ check_walker(walker, root);
+}, 'Construct a TreeWalker by document.createTreeWalker(root, undefined, undefined).');
+
+test(function ()
+{
+ assert_throws(new TypeError(), function () { document.createTreeWalker(); });
+ assert_throws(new TypeError(), function () { document.createTreeWalker(null); });
+ assert_throws(new TypeError(), function () { document.createTreeWalker(undefined); });
+ assert_throws(new TypeError(), function () { document.createTreeWalker(new Object()); });
+ assert_throws(new TypeError(), function () { document.createTreeWalker(1); });
+}, 'Give an invalid root node to document.createTreeWalker().');
+
+test(function ()
+{
+ var root = createSampleDOM();
+ var walker = document.createTreeWalker(root);
+ var f = root.lastChild.firstChild.childNodes[1]; // An element node: div#f.
+
+ assert_node(walker.currentNode, { type: Element, id: 'a' });
+ assert_equals(walker.parentNode(), null);
+ assert_node(walker.currentNode, { type: Element, id: 'a' });
+ assert_node(walker.firstChild(), { type: Text, nodeValue: 'b' });
+ assert_node(walker.currentNode, { type: Text, nodeValue: 'b' });
+ assert_node(walker.nextSibling(), { type: Element, id: 'c' });
+ assert_node(walker.currentNode, { type: Element, id: 'c' });
+ assert_node(walker.lastChild(), { type: Comment, nodeValue: 'j' });
+ assert_node(walker.currentNode, { type: Comment, nodeValue: 'j' });
+ assert_node(walker.previousSibling(), { type: Element, id: 'd' });
+ assert_node(walker.currentNode, { type: Element, id: 'd' });
+ assert_node(walker.nextNode(), { type: Text, nodeValue: 'e' });
+ assert_node(walker.currentNode, { type: Text, nodeValue: 'e' });
+ assert_node(walker.parentNode(), { type: Element, id: 'd' });
+ assert_node(walker.currentNode, { type: Element, id: 'd' });
+ assert_node(walker.previousNode(), { type: Element, id: 'c' });
+ assert_node(walker.currentNode, { type: Element, id: 'c' });
+ assert_equals(walker.nextSibling(), null);
+ assert_node(walker.currentNode, { type: Element, id: 'c' });
+ walker.currentNode = f;
+ assert_equals(walker.currentNode, f);
+}, 'Walk over nodes.');
+
+test(function() {
+ var treeWalker = document.createTreeWalker(document.body, 42, null);
+ assert_equals(treeWalker.root, document.body);
+ assert_equals(treeWalker.currentNode, document.body);
+ assert_equals(treeWalker.whatToShow, 42);
+ assert_equals(treeWalker.filter, null);
+}, "Optional arguments to createTreeWalker should be optional (3 passed, null).");
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkercurrentNodeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-currentNode-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-currentNode-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-currentNode-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
+
+Test TreeWalker currentNode functionality
+
+
+PASS Test that TreeWalker.parent() doesn't set the currentNode to a node not under the root.
+PASS Test that we handle setting the currentNode to arbitrary nodes not under the root element.
+PASS Test how we handle the case when the traversed to node is within the root, but the currentElement is not.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkercurrentNodehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-currentNode.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-currentNode.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-currentNode.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,74 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<!--
+Test adapted from https://mxr.mozilla.org/chromium/source/src/third_party/WebKit/LayoutTests/fast/dom/TreeWalker/resources/TreeWalker-currentNode.js
+ -->
+<head>
+<title>TreeWalker: currentNode</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="traversal-support.js"></script>
+<link rel="stylesheet" href="/resources/testharness.css">
+<div id=log></div>
+</head>
+<body>
+<div id='parent'>
+<div id='subTree'><p>Lorem ipsum <span>dolor <b>sit</b> amet</span>, consectetur <i>adipisicing</i> elit, sed do eiusmod <tt>tempor <b><i>incididunt ut</i> labore</b> et dolore magna</tt> aliqua.</p></div>
+</div>
+<p>Test TreeWalker currentNode functionality</p>
+<script>
+// var subTree = document.createElement('div');
+// subTree.innerHTML = "<p>Lorem ipsum <span>dolor <b>sit</b> amet</span>, consectetur <i>adipisicing</i> elit, sed do eiusmod <tt>tempor <b><i>incididunt ut</i> labore</b> et dolore magna</tt> aliqua.</p>"
+// document.body.appendChild(subTree);
+var subTree = document.getElementById("subTree");
+
+var all = function(node) { return true; }
+
+test(function()
+{
+ var w = document.createTreeWalker(subTree, NodeFilter.SHOW_ELEMENT, all);
+ assert_node(w.currentNode, { type: Element, id: 'subTree' });
+ assert_equals(w.parentNode(), null);
+ assert_node(w.currentNode, { type: Element, id: 'subTree' });
+}, "Test that TreeWalker.parent() doesn't set the currentNode to a node not under the root.");
+
+test(function()
+{
+ var w = document.createTreeWalker(subTree,
+ NodeFilter.SHOW_ELEMENT
+ | NodeFilter.SHOW_COMMENT,
+ all);
+ w.currentNode = document.documentElement;
+ assert_equals(w.parentNode(), null);
+ assert_equals(w.currentNode, document.documentElement);
+ w.currentNode = document.documentElement;
+ assert_equals(w.nextNode(), document.documentElement.firstChild);
+ assert_equals(w.currentNode, document.documentElement.firstChild);
+ w.currentNode = document.documentElement;
+ assert_equals(w.previousNode(), null);
+ assert_equals(w.currentNode, document.documentElement);
+ w.currentNode = document.documentElement;
+ assert_equals(w.firstChild(), document.documentElement.firstChild);
+ assert_equals(w.currentNode, document.documentElement.firstChild);
+ w.currentNode = document.documentElement;
+ assert_equals(w.lastChild(), document.documentElement.lastChild);
+ assert_equals(w.currentNode, document.documentElement.lastChild);
+ w.currentNode = document.documentElement;
+ assert_equals(w.nextSibling(), null);
+ assert_equals(w.currentNode, document.documentElement);
+ w.currentNode = document.documentElement;
+ assert_equals(w.previousSibling(), null);
+ assert_equals(w.currentNode, document.documentElement);
+}, "Test that we handle setting the currentNode to arbitrary nodes not under the root element.");
+
+test(function()
+{
+ var w = document.createTreeWalker(subTree, NodeFilter.SHOW_ELEMENT, all);
+ w.currentNode = subTree.previousSibling;
+ assert_equals(w.nextNode(), subTree);
+ w.currentNode = document.getElementById("parent");
+ assert_equals(w.firstChild(), subTree);
+}, "Test how we handle the case when the traversed to node is within the root, but the currentElement is not.");
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,742 @@
</span><ins>+
+PASS document.createTreeWalker(paras[0], 0, null)
+FAIL document.createTreeWalker(paras[0], 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0], 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0], 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[0], 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(paras[0], 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0], 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0], 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[0], NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(paras[0], NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0], NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0], NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[0], NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(paras[0], NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0], NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0], NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[0], NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(paras[0], NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0], NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0], NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[0].firstChild, 0, null)
+FAIL document.createTreeWalker(paras[0].firstChild, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0].firstChild, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0].firstChild, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[0].firstChild, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(paras[0].firstChild, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0].firstChild, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0].firstChild, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[0].firstChild, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(paras[0].firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0].firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0].firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[0].firstChild, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(paras[0].firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0].firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0].firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[0].firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(paras[0].firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0].firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[0].firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[1].firstChild, 0, null)
+FAIL document.createTreeWalker(paras[1].firstChild, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1].firstChild, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1].firstChild, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[1].firstChild, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(paras[1].firstChild, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1].firstChild, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1].firstChild, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[1].firstChild, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(paras[1].firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1].firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1].firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[1].firstChild, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(paras[1].firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1].firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1].firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[1].firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(paras[1].firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1].firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1].firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignPara1, 0, null)
+FAIL document.createTreeWalker(foreignPara1, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignPara1, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(foreignPara1, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignPara1, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(foreignPara1, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignPara1, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(foreignPara1, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignPara1, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(foreignPara1, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignPara1.firstChild, 0, null)
+FAIL document.createTreeWalker(foreignPara1.firstChild, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1.firstChild, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1.firstChild, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignPara1.firstChild, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(foreignPara1.firstChild, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1.firstChild, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1.firstChild, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignPara1.firstChild, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(foreignPara1.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignPara1.firstChild, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(foreignPara1.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignPara1.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(foreignPara1.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara1.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara1, 0, null)
+FAIL document.createTreeWalker(detachedPara1, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara1, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(detachedPara1, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara1, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(detachedPara1, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara1, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(detachedPara1, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara1, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(detachedPara1, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara1.firstChild, 0, null)
+FAIL document.createTreeWalker(detachedPara1.firstChild, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1.firstChild, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1.firstChild, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara1.firstChild, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(detachedPara1.firstChild, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1.firstChild, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1.firstChild, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara1.firstChild, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(detachedPara1.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara1.firstChild, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(detachedPara1.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara1.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(detachedPara1.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara1.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(document, 0, null)
+FAIL document.createTreeWalker(document, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(document, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(document, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(document, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(document, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(document, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(document, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(document, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(document, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(document, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(document, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedDiv, 0, null)
+FAIL document.createTreeWalker(detachedDiv, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedDiv, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedDiv, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedDiv, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(detachedDiv, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedDiv, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedDiv, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedDiv, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(detachedDiv, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedDiv, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedDiv, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedDiv, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(detachedDiv, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedDiv, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedDiv, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedDiv, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(detachedDiv, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedDiv, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedDiv, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignDoc, 0, null)
+FAIL document.createTreeWalker(foreignDoc, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoc, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoc, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignDoc, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(foreignDoc, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoc, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoc, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignDoc, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(foreignDoc, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoc, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoc, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignDoc, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(foreignDoc, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoc, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoc, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignDoc, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(foreignDoc, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoc, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoc, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignPara2, 0, null)
+FAIL document.createTreeWalker(foreignPara2, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara2, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara2, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignPara2, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(foreignPara2, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara2, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara2, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignPara2, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(foreignPara2, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara2, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara2, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignPara2, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(foreignPara2, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara2, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara2, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignPara2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(foreignPara2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignPara2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlDoc, 0, null)
+FAIL document.createTreeWalker(xmlDoc, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoc, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoc, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlDoc, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(xmlDoc, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoc, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoc, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlDoc, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(xmlDoc, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoc, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoc, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlDoc, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(xmlDoc, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoc, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoc, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlDoc, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(xmlDoc, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoc, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoc, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlElement, 0, null)
+FAIL document.createTreeWalker(xmlElement, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlElement, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlElement, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlElement, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(xmlElement, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlElement, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlElement, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlElement, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(xmlElement, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlElement, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlElement, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlElement, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(xmlElement, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlElement, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlElement, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlElement, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(xmlElement, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlElement, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlElement, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedTextNode, 0, null)
+FAIL document.createTreeWalker(detachedTextNode, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedTextNode, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedTextNode, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedTextNode, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(detachedTextNode, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedTextNode, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedTextNode, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedTextNode, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(detachedTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedTextNode, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(detachedTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(detachedTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignTextNode, 0, null)
+FAIL document.createTreeWalker(foreignTextNode, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignTextNode, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignTextNode, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignTextNode, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(foreignTextNode, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignTextNode, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignTextNode, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignTextNode, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(foreignTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignTextNode, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(foreignTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(foreignTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(processingInstruction, 0, null)
+FAIL document.createTreeWalker(processingInstruction, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(processingInstruction, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(processingInstruction, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(processingInstruction, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(processingInstruction, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(processingInstruction, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(processingInstruction, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(processingInstruction, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(processingInstruction, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(processingInstruction, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(processingInstruction, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(processingInstruction, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(processingInstruction, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(processingInstruction, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(processingInstruction, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(processingInstruction, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(processingInstruction, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(processingInstruction, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(processingInstruction, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedProcessingInstruction, 0, null)
+FAIL document.createTreeWalker(detachedProcessingInstruction, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedProcessingInstruction, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedProcessingInstruction, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedProcessingInstruction, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(detachedProcessingInstruction, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedProcessingInstruction, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedProcessingInstruction, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedProcessingInstruction, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(detachedProcessingInstruction, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedProcessingInstruction, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedProcessingInstruction, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedProcessingInstruction, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(detachedProcessingInstruction, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedProcessingInstruction, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedProcessingInstruction, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedProcessingInstruction, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(detachedProcessingInstruction, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedProcessingInstruction, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedProcessingInstruction, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(comment, 0, null)
+FAIL document.createTreeWalker(comment, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(comment, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(comment, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(comment, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(comment, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(comment, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(comment, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(comment, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(comment, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(comment, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(comment, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(comment, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(comment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(comment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(comment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(comment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(comment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(comment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(comment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedComment, 0, null)
+FAIL document.createTreeWalker(detachedComment, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedComment, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedComment, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedComment, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(detachedComment, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedComment, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedComment, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedComment, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(detachedComment, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedComment, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedComment, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedComment, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(detachedComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(detachedComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(docfrag, 0, null)
+FAIL document.createTreeWalker(docfrag, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(docfrag, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(docfrag, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(docfrag, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(docfrag, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(docfrag, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(docfrag, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(docfrag, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(docfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(docfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(docfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(docfrag, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(docfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(docfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(docfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(docfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(docfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(docfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(docfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(doctype, 0, null)
+FAIL document.createTreeWalker(doctype, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(doctype, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(doctype, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(doctype, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(doctype, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(doctype, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(doctype, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(doctype, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(doctype, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(doctype, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(doctype, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(doctype, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(doctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(doctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(doctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(doctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(doctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(doctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(doctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignDoctype, 0, null)
+FAIL document.createTreeWalker(foreignDoctype, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoctype, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoctype, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignDoctype, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(foreignDoctype, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoctype, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoctype, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignDoctype, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(foreignDoctype, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoctype, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoctype, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignDoctype, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(foreignDoctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignDoctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(foreignDoctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDoctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[1], 0, null)
+FAIL document.createTreeWalker(paras[1], 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1], 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1], 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[1], 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(paras[1], 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1], 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1], 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[1], NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(paras[1], NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1], NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1], NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[1], NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(paras[1], NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1], NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1], NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(paras[1], NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(paras[1], NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1], NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(paras[1], NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara2, 0, null)
+FAIL document.createTreeWalker(detachedPara2, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara2, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(detachedPara2, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara2, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(detachedPara2, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara2, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(detachedPara2, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(detachedPara2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara2.firstChild, 0, null)
+FAIL document.createTreeWalker(detachedPara2.firstChild, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2.firstChild, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2.firstChild, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara2.firstChild, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(detachedPara2.firstChild, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2.firstChild, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2.firstChild, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara2.firstChild, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(detachedPara2.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2.firstChild, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara2.firstChild, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(detachedPara2.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2.firstChild, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedPara2.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(detachedPara2.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedPara2.firstChild, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(testDiv, 0, null)
+FAIL document.createTreeWalker(testDiv, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(testDiv, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(testDiv, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(testDiv, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(testDiv, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(testDiv, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(testDiv, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(testDiv, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(testDiv, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(testDiv, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(testDiv, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(testDiv, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(testDiv, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(testDiv, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(testDiv, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(testDiv, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(testDiv, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(testDiv, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(testDiv, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedXmlElement, 0, null)
+FAIL document.createTreeWalker(detachedXmlElement, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlElement, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlElement, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedXmlElement, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(detachedXmlElement, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlElement, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlElement, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedXmlElement, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(detachedXmlElement, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlElement, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlElement, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedXmlElement, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(detachedXmlElement, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlElement, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlElement, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedXmlElement, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(detachedXmlElement, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlElement, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlElement, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedForeignTextNode, 0, null)
+FAIL document.createTreeWalker(detachedForeignTextNode, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignTextNode, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignTextNode, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedForeignTextNode, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(detachedForeignTextNode, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignTextNode, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignTextNode, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedForeignTextNode, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(detachedForeignTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedForeignTextNode, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(detachedForeignTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedForeignTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(detachedForeignTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlTextNode, 0, null)
+FAIL document.createTreeWalker(xmlTextNode, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlTextNode, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlTextNode, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlTextNode, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(xmlTextNode, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlTextNode, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlTextNode, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlTextNode, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(xmlTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlTextNode, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(xmlTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(xmlTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedXmlTextNode, 0, null)
+FAIL document.createTreeWalker(detachedXmlTextNode, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlTextNode, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlTextNode, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedXmlTextNode, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(detachedXmlTextNode, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlTextNode, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlTextNode, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedXmlTextNode, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(detachedXmlTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlTextNode, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedXmlTextNode, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(detachedXmlTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlTextNode, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedXmlTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(detachedXmlTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlTextNode, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlComment, 0, null)
+FAIL document.createTreeWalker(xmlComment, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlComment, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlComment, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlComment, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(xmlComment, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlComment, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlComment, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlComment, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(xmlComment, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlComment, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlComment, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlComment, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(xmlComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(xmlComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignComment, 0, null)
+FAIL document.createTreeWalker(foreignComment, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignComment, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignComment, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignComment, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(foreignComment, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignComment, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignComment, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignComment, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(foreignComment, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignComment, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignComment, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignComment, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(foreignComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(foreignComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedForeignComment, 0, null)
+FAIL document.createTreeWalker(detachedForeignComment, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignComment, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignComment, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedForeignComment, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(detachedForeignComment, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignComment, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignComment, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedForeignComment, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(detachedForeignComment, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignComment, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignComment, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedForeignComment, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(detachedForeignComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedForeignComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(detachedForeignComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedForeignComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedXmlComment, 0, null)
+FAIL document.createTreeWalker(detachedXmlComment, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlComment, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlComment, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedXmlComment, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(detachedXmlComment, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlComment, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlComment, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedXmlComment, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(detachedXmlComment, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlComment, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlComment, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedXmlComment, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(detachedXmlComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlComment, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(detachedXmlComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(detachedXmlComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(detachedXmlComment, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignDocfrag, 0, null)
+FAIL document.createTreeWalker(foreignDocfrag, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDocfrag, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDocfrag, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignDocfrag, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(foreignDocfrag, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDocfrag, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDocfrag, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignDocfrag, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(foreignDocfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDocfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDocfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignDocfrag, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(foreignDocfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDocfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDocfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(foreignDocfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(foreignDocfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDocfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(foreignDocfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlDocfrag, 0, null)
+FAIL document.createTreeWalker(xmlDocfrag, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDocfrag, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDocfrag, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlDocfrag, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(xmlDocfrag, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDocfrag, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDocfrag, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlDocfrag, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(xmlDocfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDocfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDocfrag, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlDocfrag, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(xmlDocfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDocfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDocfrag, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlDocfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(xmlDocfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDocfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDocfrag, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlDoctype, 0, null)
+FAIL document.createTreeWalker(xmlDoctype, 0, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoctype, 0, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoctype, 0, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlDoctype, 0xFFFFFFFF, null)
+FAIL document.createTreeWalker(xmlDoctype, 0xFFFFFFFF, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoctype, 0xFFFFFFFF, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoctype, 0xFFFFFFFF, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlDoctype, NodeFilter.SHOW_ELEMENT, null)
+FAIL document.createTreeWalker(xmlDoctype, NodeFilter.SHOW_ELEMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoctype, NodeFilter.SHOW_ELEMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoctype, NodeFilter.SHOW_ELEMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlDoctype, NodeFilter.SHOW_ATTRIBUTE, null)
+FAIL document.createTreeWalker(xmlDoctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoctype, NodeFilter.SHOW_ATTRIBUTE, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+PASS document.createTreeWalker(xmlDoctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, null)
+FAIL document.createTreeWalker(xmlDoctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return true })) assert_equals: .filter expected (function) function "function (node) { return true }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return false })) assert_equals: .filter expected (function) function "function (node) { return false }" but got (object) object "[object NodeFilter]"
+FAIL document.createTreeWalker(xmlDoctype, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT, (function(node) { return node.nodeName[0] == '#' })) assert_equals: .filter expected (function) function "function (node) { return node.nodeName[0] == '#' }" but got (object) object "[object NodeFilter]"
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerpreviousNodeLastChildRejectexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousNodeLastChildReject-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousNodeLastChildReject-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousNodeLastChildReject-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+Test that previousNode properly respects the filter.
+
+
+PASS Test that previousNode properly respects the filter.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerpreviousNodeLastChildRejecthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousNodeLastChildReject.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousNodeLastChildReject.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousNodeLastChildReject.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,88 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<!--
+Test adapted from https://mxr.mozilla.org/chromium/source/src/third_party/WebKit/LayoutTests/fast/dom/TreeWalker/script-tests/previousNodeLastChildReject.js
+ -->
+<head>
+<title>TreeWalker: previousNodeLastChildReject</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="traversal-support.js"></script>
+<link rel="stylesheet" href="/resources/testharness.css">
+<div id=log></div>
+</head>
+<body>
+<p>Test that previousNode properly respects the filter.</p>
+<script>
+var testElement;
+setup(function() {
+ testElement = document.createElement("div");
+ testElement.id = 'root';
+ // testElement.innerHTML='<div id="A1"><div id="B1"><div id="C1"></div><div id="C2"><div id="D1"></div><div id="D2"></div></div></div><div id="B2"><div id="C3"></div><div id="C4"></div></div></div>';
+ // testElement.innerHTML='
+ // <div id="A1">
+ // <div id="B1">
+ // <div id="C1">
+ // </div>
+ // <div id="C2">
+ // <div id="D1">
+ // </div>
+ // <div id="D2">
+ // </div>
+ // </div>
+ // </div>
+ // <div id="B2">
+ // <div id="C3">
+ // </div>
+ // <div id="C4">
+ // </div>
+ // </div>
+ // </div>';
+
+ // XXX for Servo, build the tree without using innerHTML
+ var a1 = document.createElement("div"); a1.id = "A1";
+ var b1 = document.createElement("div"); b1.id = "B1";
+ var b2 = document.createElement("div"); b2.id = "B2";
+ var c1 = document.createElement("div"); c1.id = "C1";
+ var c2 = document.createElement("div"); c2.id = "C2";
+ var c3 = document.createElement("div"); c3.id = "C3";
+ var c4 = document.createElement("div"); c4.id = "C4";
+ var d1 = document.createElement("div"); d1.id = "D1";
+ var d2 = document.createElement("div"); d2.id = "D2";
+
+ testElement.appendChild(a1);
+ a1.appendChild(b1);
+ a1.appendChild(b2);
+ b1.appendChild(c1);
+ b1.appendChild(c2);
+ b2.appendChild(c3);
+ b2.appendChild(c4);
+ c2.appendChild(d1);
+ c2.appendChild(d2);
+});
+
+test(function()
+{
+ function filter(node)
+ {
+ if (node.id == "C2")
+ return NodeFilter.FILTER_REJECT;
+ return NodeFilter.FILTER_ACCEPT;
+ }
+
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter);
+ assert_node(walker.currentNode, { type: Element, id: 'root' });
+ assert_node(walker.firstChild(), { type: Element, id: 'A1' });
+ assert_node(walker.currentNode, { type: Element, id: 'A1' });
+ assert_node(walker.nextNode(), { type: Element, id: 'B1' });
+ assert_node(walker.currentNode, { type: Element, id: 'B1' });
+ assert_node(walker.nextNode(), { type: Element, id: 'C1' });
+ assert_node(walker.currentNode, { type: Element, id: 'C1' });
+ assert_node(walker.nextNode(), { type: Element, id: 'B2' });
+ assert_node(walker.currentNode, { type: Element, id: 'B2' });
+ assert_node(walker.previousNode(), { type: Element, id: 'C1' });
+ assert_node(walker.currentNode, { type: Element, id: 'C1' });
+}, 'Test that previousNode properly respects the filter.');
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerpreviousSiblingLastChildSkipexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousSiblingLastChildSkip-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousSiblingLastChildSkip-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousSiblingLastChildSkip-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+Test that previousSibling properly respects the filter.
+
+
+PASS Test that previousSibling properly respects the filter.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerpreviousSiblingLastChildSkiphtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousSiblingLastChildSkip.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousSiblingLastChildSkip.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousSiblingLastChildSkip.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,92 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<!--
+Test adapted from https://mxr.mozilla.org/chromium/source/src/third_party/WebKit/LayoutTests/fast/dom/TreeWalker/script-tests/previousSiblingLastChildSkip.js
+ -->
+<head>
+<title>TreeWalker: previousSiblingLastChildSkip</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="traversal-support.js"></script>
+<link rel="stylesheet" href="/resources/testharness.css">
+<div id=log></div>
+</head>
+<body>
+<p>Test that previousSibling properly respects the filter.</p>
+<script>
+var testElement;
+setup(function() {
+ testElement = document.createElement("div");
+ testElement.id = 'root';
+ // testElement.innerHTML='<div id="A1"><div id="B1"><div id="C1"></div><div id="C2"><div id="D1"></div><div id="D2"></div></div></div><div id="B2"><div id="C3"></div><div id="C4"></div></div></div>';
+ // testElement.innerHTML='
+ // <div id="A1">
+ // <div id="B1">
+ // <div id="C1">
+ // </div>
+ // <div id="C2">
+ // <div id="D1">
+ // </div>
+ // <div id="D2">
+ // </div>
+ // </div>
+ // </div>
+ // <div id="B2">
+ // <div id="C3">
+ // </div>
+ // <div id="C4">
+ // </div>
+ // </div>
+ // </div>';
+
+ // XXX for Servo, build the tree without using innerHTML
+ var a1 = document.createElement("div"); a1.id = "A1";
+ var b1 = document.createElement("div"); b1.id = "B1";
+ var b2 = document.createElement("div"); b2.id = "B2";
+ var c1 = document.createElement("div"); c1.id = "C1";
+ var c2 = document.createElement("div"); c2.id = "C2";
+ var c3 = document.createElement("div"); c3.id = "C3";
+ var c4 = document.createElement("div"); c4.id = "C4";
+ var d1 = document.createElement("div"); d1.id = "D1";
+ var d2 = document.createElement("div"); d2.id = "D2";
+
+ testElement.appendChild(a1);
+ a1.appendChild(b1);
+ a1.appendChild(b2);
+ b1.appendChild(c1);
+ b1.appendChild(c2);
+ b2.appendChild(c3);
+ b2.appendChild(c4);
+ c2.appendChild(d1);
+ c2.appendChild(d2);
+});
+
+test(function()
+{
+ function filter(node)
+ {
+ if (node.id == "B1")
+ return NodeFilter.FILTER_SKIP;
+ return NodeFilter.FILTER_ACCEPT;
+ }
+
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter);
+ assert_node(walker.currentNode, { type: Element, id: 'root' });
+ assert_node(walker.firstChild(), { type: Element, id: 'A1' });
+ assert_node(walker.currentNode, { type: Element, id: 'A1' });
+ assert_node(walker.nextNode(), { type: Element, id: 'C1' });
+ assert_node(walker.currentNode, { type: Element, id: 'C1' });
+ assert_node(walker.nextNode(), { type: Element, id: 'C2' });
+ assert_node(walker.currentNode, { type: Element, id: 'C2' });
+ assert_node(walker.nextNode(), { type: Element, id: 'D1' });
+ assert_node(walker.currentNode, { type: Element, id: 'D1' });
+ assert_node(walker.nextNode(), { type: Element, id: 'D2' });
+ assert_node(walker.currentNode, { type: Element, id: 'D2' });
+ assert_node(walker.nextNode(), { type: Element, id: 'B2' });
+ assert_node(walker.currentNode, { type: Element, id: 'B2' });
+ assert_node(walker.previousSibling(), { type: Element, id: 'C2' });
+ assert_node(walker.currentNode, { type: Element, id: 'C2' });
+}, 'Test that previousSibling properly respects the filter.');
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkertraversalrejectexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-reject-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-reject-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-reject-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+Test TreeWalker with rejection
+
+
+PASS Testing nextNode
+PASS Testing firstChild
+PASS Testing nextSibling
+PASS Testing parentNode
+PASS Testing previousSibling
+PASS Testing previousNode
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkertraversalrejecthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-reject.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-reject.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-reject.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,110 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<!--
+Test adapted from https://mxr.mozilla.org/chromium/source/src/third_party/WebKit/LayoutTests/fast/dom/TreeWalker/script-tests/traversal-reject.js
+ -->
+<head>
+<title>TreeWalker: traversal-reject</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="traversal-support.js"></script>
+<link rel="stylesheet" href="/resources/testharness.css">
+<div id=log></div>
+</head>
+<body>
+<p>Test TreeWalker with rejection</p>
+<script>
+var testElement;
+setup(function() {
+ testElement = document.createElement("div");
+ testElement.id = 'root';
+ //testElement.innerHTML='<div id="A1"> <div id="B1"> <div id="C1"></div> </div> <div id="B2"></div><div id="B3"></div> </div>';
+ // <div id="A1">
+ // <div id="B1">
+ // <div id="C1"></div>
+ // </div>
+ // <div id="B2"></div>
+ // <div id="B3"></div>
+ // </div>
+
+
+ // XXX for Servo, build the tree without using innerHTML
+ var a1 = document.createElement("div"); a1.id = "A1";
+ var b1 = document.createElement("div"); b1.id = "B1";
+ var b2 = document.createElement("div"); b2.id = "B2";
+ var b3 = document.createElement("div"); b3.id = "B3";
+ var c1 = document.createElement("div"); c1.id = "C1";
+
+ testElement.appendChild(a1);
+ a1.appendChild(b1);
+ a1.appendChild(b2);
+ a1.appendChild(b3);
+ b1.appendChild(c1);
+});
+
+var rejectB1Filter = {
+ acceptNode: function(node) {
+ if (node.id == 'B1')
+ return NodeFilter.FILTER_REJECT;
+
+ return NodeFilter.FILTER_ACCEPT;
+ }
+}
+
+var skipB2Filter = {
+ acceptNode: function(node) {
+ if (node.id == 'B2')
+ return NodeFilter.FILTER_SKIP;
+
+ return NodeFilter.FILTER_ACCEPT;
+ }
+}
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, rejectB1Filter);
+ assert_node(walker.nextNode(), { type: Element, id: 'A1' });
+ assert_node(walker.nextNode(), { type: Element, id: 'B2' });
+ assert_node(walker.nextNode(), { type: Element, id: 'B3' });
+}, 'Testing nextNode');
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, rejectB1Filter);
+ assert_node(walker.firstChild(), { type: Element, id: 'A1' });
+ assert_node(walker.firstChild(), { type: Element, id: 'B2' });
+}, 'Testing firstChild');
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB2Filter);
+ assert_node(walker.firstChild(), { type: Element, id: 'A1' });
+ assert_node(walker.firstChild(), { type: Element, id: 'B1' });
+ assert_node(walker.nextSibling(), { type: Element, id: 'B3' });
+}, 'Testing nextSibling');
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, rejectB1Filter);
+ walker.currentNode = testElement.querySelectorAll('#C1')[0];
+ assert_node(walker.parentNode(), { type: Element, id: 'A1' });
+}, 'Testing parentNode');
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB2Filter);
+ walker.currentNode = testElement.querySelectorAll('#B3')[0];
+ assert_node(walker.previousSibling(), { type: Element, id: 'B1' });
+}, 'Testing previousSibling');
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, rejectB1Filter);
+ walker.currentNode = testElement.querySelectorAll('#B3')[0];
+ assert_node(walker.previousNode(), { type: Element, id: 'B2' });
+ assert_node(walker.previousNode(), { type: Element, id: 'A1' });
+}, 'Testing previousNode');
+
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkertraversalskipexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+Test TreeWalker with skipping
+
+
+PASS Testing nextNode
+PASS Testing firstChild
+PASS Testing nextSibling
+PASS Testing parentNode
+PASS Testing previousSibling
+PASS Testing previousNode
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkertraversalskipmostexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip-most-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip-most-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip-most-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+Test TreeWalker with skipping
+
+
+PASS Testing nextSibling
+PASS Testing previousSibling
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkertraversalskipmosthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip-most.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip-most.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip-most.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,67 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<!--
+Test adapted from https://mxr.mozilla.org/chromium/source/src/third_party/WebKit/LayoutTests/fast/dom/TreeWalker/script-tests/traversal-skip-most.js
+ -->
+<head>
+<title>TreeWalker: traversal-skip-most</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="traversal-support.js"></script>
+<link rel="stylesheet" href="/resources/testharness.css">
+<div id=log></div>
+</head>
+<body>
+<p>Test TreeWalker with skipping</p>
+<script>
+var testElement;
+setup(function() {
+ testElement = document.createElement("div");
+ testElement.id = 'root';
+ // testElement.innerHTML='<div id="A1"><div id="B1" class="keep"></div><div id="B2">this text matters</div><div id="B3" class="keep"></div></div>';
+ // <div id="A1">
+ // <div id="B1" class="keep"></div>
+ // <div id="B2">this text matters</div>
+ // <div id="B3" class="keep"></div>
+ // </div>
+
+
+ // XXX for Servo, build the tree without using innerHTML
+ var a1 = document.createElement("div"); a1.id = "A1";
+ var b1 = document.createElement("div"); b1.id = "B1"; b1.className = "keep";
+ var b2 = document.createElement("div"); b2.id = "B2";
+ var b3 = document.createElement("div"); b3.id = "B3"; b3.className = "keep";
+
+ testElement.appendChild(a1);
+ a1.appendChild(b1);
+ a1.appendChild(b2)
+ .appendChild(document.createTextNode("this text matters"));
+ a1.appendChild(b3);
+});
+
+var filter = {
+ acceptNode: function(node) {
+ if (node.className == 'keep')
+ return NodeFilter.FILTER_ACCEPT;
+
+ return NodeFilter.FILTER_SKIP;
+ }
+}
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter);
+ assert_node(walker.firstChild(), { type: Element, id: 'B1' });
+ assert_node(walker.nextSibling(), { type: Element, id: 'B3' });
+}, 'Testing nextSibling');
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, filter);
+ walker.currentNode = testElement.querySelectorAll('#B3')[0];
+ assert_node(walker.previousSibling(), { type: Element, id: 'B1' });
+}, 'Testing previousSibling');
+
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkertraversalskiphtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,112 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<!--
+Test adapted from https://mxr.mozilla.org/chromium/source/src/third_party/WebKit/LayoutTests/fast/dom/TreeWalker/script-tests/traversal-skip.js
+ -->
+<head>
+<title>TreeWalker: traversal-skip</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="traversal-support.js"></script>
+<link rel="stylesheet" href="/resources/testharness.css">
+<div id=log></div>
+</head>
+<body>
+<p>Test TreeWalker with skipping</p>
+<script>
+var testElement;
+setup(function() {
+ testElement = document.createElement("div");
+ testElement.id = 'root';
+ // testElement.innerHTML='<div id="A1"> <div id="B1"> <div id="C1"></div> </div> <div id="B2"></div><div id="B3"></div> </div>';
+ // <div id="A1">
+ // <div id="B1">
+ // <div id="C1"></div>
+ // </div>
+ // <div id="B2"></div>
+ // <div id="B3"></div>
+ // </div>
+
+
+ // XXX for Servo, build the tree without using innerHTML
+ var a1 = document.createElement("div"); a1.id = "A1";
+ var b1 = document.createElement("div"); b1.id = "B1";
+ var b2 = document.createElement("div"); b2.id = "B2";
+ var b3 = document.createElement("div"); b3.id = "B3";
+ var c1 = document.createElement("div"); c1.id = "C1";
+
+ testElement.appendChild(a1);
+ a1.appendChild(b1);
+ a1.appendChild(b2);
+ a1.appendChild(b3);
+ b1.appendChild(c1);
+});
+
+var skipB1Filter = {
+ acceptNode: function(node) {
+ if (node.id == 'B1')
+ return NodeFilter.FILTER_SKIP;
+
+ return NodeFilter.FILTER_ACCEPT;
+ }
+}
+
+var skipB2Filter = {
+ acceptNode: function(node) {
+ if (node.id == 'B2')
+ return NodeFilter.FILTER_SKIP;
+
+ return NodeFilter.FILTER_ACCEPT;
+ }
+}
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB1Filter);
+ assert_node(walker.nextNode(), { type: Element, id: 'A1' });
+ assert_node(walker.nextNode(), { type: Element, id: 'C1' });
+ assert_node(walker.nextNode(), { type: Element, id: 'B2' });
+ assert_node(walker.nextNode(), { type: Element, id: 'B3' });
+}, 'Testing nextNode');
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB1Filter);
+ assert_node(walker.firstChild(), { type: Element, id: 'A1' });
+ assert_node(walker.firstChild(), { type: Element, id: 'C1' });
+}, 'Testing firstChild');
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB2Filter);
+ assert_node(walker.firstChild(), { type: Element, id: 'A1' });
+ assert_node(walker.firstChild(), { type: Element, id: 'B1' });
+ assert_node(walker.nextSibling(), { type: Element, id: 'B3' });
+}, 'Testing nextSibling');
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB1Filter);
+ walker.currentNode = testElement.querySelectorAll('#C1')[0];
+ assert_node(walker.parentNode(), { type: Element, id: 'A1' });
+}, 'Testing parentNode');
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB2Filter);
+ walker.currentNode = testElement.querySelectorAll('#B3')[0];
+ assert_node(walker.previousSibling(), { type: Element, id: 'B1' });
+}, 'Testing previousSibling');
+
+test(function()
+{
+ var walker = document.createTreeWalker(testElement, NodeFilter.SHOW_ELEMENT, skipB1Filter);
+ walker.currentNode = testElement.querySelectorAll('#B3')[0];
+ assert_node(walker.previousNode(), { type: Element, id: 'B2' });
+ assert_node(walker.previousNode(), { type: Element, id: 'C1' });
+ assert_node(walker.previousNode(), { type: Element, id: 'A1' });
+}, 'Testing previousNode');
+
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerwalkingoutsideatreeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-walking-outside-a-tree-expected.txt (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-walking-outside-a-tree-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-walking-outside-a-tree-expected.txt        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+[Acid3 - Test 006a] walking outside a tree
+
+
+PASS walking outside a tree
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerwalkingoutsideatreehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-walking-outside-a-tree.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-walking-outside-a-tree.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-walking-outside-a-tree.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<!--
+Test adapted from https://github.com/operasoftware/presto-testo/blob/master/core/standards/acid3/individual/006a.html
+ -->
+<head>
+<title>TreeWalker: walking-outside-a-tree</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="traversal-support.js"></script>
+<link rel="stylesheet" href="/resources/testharness.css">
+<div id=log></div>
+</head>
+<body>
+<p>[Acid3 - Test 006a] walking outside a tree</p>
+<script>
+test(function () {
+ // test 6: walking outside a tree
+ var doc = document.createElement("div");
+ var head = document.createElement('head');
+ var title = document.createElement('title');
+ var body = document.createElement('body');
+ var p = document.createElement('p');
+ doc.appendChild(head);
+ head.appendChild(title);
+ doc.appendChild(body);
+ body.appendChild(p);
+
+ var w = document.createTreeWalker(body, 0xFFFFFFFF, null);
+ doc.removeChild(body);
+ assert_equals(w.lastChild(), p, "TreeWalker failed after removing the current node from the tree");
+ doc.appendChild(p);
+ assert_equals(w.previousNode(), title, "failed to handle regrafting correctly");
+ p.appendChild(body);
+ assert_equals(w.nextNode(), p, "couldn't retrace steps");
+ assert_equals(w.nextNode(), body, "couldn't step back into root");
+ assert_equals(w.previousNode(), null, "root didn't retake its rootish position");
+}, "walking outside a tree");
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalTreeWalkerhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker.html (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker.html         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker.html        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,298 @@
</span><ins>+<!doctype html>
+<title>TreeWalker tests</title>
+<link rel="author" title="Aryeh Gregor" href=ayg@aryeh.name>
+<meta name=timeout content=long>
+<div id=log></div>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=../common.js></script>
+<script>
+"use strict";
+
+// TODO .previousNode, .nextNode
+
+function filterNode(node, whatToShow, filter) {
+ // "If active flag is set throw an "InvalidStateError"."
+ // Ignore active flag for these tests, we aren't calling recursively
+ // TODO Test me
+
+ // "Let n be node's nodeType attribute value minus 1."
+ var n = node.nodeType - 1;
+
+ // "If the nth bit (where 0 is the least significant bit) of whatToShow is
+ // not set, return FILTER_SKIP."
+ if (!(whatToShow & (1 << n))) {
+ return NodeFilter.FILTER_SKIP;
+ }
+
+ // "If filter is null, return FILTER_ACCEPT."
+ if (!filter) {
+ return NodeFilter.FILTER_ACCEPT;
+ }
+
+ // "Set the active flag."
+ //
+ // "Let result be the return value of invoking filter."
+ //
+ // "Unset the active flag."
+ //
+ // "If an exception was thrown, re-throw the exception."
+ // TODO Test me
+ //
+ // "Return result."
+ return filter(node);
+}
+
+function testTraverseChildren(type, walker, root, whatToShow, filter) {
+ // TODO We don't test .currentNode other than the root
+ walker.currentNode = root;
+ assert_equals(walker.currentNode, root, "Setting .currentNode");
+
+ var expectedReturn = null;
+ var expectedCurrentNode = root;
+
+ // "To traverse children of type type, run these steps:
+ //
+ // "Let node be the value of the currentNode attribute."
+ var node = walker.currentNode;
+
+ // "Set node to node's first child if type is first, and node's last child
+ // if type is last."
+ node = type == "first" ? node.firstChild : node.lastChild;
+
+ // "Main: While node is not null, run these substeps:"
+ while (node) {
+ // "Filter node and let result be the return value."
+ var result = filterNode(node, whatToShow, filter);
+
+ // "If result is FILTER_ACCEPT, then set the currentNode attribute to
+ // node and return node."
+ if (result == NodeFilter.FILTER_ACCEPT) {
+ expectedCurrentNode = expectedReturn = node;
+ break;
+ }
+
+ // "If result is FILTER_SKIP, run these subsubsteps:"
+ if (result == NodeFilter.FILTER_SKIP) {
+ // "Let child be node's first child if type is first, and node's
+ // last child if type is last."
+ var child = type == "first" ? node.firstChild : node.lastChild;
+
+ // "If child is not null, set node to child and goto Main."
+ if (child) {
+ node = child;
+ continue;
+ }
+ }
+
+ // "While node is not null, run these subsubsteps:"
+ while (node) {
+ // "Let sibling be node's next sibling if type is first, and node's
+ // previous sibling if type is last."
+ var sibling = type == "first" ? node.nextSibling
+ : node.previousSibling;
+
+ // "If sibling is not null, set node to sibling and goto Main."
+ if (sibling) {
+ node = sibling;
+ break;
+ }
+
+ // "Let parent be node's parent."
+ var parent = node.parentNode;
+
+ // "If parent is null, parent is root, or parent is currentNode
+ // attribute's value, return null."
+ if (!parent || parent == root || parent == walker.currentNode) {
+ expectedReturn = node = null;
+ break;
+ } else {
+ // "Otherwise, set node to parent."
+ node = parent;
+ }
+ }
+ }
+
+ if (type == "first") {
+ assert_equals(walker.firstChild(), expectedReturn, ".firstChild()");
+ assert_equals(walker.currentNode, expectedCurrentNode,
+ ".currentNode after .firstChild()");
+ } else {
+ assert_equals(walker.lastChild(), expectedReturn, ".lastChild()");
+ assert_equals(walker.currentNode, expectedCurrentNode,
+ ".currentNode after .lastChild()");
+ }
+}
+
+function testTraverseSiblings(type, walker, root, whatToShow, filter) {
+ // TODO We don't test .currentNode other than the root's first or last child
+ if (!root.firstChild) {
+ // Nothing much to test
+
+ walker.currentNode = root;
+ assert_equals(walker.currentNode, root, "Setting .currentNode");
+
+ if (type == "next") {
+ assert_equals(walker.nextSibling(), null, ".nextSibling()");
+ assert_equals(walker.currentNode, root,
+ ".currentNode after .nextSibling()")
+ } else {
+ assert_equals(walker.previousSibling(), null, ".previousSibling()");
+ assert_equals(walker.currentNode, root,
+ ".currentNode after .previousSibling()")
+ }
+ return;
+ }
+
+ if (type == "next") {
+ walker.currentNode = root.firstChild;
+ assert_equals(walker.currentNode, root.firstChild,
+ "Setting .currentNode");
+ } else {
+ walker.currentNode = root.lastChild;
+ assert_equals(walker.currentNode, root.lastChild,
+ "Setting .currentNode");
+ }
+
+ var expectedReturn = null;
+ var expectedCurrentNode = type == "next" ? root.firstChild : root.lastChild;
+
+ // "To traverse siblings of type type run these steps:"
+ (function() {
+ // "Let node be the value of the currentNode attribute."
+ var node = type == "next" ? root.firstChild : root.lastChild;
+
+ // "If node is root, return null.
+ //
+ // "Run these substeps:
+ do {
+ // "Let sibling be node's next sibling if type is next, and node's
+ // previous sibling if type is previous."
+ var sibling = type == "next" ? node.nextSibling :
+ node.previousSibling;
+
+ // "While sibling is not null, run these subsubsteps:"
+ while (sibling) {
+ // "Set node to sibling."
+ node = sibling;
+
+ // "Filter node and let result be the return value."
+ var result = filterNode(node, whatToShow, filter);
+
+ // "If result is FILTER_ACCEPT, then set the currentNode
+ // attribute to node and return node."
+ if (result == NodeFilter.FILTER_ACCEPT) {
+ expectedCurrentNode = expectedReturn = node;
+ return;
+ }
+
+ // "Set sibling to node's first child if type is next, and
+ // node's last child if type is previous."
+ sibling = type == "next" ? node.firstChild : node.lastChild;
+
+ // "If result is FILTER_REJECT or sibling is null, then set
+ // sibling to node's next sibling if type is next, and node's
+ // previous sibling if type is previous."
+ if (result == NodeFilter.FILTER_REJECT || !sibling) {
+ sibling = type == "next" ? node.nextSibling :
+ node.previousSibling;
+ }
+ }
+
+ // "Set node to its parent."
+ node = node.parentNode;
+
+ // "If node is null or is root, return null.
+ if (!node || node == root) {
+ return;
+ }
+ // "Filter node and if the return value is FILTER_ACCEPT, then
+ // return null."
+ if (filterNode(node, whatToShow, filter)) {
+ return;
+ }
+
+ // "Run these substeps again."
+ } while (true);
+ })();
+
+ if (type == "next") {
+ assert_equals(walker.nextSibling(), expectedReturn, ".nextSibling()");
+ assert_equals(walker.currentNode, expectedCurrentNode,
+ ".currentNode after .nextSibling()");
+ } else {
+ assert_equals(walker.previousSibling(), expectedReturn, ".previousSibling()");
+ assert_equals(walker.currentNode, expectedCurrentNode,
+ ".currentNode after .previousSibling()");
+ }
+}
+
+function testWalker(root, whatToShow, filter) {
+ var walker = document.createTreeWalker(root, whatToShow, filter);
+
+ assert_equals(walker.root, root, ".root");
+ assert_equals(walker.whatToShow, whatToShow, ".whatToShow");
+ assert_equals(walker.filter, filter, ".filter");
+ assert_equals(walker.currentNode, root, ".currentNode");
+
+ var expectedReturn = null;
+ var expectedCurrentNode = walker.currentNode;
+ // "The parentNode() method must run these steps:"
+ //
+ // "Let node be the value of the currentNode attribute."
+ var node = walker.currentNode;
+
+ // "While node is not null and is not root, run these substeps:"
+ while (node && node != root) {
+ // "Let node be node's parent."
+ node = node.parentNode;
+
+ // "If node is not null and filtering node returns FILTER_ACCEPT, then
+ // set the currentNode attribute to node, return node."
+ if (node && filterNode(node, whatToShow, filter) ==
+ NodeFilter.FILTER_ACCEPT) {
+ expectedCurrentNode = expectedReturn = node;
+ }
+ }
+ assert_equals(walker.parentNode(), expectedReturn, ".parentNode()");
+ assert_equals(walker.currentNode, expectedCurrentNode,
+ ".currentNode after .parentNode()");
+
+ testTraverseChildren("first", walker, root, whatToShow, filter);
+ testTraverseChildren("last", walker, root, whatToShow, filter);
+
+ testTraverseSiblings("next", walker, root, whatToShow, filter);
+ testTraverseSiblings("previous", walker, root, whatToShow, filter);
+}
+
+var whatToShows = [
+ "0",
+ "0xFFFFFFFF",
+ "NodeFilter.SHOW_ELEMENT",
+ "NodeFilter.SHOW_ATTRIBUTE",
+ "NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_DOCUMENT",
+];
+
+var callbacks = [
+ "null",
+ "(function(node) { return true })",
+ "(function(node) { return false })",
+ "(function(node) { return node.nodeName[0] == '#' })",
+];
+
+var tests = [];
+for (var i = 0; i < testNodes.length; i++) {
+ for (var j = 0; j < whatToShows.length; j++) {
+ for (var k = 0; k < callbacks.length; k++) {
+ tests.push([
+ "document.createTreeWalker(" + testNodes[i] +
+ ", " + whatToShows[j] + ", " + callbacks[k] + ")",
+ eval(testNodes[i]), eval(whatToShows[j]), eval(callbacks[k])
+ ]);
+ }
+ }
+}
+generate_tests(testWalker, tests);
+
+testDiv.style.display = "none";
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversaltraversalsupportjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/traversal-support.js (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/traversal-support.js         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/traversal-support.js        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+// |expected| should be an object indicating the expected type of node.
+function assert_node(actual, expected)
+{
+ assert_true(actual instanceof expected.type,
+ 'Node type mismatch: actual = ' + actual.nodeType + ', expected = ' + expected.nodeType);
+ if (typeof(expected.id) !== 'undefined')
+ assert_equals(actual.id, expected.id);
+ if (typeof(expected.nodeValue) !== 'undefined')
+ assert_equals(actual.nodeValue, expected.nodeValue);
+}
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomtraversalw3cimportlog"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/traversal/w3c-import.log (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/traversal/w3c-import.log         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/traversal/w3c-import.log        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+The tests in this directory were imported from the W3C repository.
+Do NOT modify these tests directly in Webkit.
+Instead, create a pull request on the W3C CSS or WPT github:
+        https://github.com/w3c/csswg-test
+        https://github.com/w3c/web-platform-tests
+
+Then run the Tools/Scripts/import-w3c-tests in Webkit to reimport
+
+Do NOT modify or remove this file
+
+------------------------------------------------------------------------
+Properties requiring vendor prefixes:
+None
+Property values requiring vendor prefixes:
+None
+------------------------------------------------------------------------
+List of files:
+/LayoutTests/http/tests/w3c/dom/traversal/NodeFilter-constants.html
+/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator-removal.html
+/LayoutTests/http/tests/w3c/dom/traversal/NodeIterator.html
+/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-acceptNode-filter.html
+/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-basic.html
+/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-currentNode.html
+/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousNodeLastChildReject.html
+/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-previousSiblingLastChildSkip.html
+/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-reject.html
+/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip-most.html
+/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-traversal-skip.html
+/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker-walking-outside-a-tree.html
+/LayoutTests/http/tests/w3c/dom/traversal/TreeWalker.html
+/LayoutTests/http/tests/w3c/dom/traversal/traversal-support.js
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsw3cdomw3cimportlog"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/w3c/dom/w3c-import.log (0 => 189155)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/w3c/dom/w3c-import.log         (rev 0)
+++ trunk/LayoutTests/http/tests/w3c/dom/w3c-import.log        2015-08-30 05:07:17 UTC (rev 189155)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+The tests in this directory were imported from the W3C repository.
+Do NOT modify these tests directly in Webkit.
+Instead, create a pull request on the W3C CSS or WPT github:
+        https://github.com/w3c/csswg-test
+        https://github.com/w3c/web-platform-tests
+
+Then run the Tools/Scripts/import-w3c-tests in Webkit to reimport
+
+Do NOT modify or remove this file
+
+------------------------------------------------------------------------
+Properties requiring vendor prefixes:
+None
+Property values requiring vendor prefixes:
+None
+------------------------------------------------------------------------
+List of files:
+/LayoutTests/http/tests/w3c/dom/./common.js
+/LayoutTests/http/tests/w3c/dom/./constants.js
+/LayoutTests/http/tests/w3c/dom/./historical.html
+/LayoutTests/http/tests/w3c/dom/./interface-objects.html
+/LayoutTests/http/tests/w3c/dom/./interfaces.html
</ins></span></pre>
</div>
</div>
</body>
</html>